EMR Serverless Spark內建了基於Spark DataSource V2的MaxCompute DataSource,只需在開發時添加對應的配置即可串連MaxCompute。本文為您介紹在EMR Serverless Spark中實現MaxCompute的讀取與寫入操作。
背景資訊
MaxCompute(原名ODPS)是一種快速、完全託管的EB級資料倉儲解決方案,致力於批量結構化資料的儲存和計算,提供海量資料倉儲的解決方案及分析建模服務。MaxCompute的詳情請參見什麼是MaxCompute。
前提條件
已在EMR Serverless Spark中建立工作空間。
已在MaxCompute中建立MaxCompute專案並使用開放儲存。
本文樣本使用的是開放儲存(隨用隨付)。
使用限制
注意事項
使用開放儲存(隨用隨付),超過1 TB的部分按照實際讀寫資料的邏輯大小進行計費。
操作流程
步驟一:建立會話以串連MaxCompute
您可以建立SQL會話,或者Notebook會話來串連MaxCompute。關於會話更多介紹,請參見會話管理。
建立SQL會話以串連MaxCompute
進入會話管理頁面。
在左側導覽列,選擇。
在Spark頁面,單擊目標工作空間名稱。
在EMR Serverless Spark頁面,單擊左側導覽列中的會話管理。
在SQL 会话頁面,單擊创建 SQL 会话。
在建立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
進入Notebook會話頁面。
在左側導覽列,選擇。
在Spark頁面,單擊目標工作空間名稱。
在EMR Serverless Spark頁面,選擇左側導覽列中的會話管理。
單擊Notebook會話頁簽。
單擊创建 Notebook 会话。
在建立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中的資料
在EMR Serverless Spark頁面,單擊左側導覽列中的数据开发。
在開發目錄頁簽下,單擊
表徵圖。建立SparkSQL。
在彈出的對話方塊中,輸入名稱(例如,mc_load_task),類型使用預設的SparkSQL,然後單擊确定。
複製如下代碼到新增的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;在資料庫下拉式清單中選擇一個資料庫,在Compute下拉式清單中選擇步驟一:建立會話以串連MaxCompute中建立的SQL會話(mc_sql_compute)。
單擊运行,執行建立的SparkSQL。
查詢執行成功後,在运行结果中輸出了查詢結果。

在MaxCompute控制台查看建立的表。
登入MaxCompute控制台,在左上方選擇地區。
在项目管理頁面,單擊已建立專案操作列的管理。
單擊Tables頁簽。
即可在MaxCompute控制台看到建立了一個名為
mc_table的新表。
使用Notebook寫入並查詢MaxCompute中的資料
在EMR Serverless Spark頁面,單擊左側導覽列中的数据开发。
在開發目錄頁簽下,單擊
表徵圖。建立Notebook。
在彈出的對話方塊中,輸入名稱(例如,mc_load_task),類型使用,然後單擊确定。
在會話下拉式清單中選擇步驟一:建立會話以串連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()查詢執行成功後,在运行结果中輸出了查詢結果。

在MaxCompute控制台查看建立的表。
登入MaxCompute控制台,在左上方選擇地區。
在项目管理頁面,單擊已建立專案操作列的管理。
單擊Tables頁簽。
即可在MaxCompute控制台看到建立了一個名為
mc_table的新表。
常見問題
相關文檔
本文以SparkSQL和Notebook開發類型為例,如果您想通過其他方式讀寫MaxCompute資料,可以參見批任務或流任務開發。