ScalarDB Analytics を通じた分析クエリの実行
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このガイドでは、ScalarDB Analytics アプリケーションの開発方法について説明します。アーキテクチャと設計の詳細については、ScalarDB Analytics の設計を参照してください。
ScalarDB Analytics は現在、実行エンジンとして Spark を使用し、Spark カスタムカタログプラグインを提供することによって、ScalarDB で管理されているデータソースと管理されていないデータソースの統合ビューを Spark テーブルとして提供します。これにより、任意の Spark SQL クエリをシームレスに実行できます。
準備
このセクションでは、前提条件、ScalarDB Analytics セットアップのための Spark 設定、および ScalarDB Analytics 依存関係の追加について説明します。
前提条件
ScalarDB Analytics は Apache Spark 3.4以降で動作します。まだ Spark をインストールしていない場合は、Apache Spark のウェブサイトから Spark ディストリビューションをダウンロードしてください。
Apache Spark は Scala 2.12 または Scala 2.13 でビルドされています。ScalarDB Analytics は両方のバージョンをサポートしています。後で適切なバージョンの ScalarDB Analytics を選択できるように、使用しているバージョンを確認してください。詳細については、バージョン互換性を参照してください。
ScalarDB Analytics のセットアップのための Spark 設定
以下のセクションでは、ScalarDB Analyticsで利用可能なすべての設定オプションについて説明します。
- ScalarDB AnalyticsのSparkとの統合方法
- データソースの接続とアクセス方法
- ライセンス情報の提供方法
実践的なシナリオでの設定例については、サンプルアプリケーション設定を参照してください。
Spark プラグインの設定
| 設定キー名 | 必須 | 説明 |
|---|---|---|
spark.jars.packages | いいえ | 必要な依存関係の Maven 座標をカンマ区切りで指定します。使用する ScalarDB Analytics パッケージを含める必要があります。含めない場合は、Spark アプリケーションの実行時にコマンドライン引数として指定します。ScalarDB Analytics の Maven 座標の詳細については、ScalarDB Analytics 依存関係の追加を参照してください。 |
spark.sql.extensions | はい | com.scalar.db.analytics.spark.extension.ScalarDbAnalyticsExtensions を設定する必要があります。 |
spark.sql.catalog.<CATALOG_NAME> | はい | com.scalar.db.analytics.spark.ScalarDbAnalyticsCatalog を設定する必要があります。 |
<CATALOG_NAME>には任意の名前を指定できます。設定全体で同じカタログ名を使用するようにしてください。
ライセンスの設定
| 設定キー名 | 必須 | 説明 |
|---|---|---|
spark.sql.catalog.<CATALOG_NAME>.license.key | はい | ScalarDB AnalyticsのライセンスキーのJSON文字列 |
spark.sql.catalog.<CATALOG_NAME>.license.cert_pem | はい | ScalarDB AnalyticsライセンスのPEMエンコードされた証明書の文字列。cert_pemまたはcert_pathのいずれかを設定する必要があります。 |
spark.sql.catalog.<CATALOG_NAME>.license.cert_path | はい | ScalarDB AnalyticsライセンスのPEMエンコードされた証明書へのパス。cert_pemまたはcert_pathのいずれかを設定する必要があります。 |
データソースの設定
ScalarDB Analyticsは複数のタイプのデータソースをサポートしています。各タイプには特定の設定パラメータが必要です:
- ScalarDB
- MySQL
- PostgreSQL
- Oracle
- SQL Server
ScalarDB AnalyticsはScalarDBをデータソースとしてサポートしています。この表では、ScalarDBをデータソースとして設定する方法について説明します。
| 設定キー名 | 必須 | 説明 |
|---|---|---|
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.type | はい | 常にscalardbを設定します |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.config_path | はい | ScalarDBの設定ファイルへのパス |
<DATA_SOURCE_NAME>には任意の名前を使用できます。
| 設定キー名 | 必須 | 説明 |
|---|---|---|
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.type | はい | 常にmysqlを設定します |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.host | はい | MySQLサーバーのホスト名 |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.port | はい | MySQLサーバーのポート番号 |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.username | はい | MySQLサーバーのユーザー名 |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.password | はい | MySQLサーバーのパスワード |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.database | いいえ | 接続するデータベースの名前 |
<DATA_SOURCE_NAME>には任意の名前を使用できます。
| 設定キー名 | 必須 | 説明 |
|---|---|---|
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.type | はい | 常にpostgresqlまたはpostgresを設定します |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.host | はい | PostgreSQLサーバーのホスト名 |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.port | はい | PostgreSQLサーバーのポート番号 |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.username | はい | PostgreSQLサーバーのユーザー名 |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.password | はい | PostgreSQLサーバーのパスワード |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.database | はい | 接続するデータベースの名前 |
<DATA_SOURCE_NAME>には任意の名前 を使用できます。
| 設定キー名 | 必須 | 説明 |
|---|---|---|
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.type | はい | 常にoracleを設定します |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.host | はい | Oracleサーバーのホスト名 |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.port | はい | Oracleサーバーのポート番号 |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.username | はい | Oracleサーバーのユーザー名 |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.password | はい | Oracleサーバーのパスワード |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.service_name | はい | Oracleサーバーのサービス名 |
<DATA_SOURCE_NAME>には任意の名前を使用できます。
| 設定キー名 | 必須 | 説明 |
|---|---|---|
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.type | はい | 常にsqlserverまたはmssqlを設定します |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.host | はい | SQL Serverのホスト名 |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.port | はい | SQL Serverのポート番号 |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.username | はい | SQL Serverのユーザー名 |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.password | はい | SQL Serverのパスワード |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.database | いいえ | 接続するデータベースの名前 |
spark.sql.catalog.<CATALOG_NAME>.data_source.<DATA_SOURCE_NAME>.secure | いいえ | SQL Serverへの接続にセキュアな接続を使用するかどうか。セキュアな接続を使用する場合はtrueを設定します。 |
<DATA_SOURCE_NAME>には任意の名前を使用できます。
設定例
以下は、複数のデータソースを持つscalardbという名前のカタログを設定するScalarDB Analyticsの設定例です:
# Sparkプラグインの設定
spark.jars.packages com.scalar-labs:scalardb-analytics-spark-all-<SPARK_VERSION>_<SCALA_VERSION>:<SCALARDB_ANALYTICS_VERSION>
spark.sql.extensions com.scalar.db.analytics.spark.extension.ScalarDbAnalyticsExtensions
spark.sql.catalog.scalardb com.scalar.db.analytics.spark.ScalarDbAnalyticsCatalog
# ライセンスの設定
spark.sql.catalog.scalardb.license.key <LICENSE_KEY>
spark.sql.catalog.scalardb.license.cert_pem <LICENSE_PEM_ENCODED_CERTIFICATE>
# データソースの設定
spark.sql.catalog.scalardb.data_source.scalardb.type scalardb
spark.sql.catalog.scalardb.data_source.scalardb.config_path /path/to/scalardb.properties
spark.sql.catalog.scalardb.data_source.mysql_source.type mysql
spark.sql.catalog.scalardb.data_source.mysql_source.host localhost
spark.sql.catalog.scalardb.data_source.mysql_source.port 3306
spark.sql.catalog.scalardb.data_source.mysql_source.username root
spark.sql.catalog.scalardb.data_source.mysql_source.password password
spark.sql.catalog.scalardb.data_source.mysql_source.database mydb
括弧内の内容は以下のように変更する必要があります:
<LICENSE_KEY>: ScalarDB Analyticsのライセンスキー<LICENSE_PEM_ENCODED_CERTIFICATE>: ScalarDB AnalyticsライセンスのPEMエンコードされた証明書<SPARK_VERSION>: 使用しているSparkのメジャーおよびマイナーバージョン(例:3.4)<SCALA_VERSION>: Sparkインストールに対応するScalaのメジャーおよびマイナーバージョン(例:2.12または2.13)<SCALARDB_ANALYTICS_VERSION>: ScalarDB Analyticsのバージョン
ScalarDB Analytics 依存関係の追加
ScalarDB Analytics は Maven Central Repository でホストされています。パッケージ名は scalardb-analytics-spark-all-<SPARK_VERSION>_<SCALA_VERSION>:<SCALARDB_ANALYTICS_VERSION> で、以下の通りです:
<SPARK_VERSION>: 使用している Spark のメジャーおよびマイナーバージョン(例:3.4)<SCALA_VERSION>: Spark インストールに対応する Scala のメジャーおよびマイナーバージョン(例:2.12 または 2.13)<SCALARDB_ANALYTICS_VERSION>: ScalarDB Analytics のバージョン
バージョンの互換性の詳細については、バージョン互換性を参照してください。
プロジェクトのビルド設定を設定することで、この依存関係をプロジェクトに追加できます。例えば、Gradleを使用している場合は、build.gradleファイルに以下を追加できます:
dependencies {
implementation 'com.scalar-labs:scalardb-analytics-spark-all-<SPARK_VERSION>_<SCALA_VERSION>:<SCALARDB_ANALYTICS_VERSION>'
}
Gradle の Shadow プラグインや Maven の Shade プラグインなどを使用して、アプリケーションを単一の fat JAR ファイルにバンドルする場合は、使用しているプラグインに応じて provided や shadow などの適切な configuration を選択して、fat JAR ファイルから ScalarDB Analytics を除外する必要があります。
Spark アプリケーションの開発
このセクションでは、Java を使用して ScalarDB Analytics を使用する Spark アプリケーションを開発する方法について説明します。
ScalarDB Analytics を使用した Spark アプリケーションの開発には3つの方法があります:
- Sparkドライバーアプリケーション: クラスター内で実行される従来のSparkアプリケーション
- Spark Connectアプリケーション: Spark Connectプロトコルを使用するリモートアプリケーション
- JDBCアプリケーション: JDBCインターフェースを使用するリモートアプリケーション
環境によっては、上記のすべての方法を使用できない場合があります。サポートされる機能とデプロイメントオプションの詳細については、サポートされるマネージド Spark サービスとそのアプリケーションタイプを参照してください。
これらのすべての方法で、同じテーブル識別子形式を使用して ScalarDB Analytics のテーブルを参照できます。ScalarDB Analytics がデータソースからカタログ情報をマッピングする方法の詳細については、データソース別のカタログ情報マッピングを参照してください。
- Spark ドライバーアプリケーション
- Spark Connect アプリケーション
- JDBC アプリケーション
ScalarDB Analyticsには一般的に使用されるSparkSessionクラスを使用できます。また、YARN、Kubernetes、スタンドアロン、ローカルモードなど、Sparkがサポートするあらゆるタイプのクラスターデプロイメントを使用できます。
ScalarDB Analyticsのテーブルからデータを読み取るには、通常のSparkテーブルを読み取る場合と同じようにspark.sqlまたはspark.read.table関数を使用できます。
まず、Javaプロジェクトをセットアップする必要があります。例えば、Gradleを使用している場合は、build.gradleファイルに以下を追加できます:
dependencies {
implementation 'com.scalar-labs:scalardb-analytics-spark-<SPARK_VERSION>_<SCALA_VERSION>:<SCALARDB_ANALYTICS_VERSION>'
}
以下はSparkドライバーアプリケーションの例です:
import org.apache.spark.sql.SparkSession;
public class MyApp {
public static void main(String[] args) {
// SparkSessionを作成
try (SparkSession spark = SparkSession.builder().getOrCreate()) {
// ScalarDB Analyticsのテーブルからデータを読み取る
spark.sql("SELECT * FROM my_catalog.my_data_source.my_namespace.my_table").show();
}
}
}
その後、spark-submitコマンドを使用してアプリケーションをビルドして実行できます。
通常のSparkアプリケーションと同様に、アプリケーションのfat JARファイルをビルドする必要がある場合があります。
spark-submit --class MyApp --master local[*] my-spark-application-all.jar
spark-sqlやspark-shellなどのSparkが提供する他のCLIツールを使用して、ScalarDB Analyticsのテーブルを操作することもできます。
Spark Connect を使用して ScalarDB Analytics と対話できます。Spark Connect を使用することで、リモートの Spark クラスターにアクセスし、Spark ドライバーアプリケーションと同じ方法でデータを読み取ることができます。以下では、Spark Connect の使用方法について簡単に説明します。
まず、リモートの Spark クラスターで以下のコマンドを実行して、Spark Connect サーバーを起動する必要があります:
./sbin/start-connect-server.sh --packages org.apache.spark:spark-connect_<SCALA_VERSION>:<SPARK_FULL_VERSION>,com.scalar-labs:scalardb-analytics-spark-all-<SPARK_VERSION>_<SCALA_VERSION>:<SCALARDB_ANALYTICS_VERSION>
括弧内の内容は以下のように変更する必要があります:
<SCALA_VERSION>: Spark インストールに対応する Scala のメジャーおよびマイナーバージョン(例:2.12 または 2.13)<SPARK_FULL_VERSION>: 使用している Spark の完全なバージョン(例:3.5.3)<SPARK_VERSION>: 使用している Spark のメジャーおよびマイナーバージョン(例:3.5)<SCALARDB_ANALYTICS_VERSION>: ScalarDB Analytics のバージョン
パッケージのバージョンは、使用している Spark と ScalarDB Analytics のバージョンと一致する必要があります。
また、アプリケーションに Spark Connect クライアントパッケージを含める必要があります。例えば、Gradle を使用している場合は、build.gradle ファイルに以下を追加できます:
implementation("org.apache.spark:spark-connect-client-jvm_2.12:3.5.3")
その後、Spark Connect クライアントアプリケーションを作成してサーバーに接続し、データを読み取ることができます。
import org.apache.spark.sql.SparkSession;
public class MyApp {
public static void main(String[] args) {
try (SparkSession spark = SparkSession.builder()
.remote("sc://<CONNECT_SERVER_URL>:<CONNECT_SERVER_PORT>")
.getOrCreate()) {
// ScalarDB Analyticsのテーブルからデータを読み取る
spark.sql("SELECT * FROM my_catalog.my_data_source.my_namespace.my_table").show();
}
}
}
以下のコマンドを実行して、Spark Connect クライアントアプリケーションを通常の Java アプリケーションとして実行できます:
java -jar my-spark-connect-client.jar
Spark Connect の使用方法の詳細については、Spark Connect のドキュメントを参照してください。
残念ながら、Spark Thrift JDBC サーバーは ScalarDB Analytics に必要な Spark の機能をサポートしていないため、Apache Spark 環境でJDBCを使用して ScalarDB Analytics からデータを読み取ることはできません。JDBC アプリケーションについてここで言及しているのは、一部のマネージド Spark サービスが JDBC インターフェースを介して Spark クラスターと対話する異なる方法を提供しているためです。詳細については、サポートされているマネージド Spark サービスとそのアプリケーションタイプを参照してください。
カタログ情報のマッピング
ScalarDB Analyticsは、データソース、名前空間、テーブル、列を含む独自のカタログを管理します。この情報は自動的にSparkカタログにマッピングされます。このセクションでは、ScalarDB Analyticsがカタログ情報をSparkカタログにマッピングする方法について説明します。
データソース内の情報がScalarDB Analyticsカタログにマッピングされる方法の詳細については、データソース別のカタログ情報マッピングを参照してください。