全部產品
Search
文件中心

Data Lake Analytics - Deprecated:作業配置指南

更新時間:Jul 06, 2024

Serverless Spark作業的描述格式為JSON格式,包含作業名稱,JAR包路徑以及作業配置參數等資訊。本文主要介紹如何配置Serverless Spark任務格式。

重要

雲原生資料湖分析(DLA)產品已退市,AnalyticDB for MySQL湖倉版支援DLA已有功能,並提供更多的功能和更好的效能。AnalyticDB for MySQL相關使用文檔,請參見Spark應用配置參數說明

Spark任務樣本

本文以讀取OSS資料為例,介紹Spark任務的編寫方式,命令列參數格式為JSON格式。樣本如下:

 {  
  "args": ["oss://${oss-buck-name}/data/test/test.csv"],
  "name": "spark-oss-test",
  "file": "oss://${oss-buck-name}/jars/test/spark-examples-0.0.1-SNAPSHOT.jar",
  "className": "com.aliyun.spark.oss.SparkReadOss",
  "conf": {
    "spark.driver.resourceSpec": "medium",
    "spark.executor.resourceSpec": "medium",
    "spark.executor.instances": 2,
    "spark.dla.connectors": "oss"
  }
}

上述樣本描述了一個典型的離線Spark JAR任務的格式,包括任務的名字、主JAR、入口類、入口類參數以及Spark作業配置。如果開發人員熟悉Spark社區用法的話,可以發現這些配置跟社區Spark-Submit工具的命令列參數類似。實際上,Serverless Spark參考了社區的用法,並跟社區的用法保持一致,包括參數名以及參數的語義。

作業參數說明

本章節對Serverless Spark作業參數進行說明。

參數名稱

是否必填

樣本值

使用說明

args

"args":["args0", "args1"]

Spark任務傳入的參數,多個參數之間以英文逗號(,)分隔。

name

"name": "your_job_name"

Spark任務名稱。

file

Python/Java/Scala應用必填

"file":"oss://bucket/path/to/your/jar"

Spark任務主檔案的儲存位置,可以是入口類所在的JAR包或者Python的入口執行檔案。

說明

Spark任務主檔案目前只支援儲存在OSS中。

className

Java/Scala應用必填

"className":"com.aliyun.spark.oss.SparkReadOss"

Java或者Scala程式入口類。如果是Python則不需要指定。

sqls

SQL應用必填

"sqls":["select * from xxxx","show databases"]

本關鍵字是區別於社區Spark的DLA平台自研功能,允許使用者不提交JAR包和Python檔案,直接提交SQL離線作業。該關鍵字跟file, className, args關鍵字不能同時使用。使用者可以在一個作業中指定多條SQL語句,中間以英文逗號(,)隔開。多條SQL語句按照指定的順序依次執行。

jars

jars:["oss://bucket/path/to/jar","oss://bucket/path/to/jar"]

Spark任務依賴的JAR包,多個JAR包之間以英文逗號(,)分隔。JAR包在作業運行時會被加入到Driver和Executor JVM的ClassPath裡面。

說明

Spark任務所依賴的所有JAR包須儲存在OSS中。

files

"files":["oss://bucket/path/to/files","oss://bucket/path/to/files"]

Spark任務依賴的檔案資源,檔案會被下載到Driver和Executor進程的當前執行目錄下。檔案可以指定別名,比如oss://bucket/xx/yy.txt#yy,使用者在代碼中只需要使用./yy就可以訪問檔案,否則使用./yy.txt。多個檔案中間用英文逗號(,)分隔。

說明
  • files中包含名為oss://<path/to>/log4j.properties的檔案時(檔案名稱固定為log4j.properties),Spark會使用該log4j.properties作為日誌配置。

  • Spark任務所依賴的所有檔案須儲存在OSS中。

archives

"archives":["oss://bucket/path/to/archives","oss://bucket/path/to/archives"]

Spark任務依賴的檔案包資源,目前支援ZIP、TAR、TAR.GZ尾碼。檔案包會被解壓到當前Spark進程的目前的目錄下。檔案包可以指定別名,比如oss://bucket/xx/yy.zip#yy,使用者在代碼中只需要使用./yy/zz.txt就可以訪問解壓後的檔案,否則使用./yy.zip/zz.txt訪問檔案(假設zz.txt是yy.zip壓縮包中的檔案)。多個檔案包中間使用英文逗號(,)分隔。

說明

Spark任務所依賴的所有檔案包須儲存在OSS中。檔案包解壓縮失敗,任務會失敗。

pyFiles

Python應用可選

"pyFiles":["oss://bucket/path/to/pyfiles","oss://bucket/path/to/pyfiles"]

PySpark依賴的Python檔案,尾碼可以是ZIP、PY和EGG。如果依賴多個Python檔案,建議使用者使用ZIP或者EGG檔案包。這些檔案可以直接在Python代碼中以module的方式引用。多個檔案包中間使用英文逗號(,)分隔。

說明

Spark任務所依賴的所有Python檔案須儲存在OSS中。

conf

"conf":{"spark.xxxx":"xxx","spark.xxxx":"xxxx"}

與開源Spark中的配置項相同,參數格式為key: value形式,多個參數之間以英文逗號(,)分隔。

若不填寫conf,系統使用建立虛擬叢集時設定的預設值。

DLA Spark 配置項

DLA Spark配置項跟社區Spark中的配置項基本保持一致,本章節將對其中不一致的地方以及DLA Serverless Spark平台提供的參數進行說明。

  • 與社區Spark不一致的地方

    指定DriverExecutor資源大小。

    參數名稱

    使用說明

    對應社區Spark參數

    spark.driver.resourceSpec

    表示spark driver的資源規格。取值:

    • small:表示1c4g

    • medium:表示2c8g

    • large:表示4c16g

    • xlarge:表示8c32g

    spark.driver.cores以及spark.driver.memory

    spark.executor.resourceSpec

    表示spark executor的資源規格,同spark.driver.resourceSpec。

    spark.executor.cores以及spark.executor.memory

  • DLA Spark相關參數

    • Spark UI相關參數:

      參數名稱

      預設值

      參數說明

      spark.dla.job.log.oss.uri

      用於儲存DLA Spark作業產生的作業日誌以及SparkUI EventLog的目錄,目前只支援使用者的OSS路徑。如果不填無法看到作業日誌,作業結束後無法開啟SparkUI。

    • RAM帳號營運Spark相關參數:

      參數名稱

      預設值

      參數說明

      spark.dla.roleArn

      RAM系統中授予提交作業的子帳號的roleArn,子帳號提交作業需要填寫該參數,主帳號提交作業無需提交該參數。

    • DLA Spark內建資料來源連接器。

      參數名稱

      預設值

      參數說明

      spark.dla.connectors

      啟用DLA Spark內建的連接器,連接器名稱以逗號隔開,目前可選的連接器有 oss、hbase1.x、tablestore。

      spark.hadoop.job.oss.fileoutputcommitter.enable

      false

      開啟parquet格式寫入最佳化。請參考OSS

      重要
      • 需要兩個參數同時使用。

      • 不支援與其它資料格式混用。

      • 必須設定 "spark.dla.connectors": "oss" 。

      spark.sql.parquet.output.committer.class

      com.aliyun.hadoop.mapreduce.lib.output.OSSFileOutputCommitter

      spark.hadoop.io.compression.codec.snappy.native

      false

      標識Snappy檔案是否為標準Snappy檔案。Hadoop預設識別的是Hadoop修改過的Snappy格式檔案。設定為true時將使用標準snappy庫解壓,否則使用hadoop預設的snappy庫解壓。

    • 訪問使用者VPC串連使用者資料來源相關參數:

      參數名稱

      預設值

      參數說明

      spark.dla.eni.enable

      false

      這個參數為true表示啟用打通VPC功能。

      spark.dla.eni.vswitch.id

      開啟打通VPC功能,用於彈性網卡的交換器ID。一般地,如果使用者有ECS可以訪問目標資料來源,那麼可以直接使用該ECS的交換器ID。

      spark.dla.eni.security.group.id

      開啟打通VPC功能,用於彈性網卡的安全性群組ID。一般地,如果使用者有ECS可以訪問目標資料來源,那麼可以直接使用該ECS的安全性群組ID。

      spark.dla.eni.extra.hosts

      需要額外傳入的IP和Host的映射關係,以便Spark能正確解析使用者資料來源中的網域名稱資訊。如串連使用者的Hive資料來源,就需要傳入此參數。

      重要

      IP和網域名稱之間用空格隔開。多個IP和網域名稱用逗號隔開,如"ip0 master0, ip1 master1"。

    • Spark SQL連結DLA中繼資料相關參數:

      參數名稱

      預設值

      參數說明

      spark.sql.hive.metastore.version

      1.2.1

      用於指定Hive MetaStore的版本,DLA Spark擴充了社區版該參數的可取值,當設定為dla時,使用者即可使用Spark SQL訪問DLA中繼資料。

    • PySpark相關參數:

      參數名稱

      預設值

      參數說明

      spark.kubernetes.pyspark.pythonVersion

      2

      DLA Spark使用的Python版本,可取值為2和3。2代表使用Python2,3代表使用Python3。

    • 作業重試相關參數:

      參數名稱

      預設值

      參數說明

      樣本

      spark.dla.job.maxAttempts

      1

      作業最大嘗試次數,預設為1,代表作業不支援重試。

      說明

      取值範圍為[1, 9999]。如果作業成功則不再繼續嘗試,如果作業失敗,且該值大於1,會自動進行下一次嘗試。

      假設spark.dla.job.maxAttempts=3,則這個作業最多嘗試3次。

      spark.dla.job.attemptFailuresValidityInterval

      -1

      作業嘗試追蹤的有效時間間隔,預設值為-1,代表未啟用作業嘗試追蹤。

      重要
      • 如果作業嘗試結束時間距離目前時間已經超過了指定的時間間隔,則該次嘗試不會被計入失敗的次數。

      • 值如果設定的過小,很容易導致錯誤的作業被無限重試,因此預設情況下不建議設定該值。

      • 值可以帶單位,支援的單位有:

        • ms:毫秒,預設單位。

        • m:分鐘。

        • h: 小時。

        • d:天。

      假設spark.dla.job.attemptFailuresValidityInterval=30m,目前時間是12:40,已存在JobAttempt0的結束時間為12:00,JobAttempt1的結束時間為12:30,JobAttempt2的結束時間為12:35,則JobAttempt0不被計入嘗試次數,這個作業的有效嘗試只有JobAttempt1和JobAttempt2,總嘗試計數為2。

    • 資源配置相關參數:

      參數名稱

      預設值

      參數說明

      spark.dla.driver.cpu-vcores-ratio

      1

      Driver虛擬Core實際CPU Core之間的比例。

      假設Driver是Medium規格(2C8G),本參數值設定為2,那麼Driver進程可以按照4個Core進行並發控制,相當於spark.driver.cores=4。

      spark.dla.executor.cpu-vcores-ratio

      1

      Executor虛擬Core實際CPU Core之間的比例。當單個Task的CPU使用率比較低時,可以通過該配置,提升CPU利用效率。

      假設Executor是Medium規格(2C8G),本參數值設定為2,那麼Executor進程可以按照4個Core進行並發控制,也就是同時調度4個並發任務,相當於spark.executor.cores=4。

    • 監控相關參數:

      參數名稱

      預設值

      參數說明

      spark.dla.monitor.enabled

      true

      作業層級監控開關,預設開啟。

      當設定為false後將不採集當前作業的監控資料 。