EMR Serverless Spark は、Spark DataSource V2 に基づく組み込みの MaxCompute データソースコネクタを提供します。開発時に必要な設定を追加することで MaxCompute に接続できます。このトピックでは、EMR Serverless Spark を使用して MaxCompute のデータを読み書きする方法について説明します。
背景情報
MaxCompute (旧称 ODPS) は、高速でフルマネージドのエクサバイト規模のデータウェアハウスソリューションです。バッチ構造化データの保存と計算用に設計されており、大規模なデータウェアハウスソリューション、分析、モデリングサービスを提供します。 MaxCompute の詳細については、「MaxCompute とは」をご参照ください。
前提条件
-
EMR Serverless Spark で ワークスペース を作成済みであること。
-
MaxCompute の プロジェクト を作成し、Open Storage を有効化済みであること。
このトピックの例では、Open Storage に従量課金方式を使用します。
制限事項
-
このトピックは、次のエンジンバージョンにのみ適用されます:
-
esr-4.x:esr-4.6.0 以降
-
esr-3.x:esr-3.5.0 以降
-
esr-2.x:esr-2.9.0 以降
-
-
このトピックの操作では、MaxCompute の Open Storage 機能を有効にする必要があります。詳細については、「Open Storage」をご参照ください。
-
使用する MaxCompute エンドポイントは、ストレージ API をサポートしている必要があります。サポートされていない場合は、サポートされているエンドポイントに切り替えてください。詳細については、「データ伝送リソース」をご参照ください。
注意事項
Open Storage (従量課金) を使用する場合、1 TB を超えるデータ転송は論理データサイズに基づいて課金されます。
手順
手順1:MaxCompute セッションの作成
SQL セッションまたはノートブックセッションを作成して MaxCompute に接続できます。セッションの詳細については、「セッション管理」をご参照ください。
SQL セッション
-
[セッション] ページに移動します。
-
EMR コンソールにログインします。
-
左側のナビゲーションウィンドウで、[EMR Serverless] > [Spark] を選択します。
-
[Spark] ページで、対象のワークスペースの名前をクリックします。
-
EMR Serverless Spark ページで、左側のナビゲーションウィンドウの Sessions をクリックします。
-
-
SQL Session タブで、Create SQL Session をクリックします。
-
[Create SQL Session] ページで、次のパラメーターを設定し、Create をクリックします。
パラメーター
説明
[Name]
SQL セッションのカスタム名を入力します。例:
mc_sql_compute。[Spark Configuration]
MaxCompute に接続するための Spark 設定パラメーターを入力します。
重要3 層モデルを使用する MaxCompute プロジェクトにアクセスする必要がある場合は、Spark 設定で
spark.sql.catalog.odps.enableNamespaceSchemaパラメーターをtrueに設定する必要もあります。パラメーターの詳細については、「Spark コネクター」をご参照ください。スキーマの詳細については、「スキーマ操作」をご参照ください。spark.sql.catalog.odps org.apache.spark.sql.execution.datasources.v2.odps.OdpsTableCatalog spark.sql.extensions org.apache.spark.sql.execution.datasources.v2.odps.extension.OdpsExtensions spark.sql.sources.partitionOverwriteMode dynamic spark.hadoop.odps.tunnel.quota.name pay-as-you-go spark.hadoop.odps.project.name <project_name> spark.hadoop.odps.end.point https://service.cn-hangzhou-vpc.maxcompute.aliyun-inc.com/api spark.hadoop.odps.access.id <accessId> spark.hadoop.odps.access.key <accessKey>次のプレースホルダーを実際の値に置き換えます。
-
<project_name>:お使いの MaxCompute プロジェクトの名前。 -
https://service.cn-hangzhou-vpc.maxcompute.aliyun-inc.com/api:お使いの MaxCompute サービスのエンドポイント。詳細については、「エンドポイント」をご参照ください。 -
<accessId>:MaxCompute へのアクセスに使用する Alibaba Cloud アカウントのアクセスキー ID。 -
<accessKey>:MaxCompute へのアクセスに使用する Alibaba Cloud アカウントのアクセスキーシークレット。
-
ノートブックセッション
ノートブックセッションページに移動します。
EMR コンソール にログインします。
左側のナビゲーションウィンドウで、 を選択します。
Spark ページで、対象のワークスペース名をクリックします。
EMR Serverless Spark ページで、左側のナビゲーションウィンドウから Sessions を選択します。
Notebook Session タブをクリックします。
-
Create Notebook Session をクリックします。
-
[Create Notebook Session] ページで、次のパラメーターを設定し、Create をクリックします。
パラメーター
説明
[Name]
ノートブックセッションのカスタム名を入力します。例:
mc_notebook_compute。[Spark Configuration]
MaxCompute に接続するための Spark 設定パラメーターを入力します。
重要3 層モデルを使用する MaxCompute プロジェクトにアクセスする必要がある場合は、Spark 設定で
spark.sql.catalog.odps.enableNamespaceSchemaパラメーターをtrueに設定する必要もあります。パラメーターの詳細については、「Spark Connector」をご参照ください。スキーマの詳細については、「スキーマ操作」をご参照ください。spark.sql.catalog.odps org.apache.spark.sql.execution.datasources.v2.odps.OdpsTableCatalog spark.sql.extensions org.apache.spark.sql.execution.datasources.v2.odps.extension.OdpsExtensions spark.sql.sources.partitionOverwriteMode dynamic spark.hadoop.odps.tunnel.quota.name pay-as-you-go spark.hadoop.odps.project.name <project_name> spark.hadoop.odps.end.point https://service.cn-hangzhou-vpc.maxcompute.aliyun-inc.com/api spark.hadoop.odps.access.id <accessId> spark.hadoop.odps.access.key <accessKey>次のプレースホルダーを実際の値に置き換えます。
-
<project_name>:お使いの MaxCompute プロジェクトの名前。 -
https://service.cn-hangzhou-vpc.maxcompute.aliyun-inc.com/api:お使いの MaxCompute サービスのエンドポイント。詳細については、「エンドポイント」をご参照ください。 -
<accessId>:MaxCompute へのアクセスに使用する Alibaba Cloud アカウントのアクセスキー ID。 -
<accessKey>:MaxCompute へのアクセスに使用する Alibaba Cloud アカウントのアクセスキーシークレット。
-
手順2:MaxCompute データのクエリと書き込み
Spark SQL
-
EMR Serverless Spark ページで、左側メニューにある Development をクリックします。
-
[開発] タブで、
アイコンをクリックします。 -
Spark SQL ジョブを作成します。
-
表示されたダイアログボックスで、
mc_load_taskなどの名前を入力し、タイプとして [SparkSQL] を選択して、OK をクリックします。 -
次のコードを新しい Spark SQL タブ (
mc_load_task) にコピーします。CREATE TABLE odps.default.mc_table (name STRING, num BIGINT); INSERT INTO odps.default.mc_table (name, num) VALUES ('Alice', 100),('Bob', 200); SELECT * FROM odps.default.mc_table; -
[Database] ドロップダウンリストからデータベースを選択します。次に、[Compute] ドロップダウンリストから、「手順1:MaxCompute セッションの作成」で作成した SQL セッション (
mc_sql_compute) を選択します。 -
Run をクリックして Spark SQL ジョブを実行します。
クエリが正常に実行されると、クエリ結果が Execution Results タブに表示されます。
[Result #3] には、[name] と [num] の 2 つの列を持つ結果テーブルが表示されます。テーブルには、'Alice' の値が 100、'Bob' の値が 200 と表示されます。
-
-
MaxCompute コンソールで作成されたテーブルを確認します。
-
MaxCompute コンソールにログインし、左上のコーナーでリージョンを選択します。
-
プロジェクト管理 ページで、作成したプロジェクトを見つけ、[操作] 列の 管理 をクリックします。
-
[Tables] タブをクリックします。
MaxCompute コンソールで
mc_tableという名前の新しいテーブルを確認できます。
-
ノートブック
-
EMR Serverless Spark ページで、左側メニューにある Development をクリックします。
-
[開発] タブで、
アイコンをクリックします。 -
ノートブックを作成します。
-
表示されたダイアログボックスで、
mc_load_taskなどの名前を入力します。タイプに[Interactive Development] > [Notebook] を選択し、OK をクリックします。 -
セッションドロップダウンリストから、「手順1:MaxCompute セッションの作成」で作成した実行中のノートブックセッション (
mc_notebook_compute) を選択します。 -
コードを記述して実行します。
-
Python セルに、次のコマンドを入力してテーブルを作成します。
spark.sql(""" CREATE TABLE odps.default.mc_table (name STRING, num BIGINT); """) -
新しい Python セルに、次のコマンドを入力してデータを挿入します。
spark.sql("INSERT INTO odps.default.mc_table (name, num) VALUES ('Alice', 100),('Bob', 200);") -
新しい Python セルに、次のコマンドを入力してデータをクエリします。
spark.sql("SELECT * FROM odps.default.mc_table;").show()クエリが正常に実行されると、クエリ結果が Execution Results に表示されます。
+-----+---+ | name|num| +-----+---+ |Alice|100| | Bob|200| +-----+---+
-
-
-
MaxCompute コンソールで作成されたテーブルを確認します。
-
MaxCompute コンソールにログインし、左上のコーナーでリージョンを選択します。
-
プロジェクト管理 ページで、作成したプロジェクトを見つけ、[操作] 列の 管理 をクリックします。
-
[Tables] タブをクリックします。
MaxCompute コンソールで
mc_tableという名前の新しいテーブルを確認できます。
-
よくある質問
関連トピック
このトピックでは、Spark SQL とノートブックを例として使用しています。MaxCompute の読み書きの他の方法については、「バッチタスクまたはストリーミングタスクの開発」をご参照ください。