E-MapReduce (EMR) Serverless Spark には、Spark DataSource V2 API に基づく組み込みの MaxCompute データソースが含まれています。MaxCompute に接続するには、開発時に必要な構成を追加する必要があります。このトピックでは、EMR Serverless Spark を使用して MaxCompute からデータを読み取り、MaxCompute にデータを書き込む方法について説明します。
背景情報
MaxCompute (旧称 Open Data Processing Service (ODPS)) は、エクサバイト規模のデータを処理できる、高速でフルマネージドのデータウェアハウスソリューションです。構造化データのストレージとバッチ処理、データウェアハウスソリューション、分析モデリングサービスを提供します。 詳細については、「MaxCompute とは」をご参照ください。
前提条件
EMR Serverless Spark でワークスペースが作成されていること。詳細については、「ワークスペースの作成」をご参照ください。
MaxCompute プロジェクトが作成され、オープンストレージが有効になっていること。詳細については、「MaxCompute プロジェクトの作成」および「オープンストレージの有効化」をご参照ください。
このトピックの例では、オープンストレージの課金方法として従量課金を使用します。
制限事項
このトピックは、次のデータベースエンジンバージョンにのみ適用されます。
esr-4.x:esr-4.6.0 以降。
esr-3.x:esr-3.5.0 以降。
esr-2.x:esr-2.9.0 以降。
このトピックの操作では、MaxCompute のオープンストレージ機能を有効にする必要があります。詳細については、「オープンストレージの有効化」をご参照ください。
使用する MaxCompute エンドポイントは、Storage API 機能をサポートしている必要があります。サポートしていない場合は、Storage API をサポートするエンドポイントに切り替えてください。詳細については、「データ伝送リソース」をご参照ください。
注意事項
オープンストレージで従量課金方式を使用する場合、1 TB の無料クォータを超過すると、読み書きしたデータの論理サイズに対して課金されます。
操作手順
ステップ 1:MaxCompute に接続するためのセッションの作成
SQL セッションまたは Notebook セッションを作成して MaxCompute に接続できます。詳細については、「セッションマネージャー」をご参照ください。
MaxCompute に接続するための SQL セッションの作成
セッションページに移動します。
EMR コンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
Spark ページで、管理するワークスペースの名前をクリックします。
EMR Serverless Spark ページの左側のナビゲーションウィンドウで、オペレーションセンター > セッション を選択します。
SQL Session タブで、Create SQL Session をクリックします。
[SQL セッションの作成] ページで、パラメーターを設定し、Create をクリックします。
パラメーター
説明
Name
SQL セッションの名前。例:mc_sql_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 アカウントの AccessKey ID。<accessKey>:MaxCompute サービスへのアクセスに使用する Alibaba Cloud アカウントの AccessKey Secret。
MaxCompute に接続するための Notebook セッションの作成
[Notebook セッション] タブに移動します。
EMR コンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
Spark ページで、目的のワークスペースを見つけ、ワークスペースの名前をクリックします。
EMR Serverless Spark ページの左側のナビゲーションウィンドウで、オペレーションセンター > セッション を選択します。
[Notebook セッション] タブをクリックします。
Create Notebook Session ボタンをクリックします。
[Notebook セッションの作成] ページで、パラメーターを設定し、Create ボタンをクリックします。
パラメーター
説明
Name
Notebook セッションの名前。例:mc_notebook_compute。
Spark Configuration
MaxCompute に接続するための Spark 構成。
重要スキーマ機能が有効になっている 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 アカウントの AccessKey ID。<accessKey>:MaxCompute サービスへのアクセスに使用する Alibaba Cloud アカウントの AccessKey Secret。
ステップ 2:MaxCompute でのデータのクエリまたは書き込み
SparkSQL を使用した MaxCompute でのデータの書き込みとクエリ
EMR Serverless Spark ページで、左側のナビゲーションウィンドウの Data Development をクリックします。
[開発] タブで、
アイコンをクリックします。SparkSQL ジョブを作成します。
表示されるダイアログボックスで、mc_load_task などの名前を入力します。[タイプ] はデフォルトの SparkSQL のままにして、OK をクリックします。
新しい SparkSQL ジョブ (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;データベースのドロップダウンリストからデータベースを選択します。コンピューティングのドロップダウンリストから、ステップ 1:MaxCompute に接続するためのセッションの作成 で作成した SQL セッション (mc_sql_compute など) を選択します。
Run をクリックして SparkSQL ジョブを実行します。
ジョブが正常に実行されると、Execution Results タブに結果が表示されます。

MaxCompute コンソールで作成されたテーブルを表示します。
MaxCompute コンソールにログインします。左上隅でリージョンを選択します。
プロジェクト管理 ページで、作成したプロジェクトを見つけ、[操作] 列の 管理 をクリックします。
[テーブル] タブをクリックします。
MaxCompute コンソールに
mc_tableという名前の新しいテーブルが表示されます。
Notebook を使用した MaxCompute でのデータの書き込みとクエリ
EMR Serverless Spark ページで、左側のナビゲーションウィンドウの Data Development をクリックします。
[開発] タブで、
アイコンをクリックします。Notebook を作成します。
表示されるダイアログボックスで、mc_load_task などの名前を入力し、[タイプ] で を選択して、OK をクリックします。
セッションのドロップダウンリストから、ステップ 1:MaxCompute に接続するためのセッションの作成 で作成した実行中の Notebook セッション (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 タブに結果が表示されます。

MaxCompute コンソールで作成されたテーブルを表示します。
MaxCompute コンソールにログインします。左上隅でリージョンを選択します。
プロジェクト管理 ページで、作成したプロジェクトを見つけ、[操作] 列の 管理 をクリックします。
[テーブル] タブをクリックします。
MaxCompute コンソールに
mc_tableという名前の新しいテーブルが表示されます。
よくある質問
関連ドキュメント
このトピックでは、SparkSQL ジョブと Notebook ジョブを使用した例を示します。他の種類のジョブを使用して MaxCompute からデータを読み書きする方法については、「バッチジョブまたはストリーミングジョブの開発」をご参照ください。