全部產品
Search
文件中心

E-MapReduce:讀寫MaxCompute

更新時間:Dec 23, 2025

EMR Serverless Spark內建了基於Spark DataSource V2的MaxCompute DataSource,只需在開發時添加對應的配置即可串連MaxCompute。本文為您介紹在EMR Serverless Spark中實現MaxCompute的讀取與寫入操作。

背景資訊

MaxCompute(原名ODPS)是一種快速、完全託管的EB級資料倉儲解決方案,致力於批量結構化資料的儲存和計算,提供海量資料倉儲的解決方案及分析建模服務。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 Endpoint需支援儲存API功能。如果不支援,請切換至支援儲存API的Endpoint,詳情請參見資料轉送資源

注意事項

使用開放儲存(隨用隨付),超過1 TB的部分按照實際讀寫資料的邏輯大小進行計費。

操作流程

步驟一:建立會話以串連MaxCompute

您可以建立SQL會話,或者Notebook會話來串連MaxCompute。關於會話更多介紹,請參見會話管理

建立SQL會話以串連MaxCompute

  1. 進入會話管理頁面。

    1. 登入E-MapReduce控制台

    2. 在左側導覽列,選擇EMR Serverless > Spark

    3. Spark頁面,單擊目標工作空間名稱。

    4. EMR Serverless Spark頁面,單擊左側導覽列中的會話管理

  2. SQL 会话頁面,單擊创建 SQL 会话

  3. 在建立SQL會話頁面,配置以下資訊,單擊创建

    參數

    說明

    名称

    自訂SQL會話的名稱。例如,mc_sql_compute。

    Spark 配置

    填寫Spark配置資訊,以串連阿里雲MaxCompute。

    重要

    如果需要訪問開啟了三層模型的MaxCompute專案,還需在Spark配置資訊中配置spark.sql.catalog.odps.enableNamespaceSchema參數為true。更多參數資訊,請參見Spark Connector。關於Schema詳情,請參見Schema操作

    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的Endpoint資訊,詳情請參見Endpoint

    • <accessId>:訪問MaxCompute服務所使用阿里雲帳號的AccessKey ID。

    • <accessKey>:訪問MaxCompute服務所使用阿里雲帳號的AccessKey Secret。

建立Notebook會話以串連MaxCompute

  1. 進入Notebook會話頁面。

    1. 登入E-MapReduce控制台

    2. 在左側導覽列,選擇EMR Serverless > Spark

    3. Spark頁面,單擊目標工作空間名稱。

    4. EMR Serverless Spark頁面,選擇左側導覽列中的會話管理

    5. 單擊Notebook會話頁簽。

  2. 單擊创建 Notebook 会话

  3. 在建立Notebook會話頁面,配置以下資訊,單擊创建

    參數

    說明

    名称

    自訂Notebook會話的名稱。例如,mc_notebook_compute。

    Spark 配置

    填寫Spark配置資訊,以串連阿里雲MaxCompute。

    重要

    如果需要訪問開啟了Schema功能的MaxCompute專案,還需在Spark配置資訊中配置spark.sql.catalog.odps.enableNamespaceSchema參數為true。更多參數資訊,請參見Spark Connector。關於Schema詳情,請參見Schema操作

    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的Endpoint資訊,詳情請參見Endpoint

    • <accessId>:訪問MaxCompute服務所使用阿里雲帳號的AccessKey ID。

    • <accessKey>:訪問MaxCompute服務所使用阿里雲帳號的AccessKey Secret。

步驟二:在MaxCompute中查詢或寫入資料

使用SparkSQL寫入並查詢MaxCompute中的資料

  1. 在EMR Serverless Spark頁面,單擊左側導覽列中的数据开发

  2. 開發目錄頁簽下,單擊image表徵圖。

  3. 建立SparkSQL。

    1. 在彈出的對話方塊中,輸入名稱(例如,mc_load_task),類型使用預設的SparkSQL,然後單擊确定

    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. 在資料庫下拉式清單中選擇一個資料庫,在Compute下拉式清單中選擇步驟一:建立會話以串連MaxCompute中建立的SQL會話(mc_sql_compute)。

    4. 單擊运行,執行建立的SparkSQL。

      查詢執行成功後,在运行结果中輸出了查詢結果。

      image

  4. 在MaxCompute控制台查看建立的表。

    1. 登入MaxCompute控制台,在左上方選擇地區。

    2. 项目管理頁面,單擊已建立專案操作列的管理

    3. 單擊Tables頁簽。

      即可在MaxCompute控制台看到建立了一個名為mc_table的新表。

      image

使用Notebook寫入並查詢MaxCompute中的資料

  1. 在EMR Serverless Spark頁面,單擊左側導覽列中的数据开发

  2. 開發目錄頁簽下,單擊image表徵圖。

  3. 建立Notebook。

    1. 在彈出的對話方塊中,輸入名稱(例如,mc_load_task),類型使用互動式開發 > Notebook,然後單擊确定

    2. 在會話下拉式清單中選擇步驟一:建立會話以串連MaxCompute中建立的並已啟動的Notebook會話(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()

        查詢執行成功後,在运行结果中輸出了查詢結果。

        image

  4. 在MaxCompute控制台查看建立的表。

    1. 登入MaxCompute控制台,在左上方選擇地區。

    2. 项目管理頁面,單擊已建立專案操作列的管理

    3. 單擊Tables頁簽。

      即可在MaxCompute控制台看到建立了一個名為mc_table的新表。

      image

常見問題

為什麼查詢MaxCompute表時,報錯Access Denied?

  • 問題現象:查詢MaxCompute表時,出現以下錯誤資訊。

    Access Denied - Not allowed to use storage api service on current endpoint
  • 問題原因:該錯誤表明目前使用者未獲得使用MaxCompute儲存API服務的授權,或者所使用的Endpoint不支援儲存API功能。

  • 處理方法:

    • 檢查是否已開啟開放儲存功能。

      MaxCompute控制台選擇租户管理>租户属性查看,如果未開啟,請參見使用開放儲存開啟並完成配置。

    • 檢查當前使用的Endpoint是否支援儲存API功能。如果不支援,請切換至支援儲存API的 Endpoint,詳情請參見支援地區

相關文檔

本文以SparkSQL和Notebook開發類型為例,如果您想通過其他方式讀寫MaxCompute資料,可以參見批任務或流任務開發