StarRocks は公式の Spark コネクタを提供し、Spark と StarRocks 間のデータ転送を可能にします。EMR Serverless Spark で必要な設定を追加することで、StarRocks インスタンスに接続できます。このトピックでは、EMR Serverless Spark を使用して StarRocks へのデータの読み取りと書き込みを行う方法を説明します。
アクセス方法
ニーズに応じて、2 つの方法で StarRocks にアクセスできます。
方法1:タスク/セッションレベルでの設定
この方法では、JDBC URL、ユーザー名、パスワードなどの StarRocks 接続情報をタスクまたはセッションごとに設定します。この方法は、次のようなシナリオに適しています。
-
一時的またはアドホックなデータアクセス
-
異なるタスクで異なる StarRocks クラスターにアクセスする必要がある場合
-
タスクごとにきめ細かなアクセス制御が必要な場合
方法2:データカタログによる一元化された設定
-
Livy または Kyuubi を経由して送信されたジョブは、StarRocks データカタログにアクセスできません。
-
esr-4.8.0 以降、および esr-5.2.0 以降のエンジンバージョンでのみサポートされます。
EMR Serverless Spark の データカタログ 機能を使用して、StarRocks データカタログを追加します。一度設定すると、ワークスペース内のすべてのジョブとセッションは、デフォルトでデータカタログ内の承認済みデータにアクセスできるようになり、タスクごとに設定を繰り返す必要がなくなります。詳細については、「データカタログの管理」をご参照ください。
この方法は、次のようなシナリオに適しています。
-
StarRocks データへの頻繁なアクセスが必要な場合
-
複数のタスクで同じ StarRocks アクセス設定を共有する場合
-
タスク設定を簡素化して開発効率を向上させたい場合
StarRocks への長期的かつ頻繁なアクセスが必要なワークスペースでは、設定のオーバーヘッドを削減し、開発効率を向上させるために、データカタログ (方法2) の使用を推奨します。
前提条件
-
Serverless Spark ワークスペースが作成されていること。詳細については、「ワークスペースの作成」をご参照ください。
-
EMR Serverless StarRocks インスタンスが作成されていること。詳細については、「インスタンスの作成」をご参照ください。
制限事項
Serverless Spark のエンジンバージョンは、esr-2.5.0、esr-3.1.0、esr-4.1.0、またはそれ以降である必要があります。
操作手順
ステップ1:Spark コネクタ JAR の取得とアップロード
-
お使いのエンジンバージョンに対応する Spark コネクタ JAR をダウンロードします。詳細については、「Spark コネクタを使用した StarRocks からのデータ読み取り」をご参照ください。
説明エンジンバージョンが esr-4.8.0 以降および esr-5.2.0 以降の場合、Spark コネクタ JAR は組み込まれているため、この手順は省略可能です。
この例では、Maven Central Repository からプリコンパイル済みの JAR をダウンロードします。
説明コネクタ JAR ファイル名は、
starrocks-spark-connector-${spark_version}_${scala_version}-${connector_version}.jarという形式です。たとえば、エンジンバージョンが esr-4.1.0 (Spark 3.5.2、Scala 2.12) で、コネクタバージョン 1.1.2 を使用する場合は、starrocks-spark-connector-3.5_2.12-1.1.2.jarを選択します。 -
ダウンロードした Spark コネクタ JAR を OSS にアップロードします。詳細については、「シンプルアップロード」をご参照ください。
ステップ2:ネットワーク接続の追加
-
ネットワーク情報を取得します。
EMR Serverless StarRocks ページで、対象の StarRocks インスタンスの Instance Details ページに移動し、Virtual Private Cloud (VPC) と vSwitch の情報を取得します。
-
ネットワーク接続を作成します。
-
EMR Serverless Spark ページで、Spark ワークスペースの Network Connection ページに移動し、Create Network Connection をクリックします。
-
Create Network Connection ダイアログボックスで、Name を入力し、StarRocks インスタンスの VPC と vSwitch を選択して、OK をクリックします。
説明ネットワーク接続は StarRocks インスタンスと一致している必要があります。StarRocks インスタンスと同じ VPC 内にある vSwitch を選択してください。現在のアベイラビリティーゾーンで利用可能な vSwitch がない場合は、vSwitch をクリックして VPC コンソールに移動して作成します。詳細については、「VPC と vSwitch」をご参照ください。
-
ステップ3:データベースとテーブルの作成
-
StarRocks インスタンスに接続します。詳細については、「EMR StarRocks Manager を使用した StarRocks インスタンスへの接続」をご参照ください。
-
[SQL Editor] の Queries ページで、File または右側の
アイコンをクリックし、OK をクリックして新しいファイルを作成します。 -
新しいファイルに次の SQL 文を入力し、Run をクリックします。
CREATE DATABASE `testdb`; CREATE TABLE `testdb`.`score_board` ( `id` int(11) NOT NULL COMMENT "", `name` varchar(65533) NULL DEFAULT "" COMMENT "", `score` int(11) NOT NULL DEFAULT "0" COMMENT "" ) ENGINE=OLAP PRIMARY KEY(`id`) COMMENT "OLAP" DISTRIBUTED BY HASH(`id`);
ステップ4:StarRocks への読み取りと書き込み
方法1:SQL セッションと Notebook セッション
セッションタイプの詳細については、「セッションマネージャー」をご参照ください。
SQL セッション
-
EMR Serverless Spark を使用して StarRocks にデータを書き込みます。
-
SQL セッションを作成します。詳細については、「SQL セッションの管理」をご参照ください。
セッションを作成する際、Spark コネクタのバージョンに対応するエンジンバージョンを選択し、Network Connection で前のステップで作成したネットワーク接続を選択し、Spark Configuration に以下のパラメーターを追加して、Spark コネクタをロードします。
spark.emr.serverless.user.defined.jars oss://<bucketname>/path/connector.jaross://<bucketname>/path/connector.jarを、ステップ1でアップロードした Spark コネクタの OSS パスに置き換えます。例:oss://emr-oss/spark/starrocks-spark-connector-3.5_2.12-1.1.2.jar -
Development ページで [SparkSQL] タスクを作成します。次に、右上隅から作成した SQL セッションを選択します。
詳細については、「SparkSQL ジョブの開発」をご参照ください。
-
新しい SparkSQL タブに次のコードをコピーし、必要に応じてプレースホルダーの値を置き換えてから、Run をクリックします。
CREATE TEMPORARY VIEW score_board USING starrocks OPTIONS ( "starrocks.table.identifier" = "testdb.score_board", "starrocks.fe.http.url" = "<fe_host>:<fe_http_port>", "starrocks.fe.jdbc.url" = "jdbc:mysql://<fe_host>:<fe_query_port>", "starrocks.user" = "<user>", "starrocks.password" = "<password>" ); INSERT INTO `score_board` VALUES (1, "starrocks", 100), (2, "spark", 100);パラメーターの説明:
-
<fe_host>:EMR Serverless StarRocks インスタンスの FE ノードの内部またはパブリックエンドポイント。これは、Instance Details ページの FE 詳細 セクションで確認できます。-
内部エンドポイントを使用する場合、両方のサービスが同じ VPC 内にあることを確認してください。
-
パブリックエンドポイントを使用する場合、セキュリティグループのルールが必要なポートでのトラフィックを許可していることを確認してください。詳細については、「ネットワークアクセスとセキュリティ設定」をご参照ください。
-
-
<fe_http_port>:EMR Serverless StarRocks インスタンスの FE ノードの HTTP ポート。デフォルトは 8030 です。これは、Instance Details ページの FE 詳細 セクションで確認できます。 -
<fe_query_port>:EMR Serverless StarRocks インスタンスの FE ノードのクエリポート。デフォルトは 9030 です。これは、Instance Details ページの FE 詳細 セクションで確認できます。 -
<user>:Serverless StarRocks インスタンスのユーザー名。デフォルトでは、管理者権限を持つ admin ユーザーが提供されます。User Management ページを使用して新しいユーザーを追加して接続することもできます。ユーザーの追加方法の詳細については、「ユーザーとデータ権限の管理」をご参照ください。 -
<password>:<user>に対応するパスワード。
-
-
-
EMR Serverless Spark を使用して書き込まれたデータをクエリします。
この例では、Spark SQL タスクで
test_viewという名前の一時ビューを作成してscore_boardからデータをクエリします。新しい Spark SQL タブに次のコードをコピーし、コードを選択してから Run the selected をクリックします。CREATE TEMPORARY VIEW test_view USING starrocks OPTIONS ( "starrocks.table.identifier" = "testdb.score_board", "starrocks.fe.http.url" = "<fe_host>:<fe_http_port>", "starrocks.fe.jdbc.url" = "jdbc:mysql://<fe_host>:<fe_query_port>", "starrocks.user" = "<user>", "starrocks.password" = "<password>" ); SELECT * FROM test_view;出力
クエリは 2 つのレコード (1, "starrocks", 100) と (2, "spark", 100) を返します。
Notebook セッション
-
EMR Serverless Spark を使用して StarRocks にデータを書き込みます。
-
Notebook セッションを作成します。詳細については、「Notebook セッションの管理」をご参照ください。
セッションを作成する際、Spark コネクタのバージョンに対応するエンジンバージョンを選択し、Network Connection で前のステップで作成したネットワーク接続を選択し、Spark Configuration に以下のパラメーターを追加して、Spark コネクタをロードします。
spark.emr.serverless.user.defined.jars oss://<bucketname>/path/connector.jaross://<bucketname>/path/connector.jarを、ステップ1でアップロードした Spark コネクタの OSS パスに置き換えます。例:oss://emr-oss/spark/starrocks-spark-connector-3.5_2.12-1.1.2.jar -
Development ページで、[Interactive Development] > [Notebook] タスクを作成し、右上隅で作成した Notebook セッションを選択します。
詳細については、「Notebook セッションの管理」をご参照ください。
-
Notebook の Python セルに次のコードをコピーし、Run をクリックします。
# プレースホルダーを EMR Serverless StarRocks の設定に置き換えます。 fe_host = "<fe_host>" fe_http_port = "<fe_http_port>" fe_query_port = "<fe_query_port>" user = "<user>" password = "<password>" # ビューを作成します。 create_table_sql = f""" CREATE TEMPORARY VIEW score_board USING starrocks OPTIONS ( "starrocks.table.identifier" = "testdb.score_board", "starrocks.fe.http.url" = "{fe_host}:{fe_http_port}", "starrocks.fe.jdbc.url" = "jdbc:mysql://{fe_host}:{fe_query_port}", "starrocks.user" = "{user}", "starrocks.password" = "{password}" ) """ spark.sql(create_table_sql) # データを挿入します。 insert_data_sql = """ INSERT INTO `score_board` VALUES (1, "starrocks", 100), (2, "spark", 100) """ spark.sql(insert_data_sql)パラメーターの説明:
-
<fe_host>:EMR Serverless StarRocks インスタンスの FE ノードの内部またはパブリックエンドポイント。これは、Instance Details ページの FE 詳細 セクションで確認できます。-
内部エンドポイントを使用する場合、両方のサービスが同じ VPC 内にあることを確認してください。
-
パブリックエンドポイントを使用する場合、セキュリティグループのルールが必要なポートでのトラフィックを許可していることを確認してください。詳細については、「ネットワークアクセスとセキュリティ設定」をご参照ください。
-
-
<fe_http_port>:EMR Serverless StarRocks インスタンスの FE ノードの HTTP ポート。デフォルトは 8030 です。これは、Instance Details ページの FE 詳細 セクションで確認できます。 -
<fe_query_port>:EMR Serverless StarRocks インスタンスの FE ノードのクエリポート。デフォルトは 9030 です。これは、Instance Details ページの FE 詳細 セクションで確認できます。 -
<user>:Serverless StarRocks インスタンスのユーザー名。デフォルトでは、管理者権限を持つ admin ユーザーが提供されます。User Management ページを使用して新しいユーザーを追加して接続することもできます。ユーザーの追加方法の詳細については、「ユーザーとデータ権限の管理」をご参照ください。 -
<password>:<user>に対応するパスワード。
-
-
-
EMR Serverless Spark を使用して書き込まれたデータをクエリします。
新しい Python セルで、
test_viewという名前の一時ビューを作成してscore_boardテーブルをクエリします。次のコードをセルにコピーし、実行アイコン (
) をクリックして実行します。# ビューを作成します。 create_view_sql=f""" CREATE TEMPORARY VIEW test_view USING starrocks OPTIONS ( "starrocks.table.identifier" = "testdb.score_board", "starrocks.fe.http.url" = "{fe_host}:{fe_http_port}", "starrocks.fe.jdbc.url" = "jdbc:mysql://{fe_host}:{fe_query_port}", "starrocks.user" = "{user}", "starrocks.password" = "{password}" ) """ spark.sql(create_view_sql) # データをクエリします。 query_sql="SELECT * FROM test_view" result_df = spark.sql(query_sql) result_df.show()出力
+---+---------+-----+ | id| name|score| +---+---------+-----+ | 2| spark| 100| | 1|starrocks| 100| +---+---------+-----+
方法2:Spark バッチジョブ
-
Spark バッチジョブを作成します。
-
EMR Serverless Spark ページで、左側メニューにある Development をクリックします。
-
Development タブで、
アイコンをクリックします。 -
「作成」ダイアログボックスで、Name を入力し、タイプを に設定した後、OK をクリックします。
ニーズに応じてタイプを調整できます。このトピックでは SQL を例とします。ジョブタイプの詳細については、「アプリケーションの開発」をご参照ください。
-
-
Spark バッチジョブを使用して StarRocks への読み取りと書き込みを行います。
-
新しいジョブ開発ページの右上隅で、キューを選択します。
キューの追加方法の詳細については、「リソースキューの管理」をご参照ください。
-
新しいジョブ開発ページで、以下の設定を行い、他のパラメーターはデフォルトのままにしてから、実行 をクリックします。
パラメーター
説明
SQL File
この例では、SQL セッションの SQL ステートメントが含まれている spark_sql_starrocks.sql ファイルを使用します。 ファイルを使用する前に、ダウンロードして必要に応じて設定を変更し、Artifacts ページにアップロードします。
Engine Version
Spark コネクタのバージョンに一致するエンジンバージョンを選択します。
Normal Network Connection
前のステップで作成したネットワーク接続を選択します。
Spark Configuration
Spark Configuration セクションに以下のパラメーターを追加して、Spark コネクタをロードします。
spark.emr.serverless.user.defined.jars oss://<bucketname>/path/connector.jaross://<bucketname>/path/connector.jarを、ステップ1でアップロードした Spark コネクタの OSS パスに置き換えます。例:oss://emr-oss/spark/starrocks-spark-connector-3.5_2.12-1.1.2.jar
-
-
ログ情報を表示します。
-
下部にある Execution Records セクションで、[Actions] 列の Details をクリックします。
-
Log Exploration タブをクリックして、ジョブのログ情報を表示します。
[ドライバーログ] > [Stdout] を選択して、
stdout.logファイルを表示します。ジョブが成功した場合、ログ出力にはstarrocks 100とspark 100が含まれていることから、データが StarRocks に書き込まれ、その後正常に読み取られたことが確認できます。
-
関連ドキュメント
詳細については、StarRocks の公式ドキュメントをご参照ください: