本文介紹Lindorm計算引擎的常用Spark配置項和配置方法。
Spark配置項
Lindorm計算引擎支持自定義常用的Spark配置項,包括資源配置項、執行配置項和監控配置項。
受限配置項
spark.master和spark.submit.deployMode為系統參數,不支持自定義。
配置項 | 說明 |
spark.master | 集群管理服務地址。 |
spark.submit.deployMode | Driver程序的部署方式。 |
資源配置項
Lindorm計算引擎基于彈性資源池提供服務,計費方式為按量付費,且在開通計算引擎后,彈性資源的上限默認為無限制。如果您需要修改彈性資源上限,請參見變配計算引擎資源。
您向Lindorm計算引擎提交的每一個作業(JDBC作業、JAR作業、Python作業等),都可以自定義資源配置項,包括資源規格配置項和資源規模配置項。
資源規格
基礎資源配置項
配置項 | 說明 | 默認值 |
spark.driver.memory | Driver堆內內存大小。單位為MB。 | 8192M |
spark.driver.memoryOverhead | Driver堆外內存大小。單位為MB。 | 8192M |
spark.kubernetes.driver.disk.size | Driver本地磁盤大小。單位為GB。 | 50 |
spark.executor.cores | 單Executor提供的計算槽位數量。 | 4 |
spark.executor.memory | 單Executor堆內內存大小。單位為MB。 | 8192M |
spark.executor.memoryOverhead | 單Executor堆外內存大小。單位為MB。 | 8192M |
spark.kubernetes.executor.disk.size | 單Executor本地磁盤大小。單位為GB。 | 50 |
高級資源配置項
配置項 | 說明 | 默認值 |
spark.{driver/executor}.resourceTag | 資源規格配置組。支持的規格:
| 無 |
spark.kubernetes.{driver/executor}.ecsModelPreference | 計算節點機型配置,與 計算引擎會按配置順序申請對應的機型,當配置的全部機型都沒有庫存時,會回退到按資源規格隨機申請有庫存機型。 | 無 |
spark.kubernetes.{driver/executor}.annotation.k8s.aliyun.com/eci-use-specs | 指定GPU的規格與型號。規格列表的詳細信息,請參見GPU實例規格。 | ecs.gn7i-c8g1.2xlarge |
spark.{driver/executor}.resource.gpu.vendor | 指定GPU的生產廠商。 說明 該參數需要與指定的GPU規格與型號對應。 | nvidia.com |
spark.{driver/executor}.resource.gpu.amount | GPU個數。 說明 GPU個數固定為1。 | 1 |
spark.{driver/executor}.resource.gpu.discoveryScript | 腳本文件所在的路徑。 說明 在啟動Spark driver/executor時會使用該腳本查詢并綁定GPU資源,且腳本文件所在的路徑固定為 | /opt/spark/examples/src/main/scripts/getGpusResources.sh |
spark.kubernetes.executor.annotation.k8s.aliyun.com/eci-use-specs | 指定Executor實例類型,擴充Executor數據盤空間,避免產生數據盤空間不足的問題。 支持的實例類型如下:
說明 | 無 |
資源規模
配置項 | 說明 | 默認值 |
spark.executor.instances | 作業申請的Executor數量。 | 2 |
spark.dynamicAllocation.enabled | 是否開啟動態資源分配。取值:
開啟動態資源分配后,計算引擎將根據任務工作負載,實時進行Executor資源申請與釋放。 | true |
spark.dynamicAllocation.minExecutors | 動態資源分配時,Executor的最小數量。 | 0 |
spark.dynamicAllocation.maxExecutors | 動態資源分配時,Executor的最大數量。 說明 Executor的最大數量與定義的Task并發量相同。 | Infinity |
spark.dynamicAllocation.executorIdleTimeout | 動態資源分配時,若Executor空閑時間超過該值,Executor資源將被釋放。單位為秒(s)。 | 600s |
執行配置項
配置項 | 說明 | 默認值 |
spark.speculation | 是否開啟推測執行功能 。取值:
如果某個Task任務執行較慢,Driver將重新提交Task任務,避免在執行時出現長尾現象。 說明 長尾現象即某些Task任務執行的時間遠大于其他Task任務的執行時間。 | true |
spark.task.maxFailures | Task任務失敗次數限制。當某一個Task任務失敗次數超過該值時,將導致整個作業執行失敗。 | 4 |
spark.dfsLog.executor.enabled | 是否將Executor日志保存至DFS。取值:
在Lindorm計算引擎服務規模較大的情況下,將該配置項的取值設置為false,可以避免日志流增大導致DFS壓力過大。 | true |
spark.jars | 提交任務依賴的JAR包路徑(OSS路徑或HDFS路徑)。 如果為OSS路徑,您需要配置對應的配置項,包括:
重要 通過JDBC方式連接計算引擎時,JAR包僅支持上傳至HDFS。 | 無 |
spark.hadoop.fs.oss.endpoint | OSS的Endpoint。獲取Endpoint,請參見公共云下OSS Region和Endpoint對照表。 | 無 |
spark.hadoop.fs.oss.accessKeyId | 阿里云賬號或RAM用戶的AccessKey ID。 如何獲取AccessKey ID和AccessKey Secret,請參見獲取AccessKey。 | 無 |
spark.hadoop.fs.oss.accessKeySecret | 阿里云賬號或RAM用戶的AccessKey Secret。 如何獲取AccessKey ID和AccessKey Secret,請參見獲取AccessKey。 | 無 |
spark.hadoop.fs.oss.impl | 訪問OSS的類。 固定值為: | 無 |
spark.default.parallelism | 非SQL任務默認的并發度,其中包括數據源的并發度和Shuffle并發度。 | 無 |
spark.sql.shuffle.partitions | SQL任務默認的Shuffle并發度。 | 200 |
監控配置項
Lindorm計算引擎支持通過自定義監控配置項,在作業日志中打印Driver和Executor的系統狀態信息監控實例運行狀態。
配置項 | 說明 | 默認值 |
spark.monitor.cmd | 作業監控命令組。多個監控命令用半角分號(;)分隔。監控方式為定時串行執行所配置的多個監控命令,將執行結果打印到作業日志中,記錄系統狀態信息。 監控命令示例:
配置語句:
重要 通過Beeline或JDBC提交作業時不支持修改該配置項。 | 無 |
spark.monitor.interval | 監控命令組執行的時間間隔。單位為秒(s)。 spark.monitor.cmd所配置的監控命令組執行的時間間隔。 | 60 |
spark.monitor.timeout | 監控命令執行的超時時間,單位為秒(s)。 如果spark.monitor.cmd所配置的監控命令組中,某一個監控命令執行時間超過該值,則直接跳過該監控命令,繼續執行其后面的監控命令,避免打印監控信息時出現阻塞。 | 2 |
開源Spark配置項
開源Spark配置項的用法,請參見Spark Configuration。
配置方法
向Lindorm計算引擎提交作業時,可以自定義資源配置項,不同的提交方式配置方法不同。
Beeline
您可以在Beeline命令行所在的Spark軟件包中,修改配置文件conf/beeline.conf
。更多信息,請參見快速入門。
配置文件示例如下:
# Endpoint of Lindorm Compute Engine, e.g. jdbc:hive2://123.456.XX.XX:10009/;?token=bb8a15-jaksdj-sdfjsd-ak****
endpoint=jdbc:hive2://ld-bp13ez23egd123****-proxy-ldps-pub.lindorm.aliyuncs.com:10009/;?token=jfjwi2453-fe39-cmkfe-afc9-01eek2j5****
# Username for connection, by default root.
user=root
# Password for connection, by default root.
password=root
# Whether to share Spark resource between different sessions, by default true.
shareResource=false
# Normal Spark configurations
spark.dynamicAllocation.enabled=true
spark.dynamicAllocation.minExecutors=3
JDBC
通過JDBC連接串設置配置項,JDBC連接地址請參見JDBC開發實踐。
例如:通過JDBC連接串設置Spark的Shuffle默認分區數為2,Executor使用的內存量為8 GB。
jdbc:hive2://${host}:${port}/;?token=${token};spark.executor.memory=8g;spark.sql.shuffle.partitions=2
JAR
通過Lindorm控制臺提交JAR作業可以根據作業內容模板,配置作業參數。具體操作,請參見通過控制臺管理作業。
通過DMS提交JAR作業時,可以在作業配置區域配置運行作業的自定義參數。具體操作,請參見通過DMS管理作業。