すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:MaxCompute への読み書き

最終更新日:Jun 22, 2026

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 セッション

  1. [セッション] ページに移動します。

    1. EMR コンソールにログインします。

    2. 左側のナビゲーションウィンドウで、[EMR Serverless] > [Spark] を選択します。

    3. [Spark] ページで、対象のワークスペースの名前をクリックします。

    4. EMR Serverless Spark ページで、左側のナビゲーションウィンドウの Sessions をクリックします。

  2. SQL Session タブで、Create SQL Session をクリックします。

  3. [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 アカウントのアクセスキーシークレット。

ノートブックセッション

  1. ノートブックセッションページに移動します。

    1. EMR コンソール にログインします。

    2. 左側のナビゲーションウィンドウで、EMR Serverless > スパーク を選択します。

    3. Spark ページで、対象のワークスペース名をクリックします。

    4. EMR Serverless Spark ページで、左側のナビゲーションウィンドウから Sessions を選択します。

    5. Notebook Session タブをクリックします。

  2. Create Notebook Session をクリックします。

  3. [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

  1. EMR Serverless Spark ページで、左側メニューにある Development をクリックします。

  2. [開発] タブで、image アイコンをクリックします。

  3. Spark SQL ジョブを作成します。

    1. 表示されたダイアログボックスで、mc_load_task などの名前を入力し、タイプとして [SparkSQL] を選択して、OK をクリックします。

    2. 次のコードを新しい 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;
    3. [Database] ドロップダウンリストからデータベースを選択します。次に、[Compute] ドロップダウンリストから、「手順1:MaxCompute セッションの作成」で作成した SQL セッション (mc_sql_compute) を選択します。

    4. Run をクリックして Spark SQL ジョブを実行します。

      クエリが正常に実行されると、クエリ結果が Execution Results タブに表示されます。

      [Result #3] には、[name][num] の 2 つの列を持つ結果テーブルが表示されます。テーブルには、'Alice' の値が 100、'Bob' の値が 200 と表示されます。

  4. MaxCompute コンソールで作成されたテーブルを確認します。

    1. MaxCompute コンソールにログインし、左上のコーナーでリージョンを選択します。

    2. プロジェクト管理 ページで、作成したプロジェクトを見つけ、[操作] 列の 管理 をクリックします。

    3. [Tables] タブをクリックします。

      MaxCompute コンソールで mc_table という名前の新しいテーブルを確認できます。

ノートブック

  1. EMR Serverless Spark ページで、左側メニューにある Development をクリックします。

  2. [開発] タブで、image アイコンをクリックします。

  3. ノートブックを作成します。

    1. 表示されたダイアログボックスで、mc_load_task などの名前を入力します。タイプに[Interactive Development] > [Notebook] を選択し、OK をクリックします。

    2. セッションドロップダウンリストから、「手順1:MaxCompute セッションの作成」で作成した実行中のノートブックセッション (mc_notebook_compute) を選択します。

    3. コードを記述して実行します。

      1. Python セルに、次のコマンドを入力してテーブルを作成します。

        spark.sql("""
        CREATE TABLE odps.default.mc_table (name STRING, num BIGINT);
        """)
        
      2. 新しい Python セルに、次のコマンドを入力してデータを挿入します。

        spark.sql("INSERT INTO odps.default.mc_table (name, num) VALUES ('Alice', 100),('Bob', 200);")
      3. 新しい Python セルに、次のコマンドを入力してデータをクエリします。

        spark.sql("SELECT * FROM odps.default.mc_table;").show()

        クエリが正常に実行されると、クエリ結果が Execution Results に表示されます。

        +-----+---+
        | name|num|
        +-----+---+
        |Alice|100|
        |  Bob|200|
        +-----+---+
  4. MaxCompute コンソールで作成されたテーブルを確認します。

    1. MaxCompute コンソールにログインし、左上のコーナーでリージョンを選択します。

    2. プロジェクト管理 ページで、作成したプロジェクトを見つけ、[操作] 列の 管理 をクリックします。

    3. [Tables] タブをクリックします。

      MaxCompute コンソールで mc_table という名前の新しいテーブルを確認できます。

よくある質問

MaxCompute テーブルをクエリすると「アクセス拒否」エラーが表示されるのはなぜですか。

  • 現象:MaxCompute テーブルをクエリすると、次のエラーメッセージが返されます。

    Access Denied - Not allowed to use storage api service on current endpoint
  • 原因:このエラーは、現在のユーザーに MaxCompute ストレージ API サービスを使用する権限がないか、指定されたエンドポイントがストレージ API をサポートしていないことを示します。

  • 解決策:

    • Open Storage 機能が有効になっているかどうかを確認してください。

      MaxCompute コンソールで、テナント管理 > テナントプロパティ に移動してステータスを確認してください。この機能が有効になっていない場合は、「Open Storage の使用」を参照して有効にし、設定を完了してください。

    • 現在のエンドポイントがストレージ API をサポートしているかどうかを確認してください。サポートされていない場合は、サポートされているエンドポイントに切り替えてください。詳細については、「サポートされるリージョン」をご参照ください。

関連トピック

このトピックでは、Spark SQL とノートブックを例として使用しています。MaxCompute の読み書きの他の方法については、「バッチタスクまたはストリーミングタスクの開発」をご参照ください。