パブリッククラウド環境への ScalarDB Analytics のデプロイ
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このガイドでは、パブリッククラウド環境に ScalarDB Analytics をデプロイする方法について説明します。ScalarDB Analytics は2つの主要なコンポーネントで構成されています: ScalarDB Analytics サーバーと Apache Spark です。このガイドでは、Spark 環境として Amazon EMR、Databricks、Azure Synapse Analytics、または Google Cloud Dataproc を選択できます。
詳細については、ScalarDB Analytics の設計を参照してください。
ScalarDB Analytics サーバーのデプロイ
ScalarDB Analytics には、メタデータとデータソース接続を管理するカタログサーバーが必要です。カタログサーバーは、Kubernetes クラスター上で Helm Chart を使用してデプロイする必要があります。
詳細なデプロイ手順については、AWS Marketplace を通じて Scalar 製品をインストールする方法を参照してください。
カタログサーバーをデプロイした後、Spark 設定のために以下の情報をメモしてください:
- カタログサーバーのホストアドレス
- カタログポート (デフォルト: 11051)
- メータリングポート (デフォルト: 11052)
Spark と ScalarDB Analytics のデプロイ
カタログサーバーをデプロイした後、マネージド Spark サービスを使用して Spark と ScalarDB Analytics を設定およびデプロイできます。
サポートされているマネージド Spark サービスとそのアプリケーションタイプ
ScalarDB Analytics は以下のマネージド Spark サービスとアプリケーションタイプをサポートしています。
| パブリッククラウドサービス | Spark ドライバー | Spark Connect | ノートブック | JDBC |
|---|---|---|---|---|
| Amazon EMR (EMR on EC2) | ✅ | ✅ | ✅ | ❌ |
| Databricks | ✅ | ❌ | ✅ | ✅ |
| Azure Synapse Analytics | ✅ | ❌ | ✅ | ❌ |
| Google Cloud Dataproc | ✅ | ✅ | ✅ | ❌ |
設定とデプロイ
パブリッククラウド環境を選択し、指示に従って Spark と ScalarDB Analytics を設定およびデプロイしてください。
- Amazon EMR
- Databricks
- Azure Synapse Analytics
- Google Cloud Dataproc
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.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"
}
}
]
括弧内の内容は以下のように変更してください:
<SPARK_VERSION>: Spark のバージョン (例:3.5または3.4)<SCALA_VERSION>: Spark のビルドに使用される Scala のバージョン (例:2.13または2.12)<SCALARDB_ANALYTICS_VERSION>: ScalarDB Analytics のバージョン (例:3.17.1)<CATALOG_NAME>: カタログの名前。これは ScalarDB Analytics サーバー上で作成されたカタログと一致する必要があります。<CATALOG_SERVER_HOST>: ScalarDB Analytics サーバーのホストアドレス
詳細については、ScalarDB Analytics のセットアップのための Spark 設定を参照してください。
Spark ドライバーを介した分析クエリの実行
EMR Spark クラスターが起動した後、ssh を使用して EMR クラスターのプライマリノードに接続し、Spark アプリケーションを実行できます。Spark ドライバーアプリケーションの作成方法の詳細については、Spark ドライバーアプリケーションを参照してください。
Spark Connect を介した分析クエリの実行
Spark Connect を使用して、起動した EMR クラスターを使用して Spark アプリケーションをリモートで実行できます。
まず、Spark ドライバーアプリケーションと同じようにソフトウェア設定を設定する必要があります。また、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 アプリケーションを参照してください。
ノートブックを使用したインタラクティブクエリの実行
EMR Studio ノートブックを使用して、ScalarDB Analytics を通じてインタラクティブクエリを実行することもできます。EMR Studio は、EMR クラスターにアタッチできるマネージド Jupyter ノートブック環境を提供します。
EMR Studio ノートブックの設定および使用方法の詳細については、Amazon EMR Studio ドキュメントを参照してください。
ScalarDB Analytics で設定された EMR クラスターにノートブックをアタッチした後、%%sql マジックコマンドを使用して SQL クエリを実行できます。
利用可能なカタログを一覧表示するには、次のコマンドを実行します:
%%sql
-- 利用可能なカタログを一覧表示
SHOW CATALOGS
ScalarDB カタログ内のデータベースを一覧表示するには、次のコマンドを実行し、<CATALOG_NAME> を ScalarDB Analytics サーバーで設定された実際のカタログ名に置き換えてください。
%%sql
-- ScalarDB カタログ内のデータベースを一覧表示
SHOW DATABASES IN <CATALOG_NAME>
データをクエリするには、次のコマンドを実行し、山括弧内のプレースホルダーを ScalarDB Analytics サーバーで設定された実際のカタログ、データソース、名前空間、テーブル名に置き換えてください。
%%sql
-- データをクエリ
SELECT * FROM <CATALOG_NAME>.<DATA_SOURCE_NAME>.<NAMESPACE_NAME>.<TABLE_NAME> LIMIT 10
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 ドライバーを介した分析クエリの実行
適切に設定された Databricks コンピュートで Databricks Jobs を使用して Spark アプリケーションを実行し、ScalarDB Analytics 内のテーブルにアクセスできます。ScalarDB Analytics は Python、JAR、SQL、および Notebook のタスクタイプで動作します。ノートブックの使用詳細については、以下のセクションを参照してください。
Databricks Jobs の使用方法の詳細については、Databricks ジョブのドキュメントを参照してください。
ノートブックを使用したインタラクティブクエリの実行
Databricks ノートブックを使用して、ScalarDB Analytics を通じてインタラクティブクエリを実行することもできます。ScalarDB Analytics で設定されたコンピュートを起動した後、ノートブックを作成してコンピュートにアタッチできます。
Databricks ノートブックの使用方法の詳細については、Databricks ノートブックのドキュメントを参照してください。
コンピュートにノートブックをアタッチした後、次のように SQL クエリを実行できます。
利用可能なカタログを一覧表示するには、次のコマンドを実行します:
-- 利用可能な カタログを一覧表示
SHOW CATALOGS
ScalarDB カタログ内のデータベースを一覧表示するには、次のコマンドを実行し、<CATALOG_NAME> を ScalarDB Analytics サーバーで設定された実際のカタログ名に置き換えてください。
-- ScalarDB カタログ内のデータベースを一覧表示
SHOW DATABASES IN <CATALOG_NAME>
データをクエリするには、次のコマンドを実行し、山括弧内のプレースホルダーを ScalarDB Analytics サーバーで設定された実際のカタログ、データソース、名前空間、テーブル名に置き換えてください。
-- データをクエリ
SELECT * FROM <CATALOG_NAME>.<DATA_SOURCE_NAME>.<NAMESPACE_NAME>.<TABLE_NAME> LIMIT 10
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 ドライバードキュメントを参照してください。
Azure Synapse Analytics の使用
ScalarDB Analytics を通じて分析クエリを実行するために Azure Synapse Analytics を使用できます。Azure Synapse Analytics の基本については、Azure Synapse Analytics ドキュメントを参照してください。
Azure Synapse Analytics では、Spark ワークロードを実行するためにサーバーレス Apache Spark プールを使用します。Spark プールの詳細については、Azure Synapse Analytics の Apache Spark を参照してください。
前提条件
Azure Synapse で ScalarDB Analytics を設定する前に、以下の要件が満たされていることを確認してください。
Synapse ワークスペース
Synapse ワークスペースは、Azure での分析のためのコラボレーション環境です。Spark ワークロードを実行する前に、Synapse ワークスペースを作成する必要があります。Synapse ワークスペースの作成の詳細については、クイックスタート: Synapse ワークスペースの作成を参照してください。
このガイドでは、マネージド仮想ネットワークが有効化された Synapse ワークスペースが作成されていることを前提としています。マネージド仮想ネットワークは、ネットワークの分離とセキュリティのために推奨されています。詳細については、Azure Synapse Analytics マネージド仮想ネットワークを参照してください。
ストレージの権限
Spark ドライバーアプリケーションを実行する予定がある場合、ジョブを送信する Synapse ワークスペースのマネージド ID とユーザーアカウントの両方に、ストレージアカウントの Storage Blob Data Contributor ロールが必要です。このロールは、サブスクリプション所有者またはユーザーアクセス管理者によって割り当てられる必要があります。
ScalarDB Analytics の設定
ScalarDB Analytics を有効にするには、Synapse Studio の Spark プール設定に以下の設定を追加 します。
-
Synapse Studio に移動し、管理を選択し、Apache Spark プールを選択します。
-
Spark プールを選択し、Apache Spark 設定を選択します。
-
以下のプロパティで新しい設定を作成するか、既存のものを編集します。
spark.jars.packages com.scalar-labs:scalardb-analytics-spark-all-<SPARK_VERSION>_<SCALA_VERSION>:<SCALARDB_ANALYTICS_VERSION>
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_IP>
spark.sql.catalog.<CATALOG_NAME>.server.catalog.port 11051
spark.sql.catalog.<CATALOG_NAME>.server.metering.port 11052
以下は、山括弧内の内容を何に変更すべきかを説明します。
<SPARK_VERSION>: Spark のバージョン (3.4または3.5)。<SCALA_VERSION>: Spark のビルドに使用される Scala のバージョン (2.12または2.13)。<SCALARDB_ANALYTICS_VERSION>: ScalarDB Analytics のバージョン。<CATALOG_NAME>: カタログの名前。これは ScalarDB Analytics サーバー上で作成されたカタログと一致する必要があります。<CATALOG_SERVER_IP>: ScalarDB Analytics サーバーのマネージドプライベートエンドポイントの IP アドレス。
プライベート接続の設定
ScalarDB Analytics では、Synapse ワークスペースのマネージド仮想ネットワークから ScalarDB Analytics サーバーとデータソースの両方へのネットワーク接続が必要です。この接続を確立するには、以下のように Private Link Service とマネージドプライベートエンドポイントを使用する必要があります。
- Synapse ワークスペースと ScalarDB Analytics サーバー間の接続: Azure Kubernetes Service (AKS) の内部ロードバランサー用の Private Link Service を作成し、Synapse ワークスペースのマネージド仮想ネットワークにマネージドプライベートエンドポイントを作成します。
- Synapse ワークスペースとデータソース間の接続: Synapse ワークスペースのマネージド仮想ネットワークから各データソース (例: Azure Database for PostgreSQL) に直接マネージドプライベートエンドポイントを作成します。
Azure Database for PostgreSQL Flexible Server を使用している場合は、パブリックアクセスモードで作成する必要があります。VNet 統合モードでは、作成後にプライベートエンドポイントの追加をサポートしていません。詳細については、Azure Database for PostgreSQL ドキュメントのネットワークセクションを参照してください。
ScalarDB Analytics サーバー用の Private Link Service の作成
ScalarDB Analytics サーバー用の内部ロードバランサーを作成するには、Helm Chart のカスタムバリューファイルでscalarDbAnalyticsServer.service.type を LoadBalancer に設定します。
Helm Chart には、デフォルトで service.beta.kubernetes.io/azure-load-balancer-internal: "true" アノテーションが含まれているため、ロードバランサーは内部ロードバランサーとして作成されます。
この設定でデプロイした後、以下の手順に従ってください。
-
ScalarDB Analytics サーバーサービスに内部 IP アドレスが割り当てられていることを確認します。
kubectl get svc -n <NAMESPACE> <SCALARDB_ANALYTICS_SERVICE_NAME><NAMESPACE>を ScalarDB Analytics サーバーがデプロイされている名前空間に、<SCALARDB_ANALYTICS_SERVICE_NAME>をサービス名 (例:scalardb-analytics-server) に置き換えてください。サービスのEXTERNAL-IP列にプライベート IP アドレス (例:10.x.x.x) が割り当てられていることを確認してください。内部ロードバランサーサービスの場合、EXTERNAL-IPにはパブリック IP ではなくプライベート IP アドレスが表示されます。 -
Azure ポータルで Private Link Serviceを作成します。
- Private Link に移動し、Private Link Services を選択し、作成を選択します。
- ScalarDB Analytics サーバーサービス用の内部ロードバランサーを選択します。
- ソース NAT サブネットとアクセスセキュリティを設定します。
-
Synapse Studio でマネージドプライベートエンドポイントを作成します。
- 管理に移動し、マネージドプライベートエンドポイントを選択し、新規を選択します。
- Private Link Service を選択し、作成した Private Link Service を選択します。
- 作成後、Private Link Service の設定で接続を承認します。
-
Spark 設定で使用するためにマネージドプライベートエンドポイントの IP アドレスをメモします。
データソース用のマネージドプライベートエンドポイントの作成
- Synapse Studio で、管理に移動し、マネージドプライベートエンドポイントを選択し、新規を選択します。
- データベースタイプ (例: Azure Database for PostgreSQL Flexible Server) を選択します。
- データベースサーバーを選択し、エンドポイントを作成します。
- データベースサーバーのネットワーク設定で接続を承認します。
- Azure ポータルに移動し、データベースサーバーを選択し、ネットワークを選択し、プライベートアクセスを選択します。
- 保留中の接続を選択し、承認します。
Spark ドライバーを介した分析クエリの実行
Spark ドライバーアプリケーションを実行するには:
- Spark ドライバーアプリケーション JAR を Azure Data Lake Storage Gen2 にアップロードします。
- 開発に移動し、新しい Spark ジョブ定義を選択します。
- ジョブを設定します。
- 言語: Spark (Scala/Java)
- メインクラス: アプリケーションのメインクラス
- メイン定義ファイル: JAR ファイルへのパス (例:
abfss://<CONTAINER>@<STORAGE>.dfs.core.windows.net/path/to/app.jar)<CONTAINER>: Azure Data Lake Storage Gen2 コンテナ名<STORAGE>: Azure ストレージアカウント名
- Spark プール: 設定した Spark プール
- ジョブを送信します。
前提条件セクションで説明されている必要な権限が設定されていることを確認してください。
ノートブックを使用したインタラクティブクエリの実行
Azure Synapse Analytics ノー トブックを使用して、ScalarDB Analytics を通じてインタラクティブクエリを実行することもできます。Spark プールを設定した後、ノートブックを作成して Spark プールにアタッチできます。
Azure Synapse Analytics ノートブックの使用方法の詳細については、Azure Synapse Analytics ノートブックのドキュメントを参照してください。
Spark プールにノートブックをアタッチした後、次のように SQL クエリを実行できます。
利用可能なカタログを一覧表示するには、次のコマンドを実行します:
%%sql
-- 利用可能なカタログを一覧表示
SHOW CATALOGS
ScalarDB カタログ内のデータベースを一覧表示するには、次のコマンドを実行し、<CATALOG_NAME> を ScalarDB Analytics サーバーで設定された実際のカタログ名に置き換えてください。
%%sql
-- ScalarDB カタログ内のデータベースを一覧表示
SHOW DATABASES IN <CATALOG_NAME>
データをクエリするには、次のコマンドを実行し、山括弧内のプレースホルダーを ScalarDB Analytics サーバーで設定された実際のカタログ、データソース、名前空間、テーブル名に置き換えてください。
%%sql
-- データをクエリ
SELECT * FROM <CATALOG_NAME>.<DATA_SOURCE_NAME>.<NAMESPACE_NAME>.<TABLE_NAME> LIMIT 10
ScalarDB Analytics を通じて分析クエリを実行するために Google Cloud Dataproc を使用できます。Dataproc は Compute ベースのクラスタと Serverless の両方を提供しており、ScalarDB Analytics は両方に対応しています。
Dataproc の基本については、Google Cloud Dataproc ドキュメントを参照してください。
Google Cloud 環境のセットアップ
ScalarDB Analytics を Dataproc で使用するには、まず Google Cloud 環境をセットアップする必要があります: VPC の作成、ScalarDB Analytics サーバー用データベースインスタンスの作成、Google Kubernetes Engine (GKE) クラスタの作成、ScalarDB Analytics サーバーのデプロイを行います。
VPC の作成
デフォルトでは、ScalarDB Analytics サーバーの Helm Chart は、LoadBalancer サービスの External IP に VPC 内のプライベート IP を割り当てるように設定します。また、Cloud SQL もプライベート IP でアクセスすることを推奨します。そのため、プライベート IP でアクセスするための VPC を作成する必要があります。
VPC のファイアウォールルールで以下のポートを許可してください:
- Dataproc 内部通信用: TCP 0-65535、UDP 0-65535、ICMP (サブネット内のみ)
- Identity-Aware Proxy (IAP) 経由 SSH 用: TCP 22
- Cloud SQL 用: 使用する DB に対応したポート (サブネット内のみ)
以下は VPC、サブネット、ファイアウォールルールを作成する例です:
# VPC の作成
gcloud compute networks create <VPC_NAME> \
--subnet-mode=custom \
--project=<PROJECT_ID>
# サブネットの作成
gcloud compute networks subnets create <SUBNET_NAME> \
--network=<VPC_NAME> \
--region=<REGION> \
--range=10.0.0.0/20 \
--project=<PROJECT_ID>
# Dataproc 内部通信用
gcloud compute firewall-rules create <VPC_NAME>-allow-internal \
--network=<VPC_NAME> \
--allow=tcp:0-65535,udp:0-65535,icmp \
--source-ranges=10.0.0.0/20 \
--project=<PROJECT_ID>
# IAP 経由 SSH 用
gcloud compute firewall-rules create <VPC_NAME>-allow-iap-ssh \
--network=<VPC_NAME> \
--allow=tcp:22 \
--source-ranges=35.235.240.0/20 \
--project=<PROJECT_ID>
# Cloud SQL 用 (PostgreSQL の例)
gcloud compute firewall-rules create <VPC_NAME>-allow-postgres \
--network=<VPC_NAME> \
--allow=tcp:5432 \
--source-ranges=10.0.0.0/20 \
--project=<PROJECT_ID>
以下の値を置き換えてください:
<VPC_NAME>: 任意の VPC 名<SUBNET_NAME>: 任意のサブネット名<PROJECT_ID>: Google Cloud プロジェクト ID<REGION>: リージョン (例:us-west1)
VPC とファイアウォールルールの詳細については、VPC ネットワークの作成と管理および IAP を使用した SSH 接続を参照してください。
ScalarDB Analytics サーバー用データベースインスタンスの作成
ScalarDB Analytics サーバーにはバックエンドデータベースが必要です。このセクションでは Cloud SQL を使用したセットアップ方法を説明します。要件に応じて他のデータベースを使用することもできます。
Google Cloud は Private IP での接続を推奨しています。このガイドでは Private IP での接続を有効にします。
Private IP を使用するには、事前に VPC で Private Service Access を設定する必要があります。詳細については、プライベート サービス アクセスの構成を参照してください。
以下は Private IP を有効にした Cloud SQL インスタンスを作成する例です:
gcloud sql instances create <INSTANCE_NAME> \
--database-version=POSTGRES_15 \
--tier=db-custom-2-4096 \
--region=<REGION> \
--network=projects/<PROJECT_ID>/global/networks/<VPC_NAME> \
--no-assign-ip \
--project=<PROJECT_ID>
以下の値を置き換えてください:
<INSTANCE_NAME>: 任意の Cloud SQL インスタンス名<REGION>: リージョン (例:us-west1)<PROJECT_ID>: Google Cloud プロジェクト ID<VPC_NAME>: VPC 名
インスタンス作成後、データベースとユーザーを作成します:
# データベースの作成
gcloud sql databases create <DB_NAME> \
--instance=<INSTANCE_NAME> \
--project=<PROJECT_ID>
# ユーザーの作成
gcloud sql users create <DB_USERNAME> \
--instance=<INSTANCE_NAME> \
--password=<DB_PASSWORD> \
--project=<PROJECT_ID>
詳細については、Cloud SQL のプライベート IP の構成を参照してください。
GKE での ScalarDB Analytics サーバーのデプロイ
以下の手順で GKE に ScalarDB Analytics サーバーをデプロイします。
1. GKE Autopilot クラスタを作成する
ScalarDB Analytics サーバーをデプロイするための GKE Autopilot クラスタを作成します。VPC セクションで作成したサブネットを使用すると、LoadBalancer の External IP は VPC 内のプライベート IP になります。
gcloud container clusters create-auto <GKE_CLUSTER_NAME> \
--region=<REGION> \
--network=<VPC_NAME> \
--subnetwork=<SUBNET_NAME> \
--project=<PROJECT_ID>
以下の値を置き換えてください:
<GKE_CLUSTER_NAME>: 任意の GKE クラスタ名<REGION>: リージョン (例:us-west1)<VPC_NAME>: VPC セクションで作成した VPC 名<SUBNET_NAME>: VPC セクションで作成したサブネット名<PROJECT_ID>: Google Cloud プロジェクト ID
クラスタの作成後、kubectl がクラスタに接続できるように認証情報を取得します:
gcloud container clusters get-credentials <GKE_CLUSTER_NAME> \
--region=<REGION> \
--project=<PROJECT_ID>
2. Cloud SQL Auth Proxy Operator をインストールする
Cloud SQL をバックエンドデータベースとして使用する場合、Google Cloud は Cloud SQL Auth Proxy を使用した接続を推奨しています。ScalarDB Analytics サーバーの Helm Chart は sidecar コンテナの追加に対応していないため、このガイドでは Cloud SQL Auth Proxy Operator を使用して sidecar コンテナをデプロイします。
Cloud SQL Proxy Operator を使用して接続するに従って、GKE クラスタに Cloud SQL Auth Proxy Operator をインストールします。
3. AuthProxyWorkload リソースを作成する
ScalarDB Analytics サーバーの Deployment に Cloud SQL Auth Proxy sidecar を注入するための AuthProxyWorkload リソースを作成します。このリソースの workloadSelector に一致する Deployment がデプロイされると、自動的に Cloud SQL Auth Proxy の sidecar コンテナが追加されます。
以下は AuthProxyWorkload の設定例です:
apiVersion: cloudsql.cloud.google.com/v1
kind: AuthProxyWorkload
metadata:
name: scalardb-analytics-server-cloudsql-auth-proxy
spec:
workloadSelector:
kind: "Deployment"
name: "scalardb-analytics-server"
instances:
- connectionString: "<INSTANCE_CONNECTION_NAME>"
portEnvName: "DB_PORT"
hostEnvName: "INSTANCE_HOST"
以下の値を置き換えてください:
-
<INSTANCE_CONNECTION_NAME>: Cloud SQL のインスタンス接続名。以下のコマンドで取得できます:gcloud sql instances describe <INSTANCE_NAME> \
--project=<PROJECT_ID> \
--format="value(connectionName)"
以下のコマンドで AuthProxyWorkload リソースを作成します:
kubectl apply -f auth-proxy-workload.yaml
4. ScalarDB Analytics サーバーをデプロイする
ScalarDB Analytics サーバーをデプロイするに従って、Helm を使用して ScalarDB Analytics サーバーをデプロイします。
Cloud SQL Auth Proxy を使用する場合、データベースへの接続は sidecar コンテナ経由で行われます。AuthProxyWorkload で設定した環境変数 INSTANCE_HOST と DB_PORT を使用して接続 先を指定します。
以下は Helm の values ファイルの例です:
scalarDbAnalyticsServer:
image:
repository: ghcr.io/scalar-labs/scalardb-analytics-server-byol
properties: |
# ライセンス設定
scalar.db.analytics.server.licensing.license_key=<YOUR_LICENSE_KEY>
scalar.db.analytics.server.licensing.license_check_cert_pem=<YOUR_LICENSE_CHECK_CERT_PEM>
# データベース設定
scalar.db.analytics.server.db.contact_points=jdbc:postgresql://${INSTANCE_HOST}:${DB_PORT}/<DB_NAME>
scalar.db.analytics.server.db.username=<DB_USERNAME>
scalar.db.analytics.server.db.password=<DB_PASSWORD>
# メータリングストレージ設定
scalar.db.analytics.server.metering.storage.provider=google-cloud-storage
scalar.db.analytics.server.metering.storage.bucket_name=<BUCKET_NAME>
scalar.db.analytics.server.metering.storage.accessKeyId=<GCS_ACCESS_KEY>
scalar.db.analytics.server.metering.storage.secretAccessKey=<GCS_SECRET_KEY>
serviceAccount:
serviceAccountName: scalardb-analytics-server
以下の値を置き換えてください:
<YOUR_LICENSE_KEY>: ライセンスキー<YOUR_LICENSE_CHECK_CERT_PEM>: ライセンス検証用の証明書<DB_NAME>: Cloud SQL セクションで作成したデータベース名<DB_USERNAME>: データベースのユーザー名<DB_PASSWORD>: データベースのパスワード<BUCKET_NAME>: メータリング情報を保存する Cloud Storage のバケット名。バケットの作成方法については、バケットの作成を参照してください。<GCS_ACCESS_KEY>: Cloud Storage の HMAC アクセスキー<GCS_SECRET_KEY>: Cloud Storage の HMAC シークレットキー。HMAC キーの作成方法については、HMAC キーの管理を参照してください。
5. ScalarDB Analytics サーバーのホストアドレスを確認する
デプロイ後、以下のコマンドで ScalarDB Analytics サーバーの LoadBalancer の External IP を確認します。この IP アドレスは、後続の Dataproc セクションで <CATALOG_SERVER_HOST> として使用します。
kubectl get svc scalardb-analytics-server
出力例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
scalardb-analytics-server LoadBalancer 10.98.116.121 203.0.113.10 11051:32619/TCP,11052:32598/TCP 2m43s
EXTERNAL-IP 列に表示される IP アドレス(例: 203.0.113.10)が <CATALOG_SERVER_HOST> の値です。
Dataproc クラスタのセットアップ
以下のコマンドで Dataproc Compute クラスタを作成できます:
gcloud dataproc clusters create <CLUSTER_NAME> \
--region=<REGION> \
--subnet=projects/<PROJECT_ID>/regions/<REGION>/subnetworks/<SUBNET_NAME> \
--properties=spark:spark.jars.packages=com.scalar-labs:scalardb-analytics-spark-all-<SPARK_VERSION>_<SCALA_VERSION>:<SCALARDB_ANALYTICS_VERSION> \
--properties=spark:spark.extraListeners=com.scalar.db.analytics.spark.metering.ScalarDbAnalyticsListener \
--properties=spark:spark.sql.catalog.<CATALOG_NAME>=com.scalar.db.analytics.spark.ScalarDbAnalyticsCatalog \
--properties=spark:spark.sql.catalog.<CATALOG_NAME>.server.host=<CATALOG_SERVER_HOST> \
--properties=spark:spark.sql.catalog.<CATALOG_NAME>.server.catalog.port=11051 \
--properties=spark:spark.sql.catalog.<CATALOG_NAME>.server.metering.port=11052 \
--project=<PROJECT_ID>
以下の値を置き換えてください:
<CLUSTER_NAME>: 任意の Dataproc クラスタ名<CATALOG_NAME>: 任意のカタログ名。ScalarDB Analytics サーバー上で 作成するカタログ名と一致させる必要があります。<REGION>: リージョン (例:us-west1)<PROJECT_ID>: Google Cloud プロジェクト ID<SUBNET_NAME>: VPC セクションで作成したサブネット名<SPARK_VERSION>: Spark のバージョン (例:3.5または3.4)。Dataproc のバージョン一覧を参照してください。<SCALA_VERSION>: Spark のビルドに使用される Scala のバージョン (例:2.13または2.12)<SCALARDB_ANALYTICS_VERSION>: ScalarDB Analytics のバージョン (例:3.17.0)<CATALOG_SERVER_HOST>: GKE セクションで確認した ScalarDB Analytics サーバーのホストアドレス
クラスタを作成した後、IAP 経由で SSH 接続してクラスタ上で spark-shell や spark-sql を使用して分析クエリを実行できます:
gcloud compute ssh <CLUSTER_NAME>-m \
--zone=<ZONE> \
--tunnel-through-iap \
--project=<PROJECT_ID>
以下の値を置き換えてください:
<CLUSTER_NAME>: 作成した Dataproc クラスタ名<ZONE>: クラスタのプライマリノードが存在するゾーン (例:us-west1-a)<PROJECT_ID>: Google Cloud プロジェクト ID
Dataproc Compute クラスタは標準的な Apache Spark 環境を提供するため、通常の方法で Spark アプリケーションを実行できます。詳細については、Apache Spark ドキュメントを参照してください。
Spark ドライバーアプリケーションの詳細については、Spark ドライバーアプリケーションを参照してください。
ノートブックを使用したインタラクティブクエリの実行
Dataproc Compute クラスター上で Jupyter ノートブックを使用して、ScalarDB Analytics を通じてインタラクティブクエリを実行することもできます。Jupyter ノートブックを有効にするには、クラスター作成時に --optional-components=JUPYTER オプションを追加し、Component Gateway を有効にします。
Dataproc での Jupyter ノートブックの使用方法の詳細については、Dataproc Jupyter コンポーネントのドキュメントを参照してください。
Component Gateway を通じて Jupyter ノートブックにアクセスした後、%%sql マジックコマンドを使用して SQL クエリを実行できます。
利用可能なカタログを一覧表示するには、次のコマンドを実行します:
%%sql
-- 利用可能なカタログを一覧表示
SHOW CATALOGS
ScalarDB カタログ内のデータベースを一覧表示するには、次のコマンドを実行し、<CATALOG_NAME> を ScalarDB Analytics サーバーで設定された実際のカタログ名に置き換えてください。
%%sql
-- ScalarDB カタログ内のデータベースを一覧表示
SHOW DATABASES IN <CATALOG_NAME>
データをクエリするには、次のコマンドを実行し、山括弧内のプレースホルダーを ScalarDB Analytics サーバーで設定された実際のカタログ、データソース、名前空間、テーブル名に置き換えてください。
%%sql
-- データをクエリ
SELECT * FROM <CATALOG_NAME>.<DATA_SOURCE_NAME>.<NAMESPACE_NAME>.<TABLE_NAME> LIMIT 10
Dataproc Serverless のセットアップ
Dataproc Serverless は Spark Connect ベースのサービスです。現在、Python クライアントのみが提供されているため、ノートブックまたは Python クライアントから利用する必要があります。
以下は Python での設定例です:
from google.cloud.dataproc_spark_connect import DataprocSparkSession
from google.cloud.dataproc_v1 import Session
session_config = Session()
session_config.environment_config.execution_config.subnetwork_uri = "projects/<PROJECT_ID>/regions/<REGION>/subnetworks/<SUBNET_NAME>"
spark = (
DataprocSparkSession.builder.projectId("<PROJECT_ID>")
.location("<REGION>")
.dataprocSessionConfig(session_config)
.config(
"spark.jars.packages",
"com.scalar-labs:scalardb-analytics-spark-all-<SPARK_VERSION>_<SCALA_VERSION>:<SCALARDB_ANALYTICS_VERSION>",
)
.config(
"spark.extraListeners",
"com.scalar.db.analytics.spark.metering.ScalarDbAnalyticsListener",
)
.config(
"spark.sql.catalog.<CATALOG_NAME>",
"com.scalar.db.analytics.spark.ScalarDbAnalyticsCatalog",
)
.config("spark.sql.catalog.<CATALOG_NAME>.server.host", "<CATALOG_SERVER_HOST>")
.config("spark.sql.catalog.<CATALOG_NAME>.server.catalog.port", "11051")
.config("spark.sql.catalog.<CATALOG_NAME>.server.metering.port", "11052")
.getOrCreate()
)
以下の値を置き換えてください:
<CATALOG_NAME>: 任意のカタログ名。ScalarDB Analytics サーバー上で作成するカタログ名と一致させる必要があります。<PROJECT_ID>: Google Cloud プロジェクト ID<REGION>: リージョン (例:us-west1)<SUBNET_NAME>: VPC セクションで作成したサブネット名<SPARK_VERSION>: Spark のバージョン (例:3.5または3.4)<SCALA_VERSION>: Spark のビルドに使用される Scala のバージョン (例:2.13または2.12)<SCALARDB_ANALYTICS_VERSION>: ScalarDB Analytics のバージョン (例:3.17.0)<CATALOG_SERVER_HOST>: GKE セクションで確認した ScalarDB Analytics サーバーのホストアドレス
Spark Connect アプリケーションの詳細については、Spark Connect アプリケーションおよび Dataproc Serverless for Spark ドキュメントを参照してください。