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 | 否 |
| Spark任務傳入的參數,多個參數之間以英文逗號(,)分隔。 |
name | 否 |
| Spark任務名稱。 |
file | Python/Java/Scala應用必填 |
| Spark任務主檔案的儲存位置,可以是入口類所在的JAR包或者Python的入口執行檔案。 說明 Spark任務主檔案目前只支援儲存在OSS中。 |
className | Java/Scala應用必填 |
| Java或者Scala程式入口類。如果是Python則不需要指定。 |
sqls | SQL應用必填 |
| 本關鍵字是區別於社區Spark的DLA平台自研功能,允許使用者不提交JAR包和Python檔案,直接提交SQL離線作業。該關鍵字跟file, className, args關鍵字不能同時使用。使用者可以在一個作業中指定多條SQL語句,中間以英文逗號(,)隔開。多條SQL語句按照指定的順序依次執行。 |
jars | 否 |
| Spark任務依賴的JAR包,多個JAR包之間以英文逗號(,)分隔。JAR包在作業運行時會被加入到Driver和Executor JVM的ClassPath裡面。 說明 Spark任務所依賴的所有JAR包須儲存在OSS中。 |
files | 否 |
| Spark任務依賴的檔案資源,檔案會被下載到Driver和Executor進程的當前執行目錄下。檔案可以指定別名,比如 說明
|
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應用可選 |
| PySpark依賴的Python檔案,尾碼可以是ZIP、PY和EGG。如果依賴多個Python檔案,建議使用者使用ZIP或者EGG檔案包。這些檔案可以直接在Python代碼中以module的方式引用。多個檔案包中間使用英文逗號(,)分隔。 說明 Spark任務所依賴的所有Python檔案須儲存在OSS中。 |
conf | 否 |
| 與開源Spark中的配置項相同,參數格式為 若不填寫conf,系統使用建立虛擬叢集時設定的預設值。 |
DLA Spark 配置項
DLA Spark配置項跟社區Spark中的配置項基本保持一致,本章節將對其中不一致的地方以及DLA Serverless Spark平台提供的參數進行說明。
與社區Spark不一致的地方
指定Driver和Executor資源大小。
參數名稱
使用說明
對應社區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庫解壓。
參數名稱
預設值
參數說明
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後將不採集當前作業的監控資料 。