全部產品
Search
文件中心

MaxCompute:Spark Connector

更新時間:Dec 05, 2025

MaxCompute開放儲存支援Spark通過Connector調用Storage API,直接讀取MaxCompute的資料,簡化了讀取資料的過程,提高了資料訪問效能。同時,Spark整合MaxCompute的資料存放區能力,實現了高效、靈活和強大的資料處理和分析。

適用範圍

  • 第三方引擎訪問MaxCompute時

    • 支援讀取普通表、分區表、聚簇表、Delta Table和物化視圖;

    • 不支援讀取MaxCompute的外部表格、邏輯視圖。

  • 不支援讀JSON資料類型。

操作步驟

  1. 開通MaxCompute建立MaxCompute專案

  2. 購買獨享Data Transmission Service資源群組(訂用帳戶)

  3. 部署Spark開發環境

    Spark包請使用Spark 3.2.x - Spark 3.5.x版本,單擊Spark下載並解壓到本地目錄。

    1. 若Spark開發環境搭建在Linux作業系統下,詳情請參見搭建Linux開發環境

    2. 若Spark開發環境搭建在Windows作業系統下,詳情請參見搭建Windows開發環境

  4. 下載並編譯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/
  5. 配置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
  6. 通過Spark Connector使用MaxCompute。

    1. 使用如下命令在Spark的bin目錄下啟動Spark SQL用戶端:

      cd $SPARK_HOME/bin
      spark-sql
    2. 查詢MaxCompute專案中存在的表:

      SHOW tables in odps.doc_test;

      doc_test為樣本MaxCompute專案名稱,實際運行時請替換為您的MaxCompute專案名稱。

    3. 建立表:

      CREATE TABLE odps.doc_test.mc_test_table (name STRING, num BIGINT);
    4. 讀取表中資料:

      SELECT * FROM odps.doc_test.mc_test_table;
    5. 建立分區表:

       CREATE TABLE odps.doc_test.mc_test_table_pt (name STRING, num BIGINT) PARTITIONED BY (pt1 STRING, pt2 STRING);
    6. 讀取分區表中資料:

      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)
    7. 刪除表:

      DROP TABLE IF EXISTS odps.doc_test.mc_test_table;