全部產品
Search
文件中心

MaxCompute:運行模式

更新時間:Jun 19, 2024

MaxCompute Spark支援三種運行方式:Local模式、Cluster模式和DataWorks執行模式。

Local模式

MaxCompute Spark支援使用者以原生Spark Local模式進行作業調試。

與Yarn Cluster模式類似,您首先需要做以下準備工作:

  1. 準備MaxCompute專案以及對應的AccessKey ID、AccessKey Secret。

  2. 下載MaxCompute Spark用戶端。

  3. 準備環境變數。

  4. 配置spark-defaults.conf。

  5. 下載工程模版並編譯。

上述操作更多資訊,請參見搭建Linux開發環境

通過MaxCompute Spark用戶端以Spark-Submit方式提交作業,程式碼範例如下:

## Java/Scala
cd $SPARK_HOME
./bin/spark-submit --master local[4] --class com.aliyun.odps.spark.examples.SparkPi \
/path/to/odps-spark-examples/spark-examples/target/spark-examples-2.0.0-SNAPSHOT-shaded.jar
## PySpark
cd $SPARK_HOME
./bin/spark-submit --master local[4] \
/path/to/odps-spark-examples/spark-examples/src/main/python/odps_table_rw.py

注意事項

  • Local模式讀寫MaxCompute錶速度慢,是因為Local模式是通過Tunnel來讀寫的,讀寫速度相比於Yarn Cluster模式慢。

  • Local模式是在本地執行的,部分使用者會經常遇到Local模式下可以訪問VPC,但是在Yarn Cluster模式下無法訪問VPC。

    Local模式是處於使用者本機環境,網路沒有隔離。而Yarn Cluster模式是處於MaxCompute的網路隔離環境中,必須要配置VPC訪問相關參數。

  • Local模式下訪問VPC的Endpoint通常是外網Endpoint,而Yarn Cluster模式下訪問VPC的Endpoint通常是VPC網路Endpoint。更多Endpoint資訊,請參見Endpoint

  • IDEA Local模式下需要將相關配置寫入代碼中,而在Yarn Cluster模式運行時一定要將這些配置從代碼中刪除。

IDEA Local模式執行

MaxCompute Spark支援使用者在IDEA中以Local[N]的模式直接運行代碼,而不需要通過MaxCompute Spark用戶端提交,您需要注意以下兩點:

  • 在IDEA中運行Local模式時,不能直接引用spark-defaults.conf的配置,需要手動在代碼中指定相關配置。配置樣本如下:

    val spark = SparkSession
          .builder()
          .appName("SparkPi")
          .config("spark.master", "local[4]") // 需設定spark.master為local[N]才能直接運行,N為並發數。
          .config("spark.hadoop.odps.project.name", "<project_name>")
          .config("spark.hadoop.odps.access.id", "<accesskey_id>")
          .config("spark.hadoop.odps.access.key", "<accesskey_secret>")
          .config("spark.hadoop.odps.end.point", "http://service.cn.maxcompute.aliyun.com/api")
          .config("spark.sql.catalogImplementation", "odps")
          .getOrCreate()
  • 務必注意需要在IDEA中手動添加MaxCompute Spark用戶端的相關依賴(jars目錄),否則會出現如下報錯:

     the value of spark.sql.catalogimplementation should be one of hive in-memory but was odps

    您可以按照如下流程配置依賴:

    1. 在IDEA的頂部功能表列,選擇File > Project Structure專案設定

    2. Project StructureModules頁面,選擇目標Spark Module。單擊右側Dependencies後,在左下角單擊增加表徵圖,選擇JARS or directories...選擇

    3. 在開啟的jars目錄下,選擇MaxCompute Spark版本及jars,單擊OpenJAR

    4. 單擊OKopen結果

    5. 通過IDEA提交作業。運行

Cluster模式

在Cluster模式中,您需要指定自訂程式入口main。main結束(Success or Fail)時,對應的Spark作業就會結束。使用情境適合於離線作業,可與阿里雲DataWorks產品結合進行作業調度,命令列提交方式如下。

# /path/to/MaxCompute-Spark為編譯後的Application JAR包路徑。
cd $SPARK_HOME
bin/spark-submit --master yarn-cluster --class com.aliyun.odps.spark.examples.SparkPi \
/path/to/MaxCompute-Spark/spark-2.x/target/spark-examples_2.11-1.0.0-SNAPSHOT-shaded.jar

DataWorks執行模式

您可以在DataWorks中運行MaxCompute Spark離線作業(Cluster模式),以方便與其它類型執行節點整合和調度。

說明

DataWorks的Spark節點目前已經支援的Region:華東1(杭州)、華北2(北京)、華東2(上海)、華南1(深圳)、中國(香港)、美國西部1(矽谷)、歐洲中部1(法蘭克福)、亞太地區南部1(孟買)、亞太地區東南1(新加坡)。

操作步驟如下:

  1. 您需要在DataWorks的商務程序中上傳並提交(單擊提交按鈕)資源。

    上傳成功如下圖所示。

  2. 在建立的商務程序中,從資料開發組件中選擇ODPS Spark節點。

  3. 雙擊工作流程中的Spark節點,對Spark作業進行任務定義。ODPS Spark節點支援兩種spark版本語言。選擇不同的語言,會顯示相應不同的配置。您可以根據介面提示進行配置,參數詳情請參見開發ODPS Spark任務。其中:

    • 選擇主jar資源:指定任務所使用的資源檔。此處的資源檔需要您提前上傳至DataWorks上。

    • 配置項:指定提交作業時的配置項。

      其中spark.hadoop.odps.access.idspark.hadoop.odps.access.keyspark.hadoop.odps.end.point無需配置,預設為MaxCompute專案的值(有特殊原因可顯式配置,將覆蓋預設值)。

      除此之外,spark-defaults.conf中的配置需要逐條加到ODPS SPARK節點配置項中,例如Executor的數量、記憶體大小和spark.hadoop.odps.runtime.end.point的配置。

      ODPS SPARK節點的資源檔和配置項對應於spark-submit命令的參數和選項,如下表。此外,您也不需要上傳spark-defaults.conf檔案,而是將spark-defaults.conf檔案中的配置都逐條加到ODPS SPARK節點配置項中。

      ODPS SPARK節點

      spark-submit

      主Java、Python資源

      app jar or python file

      配置項

      --conf PROP=VALUE

      Main Class

      --class CLASS_NAME

      參數

      [app arguments]

      選擇JAR資源

      --jars JARS

      選擇Python資源

      --py-files PY_FILES

      選擇File資源

      --files FILES

      選擇Archives資源

      --archives ARCHIVES

  4. 手動執行Spark節點,可以查看該任務的執行日誌,從列印出來的日誌中可以擷取該任務的Logview和Jobview的URL,便於進一步查看與診斷。

    Spark工作定義完成後,即可在商務程序中對不同類型服務進行編排、統一調度執行。