パブリッククラウド環境への ScalarDB Analytics のデプロイ
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このガイドでは、パブリッククラウド環境に ScalarDB Analytics をデプロイする方法について説明します。ScalarDB Analytics は現在、実行エンジンとして Apache Spark を使用しており、Amazon EMR や Databricks などのパブリッククラウドプロバイダーが提供するマネージド Spark サービスをサポートしています。
サポートされているマネージド Spark サービスとそのアプリケーションタイプ
ScalarDB Analytics は以下のマネージド Spark サービスとアプリケーションタイプをサポートしています。
| パブリッククラウドサービス | Spark Driver | Spark Connect | JDBC |
|---|---|---|---|
| Amazon EMR (EMR on EC2) | ✅ | ✅ | ❌ |
| Databricks | ✅ | ❌ | ✅ |
設定とデプロイ
パブリッククラウド環境を選択し、指示に従って ScalarDB Analytics を設定およびデプロイしてください。
- Amazon EMR
- Databricks
Amazon EMR の使用
ScalarDB Analytics を通じて分析クエリを実行するために Amazon EMR(EMR on EC2)を使用できます。EMR クラスターを起動する基本については、AWS EMR on EC2 ドキュメントを参照してください。
ScalarDB Analytics の設定
ScalarDB Analytics を有効にするには、EMR クラスターを起動するときにソフトウェア設定に次の構成を追加する必要があります。括弧内の内容を必ず置き換えてください:
[
{
"Classification": "spark-defaults",
"Properties": {
"spark.jars.packages": "com.scalar-labs:scalardb-analytics-spark-all-<SPARK_VERSION>_<SCALA_VERSION>:<SCALARDB_ANALYTICS_VERSION>",
"spark.sql.catalog.<CATALOG_NAME>": "com.scalar.db.analytics.spark.ScalarDbAnalyticsCatalog",
"spark.sql.extensions": "com.scalar.db.analytics.spark.extension.ScalarDbAnalyticsExtensions",
"spark.sql.catalog.<CATALOG_NAME>.license.cert_pem": "<YOUR_LICENSE_CERT_PEM>",
"spark.sql.catalog.<CATALOG_NAME>.license.key": "<YOUR_LICENSE_KEY>",
// 以下にデータソースの設定を続けてください
}
}
]
括弧内の内容は以下のように変更してください:
<SPARK_VERSION>: Spark のバージョン<SCALA_VERSION>: Spark のビルドに使用される Scala のバージョン<SCALARDB_ANALYTICS_VERSION>: ScalarDB Analytics のバージョン<CATALOG_NAME>: カタログの名前<YOUR_LICENSE_CERT_PEM>: PEM エンコードされたライセンス証明書<YOUR_LICENSE_KEY>: ライセンスキー
詳細については、ScalarDB Analytics のセットアップのための Spark 設定を参照してください。
Spark Driver を介した分析クエリの実行
EMR Spark クラスターが起動した後、ssh を使用して EMR クラスターのプライマリノードに接続し、Spark アプリケーションを実行できます。Spark Driver アプリケーションの作成方法の詳細については、Spark Driver アプリケーションを参照してください。
Spark Connect を介した分析クエリの実行
Spark Connect を使用して、起動した EMR クラスターを使用して Spark アプリケーションをリモートで実行できます。
まず、Spark Driver アプリケーションと同じようにソフトウェア設定を構成する必要があります。また、Spark Connect を有効にするために次の設定も行う必要があります。
Spark Connect サーバーのインバウンドトラフィックを許可する
- Spark Connect サーバーのインバウンドトラフィックを許可するセキュリティグループを作成します(デフォルトはポート15001)。
- 「Amazon EMR サービスロール」のロールがセキュリティグループを EMR クラスターのプライマリノードにアタッチできるようにします。
- EMR クラスターを起動するときに、「追加のセキュリティグループ」としてセキュリティグループを EMR クラスターのプライマリノードに追加します。
ブートストラップアクションを介した Spark Connect サーバーの起動
- 次のように Spark Connect サーバーを起動するためのスクリプトファイルを作成します:
#!/usr/bin/env bash
set -eu -o pipefail
cd /var/lib/spark
sudo -u spark /usr/lib/spark/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 のバージョン
- スクリプトファイルを S3 にアップロードします。
- 「Amazon の EMR 用 EC2 インスタンスプロファイル」のロールがS3にアップロードされたスクリプトファイルにアクセスできるようにします。
- EMR クラスターを起動するときに、アップロードされたスクリプトファイルを「ブートストラップアクション」に追加します。
分析クエリの実行
Spark Connect サーバーのリモート URL(sc://<PRIMARY_NODE_PUBLIC_HOSTNAME>:15001)を使用して、どこからでも Spark Connect を介して Spark アプリケーションを実行できます。
Spark Connect を使用した Spark アプリケーションの作成方法の詳細については、Spark Connect アプリケーションを参照してください。
Databricks の使用
ScalarDB Analytics を通じて分析クエリを実行するために Databricks を使用できます。
Databricks は Apache Spark の修正版を提供しており、オリジナルの Apache Spark とは異なる動作をすることに注意してください。
ScalarDB Analytics ライブラリ JAR を読み込むための init script の準備
-
Maven リポジトリから ScalarDB Analytics ライブラリ JAR ファイルをダウンロードします。Spark、Scala、ScalarDB のバージョンに基づいて適切な JAR ファイルを選択してください:
-
JAR ファイルを Databricks ワークスペースにアップロードします。
-
以下のような init script を作成し、
<PATH_TO_YOUR_JAR_FILE_IN_WORKSPACE>を Databricks ワークスペース内の JAR ファイルのパスに置き換えてください:#!/bin/bash
# Target directories
TARGET_DIRECTORIES=("/databricks/jars" "/databricks/hive_metastore_jars")
JAR_PATH="<PATH_TO_YOUR_JAR_FILE_IN_WORKSPACE>"
# Copy the JAR file to the target directories
for TARGET_DIR in "${TARGET_DIRECTORIES[@]}"; do
mkdir -p "$TARGET_DIR"
cp "$JAR_PATH" "$TARGET_DIR/"
done -
init script を Databricks ワークスペースにアップロードします。
Databricks コンピュートの起動
ScalarDB Analytics は Databricks の汎用コンピュートで動作します。コンピュートを起動する際、ScalarDB Analytics を有効にするために以下のようにコンピュートを設定する必要があります:
-
ComputeメニューでCreate computeを選択します。 -
PolicyドロップダウンメニューからUnrestrictedを選択します。 -
Spark 3.4 または 3.5 をサポートする適切な Databricks ランタイムバージョンを選択します。
-
Advancedセクションに移動します。Access modeタブで、アクセスモードとしてManualを選択し、No isolation sharedを選択します。 -
Advancedセクションで、Sparkタブを選択し、Spark configに以下の設定を入力します:spark.extraListeners com.scalar.db.analytics.spark.metering.ScalarDbAnalyticsListener
spark.sql.catalog.<CATALOG_NAME> com.scalar.db.analytics.spark.ScalarDbAnalyticsCatalog
spark.sql.catalog.<CATALOG_NAME>.server.host <CATALOG_SERVER_HOST>
spark.sql.catalog.<CATALOG_NAME>.server.catalog.port 11051
spark.sql.catalog.<CATALOG_NAME>.server.metering.port 11052プレースホルダーを置き換えてください:
<CATALOG_NAME>: カタログの名前。これは ScalarDB Analytics サーバー上で作成されたカタログと一致する必要があります。<CATALOG_SERVER_HOST>: ScalarDB Analytics サーバーのホストアドレス
-
Advancedセクションで、init scriptsタブを選択し、アップロードしたワークスペース内の init script のパスを指定します。 -
Createを選択します。
Spark Driver を介した分析クエリの実行
適切に設定された Databricks コンピュートで Spark アプリケーションを Databricks Notebook または Databricks Jobs で実行して、ScalarDB Analytics 内のテーブルにアクセスできます。Spark アプリケーションを実行するには、Pyspark、Scala、または Spark SQL アプリケーションを Databricks Notebook に移行するか、Databricks Jobs を使用して Spark アプリケーションを実行できます。ScalarDB Analytics は Notebook、Python、JAR、および SQL のタスクタイプで動作します。
Databricks Jobs の使用方法の詳細については、Databricks ジョブのドキュメントを参照してください。
JDBC ドライバーを介した分析クエリの実行
Databricks はコンピュート上で SQL ジョブを実行するための JDBC をサポートしています。コンピュートが起動した後、Advanced > JDBC/ODBC タブでコンピュートの JDBC URL を取得できます。JDBC を使用してコンピュートに接続するには、アプリケーションの依存関係に Databricks JDBC ドライバーを追加する必要があります。例えば、Gradle を使用している場合は、使用したい Databricks JDBC ドライバーのバージョンで <DRIVER_VERSION> を置き換えて、build.gradle ファイルに以下の依存関係を追加できます:
implementation("com.databricks:databricks-jdbc:<DRIVER_VERSION>")
その後、JDBC アプリケーションで一般的なように、JDBC URL (<YOUR_COMPUTE_JDBC_URL>) を使用して JDBC でコンピュートに接続できます。
Class.forName("com.databricks.client.jdbc.Driver");
String url = "<YOUR_COMPUTE_JDBC_URL>";
Connection conn = DriverManager.getConnection(url);
Databricks で JDBC を使用する方法の詳細については、Databricks JDBC ドライバードキュメントを参照してください。