MaxCompute開放儲存支援Spark通過Connector調用Storage API,直接讀取MaxCompute的資料,簡化了讀取資料的過程,提高了資料訪問效能。同時,Spark整合MaxCompute的資料存放區能力,實現了高效、靈活和強大的資料處理和分析。
適用範圍
第三方引擎訪問MaxCompute時
支援讀取普通表、分區表、聚簇表、Delta Table和物化視圖;
不支援讀取MaxCompute的外部表格、邏輯視圖。
不支援讀JSON資料類型。
操作步驟
部署Spark開發環境
Spark包請使用
Spark 3.2.x - Spark 3.5.x版本,單擊Spark下載並解壓到本地目錄。若Spark開發環境搭建在Linux作業系統下,詳情請參見搭建Linux開發環境。
若Spark開發環境搭建在Windows作業系統下,詳情請參見搭建Windows開發環境。
下載並編譯Spark Connector(當前只支援Spark 3.2.x~Spark 3.5.x版本,下文以Spark 3.3.1版本為例)。
使用
git clone命令下載Spark Connector安裝包,需確保該環境已安裝Git,否則執行該命令將會報錯。## 下載Spark Connector: git clone https://github.com/aliyun/aliyun-maxcompute-data-collectors.git ## 切換到spark connector目錄cd cd aliyun-maxcompute-data-collectors/spark-connector ## 編譯 mvn clean package ## Datasource Jar包位置 datasource/target/spark-odps-datasource-3.3.1-odps0.43.0.jar ## 將Datasource Jar包拷貝到 $SPARK_HOME/jars/目錄下 cp datasource/target/spark-odps-datasource-3.3.1-odps0.43.0.jar $SPARK_HOME/jars/配置MaxCompute帳號訪問資訊。
在Spark的
conf目錄下建立spark-defaults.conf檔案:cd $SPARK_HOME/conf vim spark-defaults.conf在
spark-defaults.conf檔案中配置帳號資訊:## 在spark-defaults.conf配置帳號 spark.hadoop.odps.project.name=doc_test spark.hadoop.odps.access.id=L******************** spark.hadoop.odps.access.key=******************* spark.hadoop.odps.end.point=http://service.cn-beijing.maxcompute.aliyun.com/api spark.hadoop.odps.tunnel.quota.name=ot_xxxx_p#ot_xxxx ## 配置MaxCompute Catalog 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 Connector使用MaxCompute。
使用如下命令在Spark的
bin目錄下啟動Spark SQL用戶端:cd $SPARK_HOME/bin spark-sql查詢MaxCompute專案中存在的表:
SHOW tables in odps.doc_test;doc_test為樣本MaxCompute專案名稱,實際運行時請替換為您的MaxCompute專案名稱。建立表:
CREATE TABLE odps.doc_test.mc_test_table (name STRING, num BIGINT);讀取表中資料:
SELECT * FROM odps.doc_test.mc_test_table;建立分區表:
CREATE TABLE odps.doc_test.mc_test_table_pt (name STRING, num BIGINT) PARTITIONED BY (pt1 STRING, pt2 STRING);讀取分區表中資料:
SELECT * FROM odps.doc_test.mc_test_table_pt;返回結果樣本如下:
test1 1 2018 0601 test2 2 2018 0601 Time taken: 1.312 seconds, Fetched 2 row(s)刪除表:
DROP TABLE IF EXISTS odps.doc_test.mc_test_table;