全部產品
Search
文件中心

AnalyticDB:Spark應用配置參數說明

更新時間:Jul 16, 2026

AnalyticDB for MySQLSpark配置參數跟開源Spark中的配置參數基本一致。本文介紹AnalyticDB for MySQL與開源Spark用法不一致的配置參數。

使用說明

Spark應用配置參數用於配置和調整Spark應用程式的行為和效能。使用不同的Spark開發工具,應用配置參數的格式不同。

開發工具

配置參數格式

配置參數樣本

SQL開發編輯器

set key=value;

set spark.sql.hive.metastore.version=adb;

Spark Jar開發編輯器

"key": "value"

"spark.sql.hive.metastore.version":"adb"

Notebook開發編輯器

"key": "value"

"spark.sql.hive.metastore.version":"adb"

spark-submit命令列工具

key=value

spark.sql.hive.metastore.version=adb

指定Driver和Executor資源

參數名稱

是否必填

預設值

參數說明

對應開源Spark參數名稱

spark.adb.acuPerApp

否

無

單個Spark作業執行時所使用的ACU,取值範圍為[2,Job型資源群組計算最大資源]。

配置該參數後,系統會自動計算並配置Spark Driver規格、Spark Executor規格和Spark Executor節點個數。

點擊查看spark.adb.acuPerApp的配置策略

  • 同時配置spark.adb.acuPerApp和其他所有資源參數(包括spark.driver.resourceSpec、spark.executor.resourceSpec和spark.executor.instances)時,spark.adb.acuPerApp無效,其他資源參數取值不變。

  • 只配置spark.adb.acuPerApp時,spark.adb.acuPerApp有效,其他所有資源參數將根據spark.adb.acuPerApp自動計算並配置。

  • 在其他配置組合中,spark.adb.acuPerApp有效,同時會根據此參數自動計算未明確配置的資源參數(spark.driver.resourceSpec、spark.executor.resourceSpec和spark.executor.instances),而已經明確配置的參數取值保持不變。

無

spark.driver.resourceSpec

是

medium

Spark Driver的資源規格。不同型號的取值對應不同的規格,詳情請參見Spark資源規格列表的型號列。

重要

提交Spark應用時,可使用開源Spark參數,且取值需為Spark資源規格列表中的核心數和記憶體。

例如CONF spark.driver.resourceSpec = c.small;,則Spark Driver的資源規格為1核2 GB。

spark.driver.cores及spark.driver.memory

spark.executor.resourceSpec

是

medium

Spark Executor的資源規格。不同型號的取值對應不同的規格,詳情請參見Spark資源規格列表的型號列。

重要

提交Spark應用時,可使用開源Spark參數,且取值需為Spark資源規格列表中的核心數和記憶體。

例如CONF spark.executor.resourceSpec = c.small;,則Spark Executor的資源規格為1核2 GB。

spark.executor.cores及spark.executor.memory

spark.executor.instances

否

Job型資源群組計算最大資源/5

啟動的Spark Executor節點個數。

spark.executor.instances

spark.adb.driverDiskSize

否

無

在Spark Driver節點中掛載的額外磁碟容量, 應用於業務上需要較大磁碟空間的情境。預設掛載目錄為/user_data_dir。

取值範圍為(0,100],單位為GiB,例如:spark.adb.driverDiskSize=50Gi,表示將Spark Driver節點中掛載的額外磁碟容量設定為50 GiB。

無

spark.adb.executorDiskSize

否

無

在Spark Executor節點中掛載的額外磁碟容量, 應用於Shuffle資料寫入。預設掛載目錄為/shuffle_volume。

取值範圍為(0,100],單位為GiB,例如:spark.adb.executorDiskSize=50Gi,表示將Spark Executor節點中掛載的額外磁碟容量設定為50 GiB。

無

Spark資源規格列表

重要

執行Spark作業時,既可以使用預留資源,也可以使用彈性資源。如果使用Job型資源群組的按需彈性資源執行Spark作業,會根據Spark資源規格以及資源規格的CPU記憶體比計算使用的ACU數量,具體計算方法如下。

  • CPU記憶體比為1:2,使用的ACU數量=Spark資源規格核心數*0.8。

  • CPU記憶體比為1:4,使用的ACU數量=Spark資源規格核心數*1。

  • CPU記憶體比為1:8,使用的ACU數量=Spark資源規格核心數*1.5。

按需彈性資源的計費價格,詳情請參見湖倉版產品定價。

表 1. Spark資源規格列表

型號(Type)

規格

使用的ACU數量

CPU(Core)

記憶體(GB)

磁碟空間1(GB)

c.small

1

2

20

0.8

small

1

4

20

1

m.small

1

8

20

1.5

c.medium

2

4

20

1.6

medium

2

8

20

2

m.medium

2

16

20

3

c.large

4

8

20

3.2

large

4

16

20

4

m.large

4

32

20

6

c.xlarge

8

16

20

6.4

xlarge

8

32

20

8

m.xlarge

8

64

20

12

c.2xlarge

16

32

20

12.8

2xlarge

16

64

20

16

m.2xlarge

16

128

20

24

m.4xlarge

32

256

20

48

m.8xlarge

64

512

20

96

說明

1磁碟空間:預估會有1%左右的系統佔用,您可用的空間大小可能不足20 GB。

樣本

為Spark作業分配32個Executor,每個Executor的規格為 medium(即2核8 GB),每個Driver的規格為small(即1核4 GB),此時整個作業最多可分配總計65 ACU的計算資源。

{
   "spark.driver.resourceSpec":"small",
   "spark.executor.resourceSpec":"medium",
   "spark.executor.instances":"32",
   "spark.adb.executorDiskSize":"100Gi"
}

指定Spark作業優先順序

參數名稱

是否必填

預設值

參數說明

spark.adb.priority

否

NORMAL

指定Spark作業的優先順序。當因資源不足導致Spark作業排隊執行時,等待隊列中優先順序更高的Spark作業優先擷取運行資源,從而保障其能更早進入執行狀態。取值說明:

  • HIGH:高優先順序。

  • NORMAL:一般優先順序。

  • LOW:低優先順序。

  • LOWEST:最低優先順序。

重要

建議設定Streaming類(長期啟動並執行流作業)Spark作業的優先順序為HIGH。

串連中繼資料服務

參數名稱

是否必填

預設值

參數說明

spark.sql.catalogImplementation

否

  • Spark SQL類型作業的預設值為:hive。

  • 非Spark SQL類型作業的預設值:in-memory。

指定串連中繼資料服務的類型,支援如下配置:

  • hive:串連Spark內建的Hive MetaStore中的中繼資料資訊。

  • in-memory:串連臨時目錄中的中繼資料資訊。

spark.sql.hive.metastore.version

否

  • Spark SQL類型作業的預設值:adb。

  • 非Spark SQL類型作業的預設值:<hive_version>。

指定採用中繼資料服務版本,支援如下配置:

  • adb:串連AnalyticDB for MySQL中的中繼資料資訊。

  • <hive_version>:指定Hive MetaStore的版本。

說明

樣本

  • 串連AnalyticDB for MySQL中的中繼資料資訊,配置如下:

    spark.sql.hive.metastore.version=adb;
  • 串連Spark內建的Hive MetaStore中的中繼資料資訊,配置如下:

    spark.sql.catalogImplementation=hive;
    spark.sql.hive.metastore.version=2.1.3;
  • 串連臨時目錄中的中繼資料資訊,配置如下:

    spark.sql.catalogImplementation=in-memory;

配置Spark UI

參數名稱

是否必填

預設值

參數說明

spark.app.log.rootPath

否

oss://<aliyun-oa-adb-spark-阿里雲帳號ID-oss-可用性區域ID>/<叢集ID>/<Spark應用ID>

儲存AnalyticDB for MySQLSpark作業日誌及Linux作業系統輸出內容的路徑。

預設OSS路徑Spark應用ID的檔案夾下儲存的內容如下:

  • 名稱為Spark應用ID-000X的檔案儲存體用於Spark UI渲染的Spark Event日誌。

  • 名稱為driver和數位檔案夾儲存對應的節點日誌。

  • 名稱為stdout和stderr的檔案夾儲存Linux作業系統的輸出內容。

spark.adb.event.logUploadDuration

否

false

是否記錄EventLog上傳時消耗的時間。

spark.adb.buffer.maxNumEvents

否

1000

Driver內部緩衝Event的最大數量。

spark.adb.payload.maxNumEvents

否

10000

一次上傳的Event到OSS的最大數量。

spark.adb.event.pollingIntervalSecs

否

0.5

Event上傳到OSS時,兩次上傳之間的時間間隔,單位為秒。例如:設定為每隔0.5秒上傳一次。

spark.adb.event.maxPollingIntervalSecs

否

60

重新上傳Event到OSS需要等待的最大時間間隔。單位為秒。如果上傳失敗需要重新上傳,兩次上傳的時間間隔會大於spark.adb.event.pollingIntervalSecs,但時間間隔最大不會超過spark.adb.event.maxPollingIntervalSecs。

spark.adb.event.maxWaitOnEndSecs

否

10

Event上傳到OSS的最大等待時間,單位為秒。最大等待時間為開始上傳到完成上傳的時間間隔。超過最大等待時間會重新上傳。

spark.adb.event.waitForPendingPayloadsSleepIntervalSecs

否

1

重新上傳Event完成的最大時間,單位為秒。在超過 spark.adb.event.maxWaitOnEndSecs的時間後未完成上傳,重新上傳需要等待的時間。

spark.adb.eventLog.rolling.maxFileSize

否

209715200

EventLog在OSS隱藏檔的切片大小,單位為 byte。EventLog在OSS上是多個檔案儲存體,例如 Eventlog.0、Eventlog.1,可控制Eventlog.0、Eventlog.1檔案的大小。

為RAM使用者授權

參數名稱

是否必填

預設值

參數說明

spark.adb.roleArn

否

無

在RAM系統中授予提交Spark應用的RAM使用者的角色ARN,詳情請參見RAM角色概覽。RAM使用者提交應用時,需要填寫該參數,阿里雲帳號無需填寫該參數。

說明

如果已在控制台為RAM使用者進行了快速授權操作,則無需再通過配置參數為該RAM使用者授權。詳情請參見帳號授權。

內建資料來源連接器

參數名稱

是否必填

預設值

參數說明

spark.adb.connectors

否

無

啟用AnalyticDB for MySQLSpark內建的連接器,連接器名稱以逗號分隔,目前可選的連接器有oss、hudi、delta、adb、odps、external_hive、jindo、default。

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

否

false

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

跨VPC訪問和串連資料來源

參數名稱

是否必填

預設值

參數說明

spark.adb.eni.enabled

否

false

是否開啟ENI訪問的開關。

如果是通過外表訪問其他外部資料源,則需要開啟ENI訪問開關。取值說明:

  • true:開啟

  • false:關閉

spark.adb.eni.vswitchId

否

無

彈性網卡的交換器ID。

如果是從ECS通過VPC網路連接AnalyticDB for MySQL,需要配置VPC網路的交換器ID。

說明

當配置了開啟VPC網路時,需要同時開啟ENI訪問,即配置spark.adb.eni.enabled為true。

spark.adb.eni.securityGroupId

否

無

彈性網卡的安全性群組ID。

如果是從ECS通過VPC網路連接AnalyticDB for MySQL,需配置安全性群組ID。

說明

當配置了開啟VPC網路時,需要同時開啟ENI訪問,即配置spark.adb.eni.enabled為true。

spark.adb.eni.extraHosts

否

無

需要額外傳入的IP和Host的映射關係,以便Spark能正確解析資料來源中的Host。如串連自建的Hive資料來源,則需要傳入此參數。

說明
  • IP和Host之間用空格分隔。多個IP和網域名稱用英文逗號(,)分隔,如ip0 master0,ip1 master1。

  • 當配置了串連資料來源時,需要同時開啟ENI網路,即配置spark.adb.eni.enabled為true。

spark.adb.eni.adbHostAlias.enabled

否

false

是否開啟自動將AnalyticDB for MySQL服務所需要的網域名稱解析資訊寫入到網域名稱映射表中。取值說明:

  • true:開啟。

  • false:關閉。

在通過ENI串連EMR Hive讀寫資料時,需要開啟。

應用重試

參數名稱

是否必填

預設值

參數說明

spark.adb.maxAttempts

否

1

最大嘗試次數,預設值為1,代表不需要重試。

假設配置為3,則這個應用在一個滑動視窗期時間內最多嘗試3次。

spark.adb.attemptFailuresValidityInterval

否

Integer.MAX

重試計數的滑動視窗時間,單位:秒(s)。

假設配置為6000,那麼當一次重試失敗後,系統會計算過去6000s共進行了多少次重試,如果重試次數少於maxAttempts的配置值,則會繼續重試。

Executor調度逾時自動終止(Scheduling Watchdog)

當Executor Pod因底層資源不足(如ECI庫存耗盡、資源配額超限、節點親和性無法滿足等)長時間處於Pending狀態時,作業會持續等待,既佔用Driver資源,也阻塞後續調度。開啟該功能後,當不可調度的Executor佔比與等待時間長度同時達到設定閾值,系統將自動判定作業失敗並釋放資源,實現快速失敗(Fail Fast)。

使用情境

該功能適用於在共用叢集中運行大量Spark作業,且希望在資源不足時作業儘快失敗、而非無限等待的情境。典型情境如下:

  • ECI資源不足:使用阿里雲Elastic Container Instance運行Executor時,底層規格庫存不足,導致Pod長時間處於Pending狀態。

  • 叢集資源配額超限:命名空間或資源群組的CPU、記憶體配額已滿,新的Executor無法調度。

  • 批量作業快速重試:希望作業在資源不可用時儘快失敗,由上層調度系統(如Airflow)決定重試策略。

配置方法

提交Spark作業時,通過配置以下參數啟用並調整Watchdog的行為。

參數名稱

是否必填

預設值

參數說明

spark.adb.terminateOnPending.enabled

啟用該功能時必填

false

是否為該作業啟用Executor調度逾時自動終止。取值:

  • true:啟用。

  • false(預設值):不啟用。

預設關閉。設定為true後,本功能及相關參數方才生效。

spark.adb.terminateOnPending.timeoutSec

否

610

Executor Pod持續處於Pending狀態的容忍時間,單位為秒。從Executor Pod首次被檢測到不可調度時開始計時,當等待時間長度超過該值、且同時滿足spark.adb.terminateOnPending.executorRatio條件時,觸發作業終止。

建議取值:610~900。

spark.adb.terminateOnPending.executorRatio

否

0.5

觸發終止的不可調度Executor佔比閾值,取值範圍為(0,1.0]。佔比的計算方式為:不可調度Executor數量/期望Executor總數。當佔比達到該值、且Pending時間長度超過spark.adb.terminateOnPending.timeoutSec時,觸發作業終止。

取值越小,觸發越靈敏;取值越大,觸發越寬鬆:

  • 0.3:當30%的Executor不可調度時即觸發,適合對延遲敏感的作業。

  • 0.5(預設值):半數Executor不可調度時觸發。

  • 0.8~1.0:大部分或全部Executor不可調度時才觸發,適合資源動態波動的環境。

其中,期望Executor總數按以下優先順序取值:

  1. spark.executor.instances(靜態分配)。

  2. spark.dynamicAllocation.initialExecutors(動態分配的初始值)。

  3. spark.dynamicAllocation.maxExecutors(動態分配的最大值)。

  4. 以上參數均未配置時,取當前不可調度的Pod數量。

重要

spark.adb.terminateOnPending.executorRatio和spark.adb.terminateOnPending.timeoutSec必須同時滿足才會觸發終止。僅等待逾時但佔比未達標,或佔比達標但等待時間長度不足,都不會觸發。

配置樣本如下:為作業啟用調度逾時自動終止,當半數Executor持續不可調度超過300秒時終止作業。

{
   "spark.adb.terminateOnPending.enabled":"true",
   "spark.adb.terminateOnPending.timeoutSec":"300",
   "spark.adb.terminateOnPending.executorRatio":"0.5"
}

作業失敗後的表現

觸發終止後,作業表現如下:

  • 作業狀態:SparkApplication先進入FailingState,隨後變為FailedState。

  • 錯誤資訊:status.appState.errorMessage中包含結構化的故障診斷資訊。

  • Driver Pod:被主動刪除以釋放資源。

錯誤資訊樣本如下:

[ResourceQuotaExceeded] executors unschedulable: 5/10 (50%) for 5m12s; threshold ratio≥50%, age≥5m0s
denom=10 (spec.executor.instances), distinct reasons=1, oldest pod=my-job-exec-3 (pending since 2026-06-01T10:16:34Z)
scheduler reason: Unschedulable
scheduler message: 0/1279 nodes are available: quota not enough, quotaName: amv-x

錯誤資訊開頭方括弧內標識了系統自動分類的故障原因。各分類的含義及處理建議如下:

故障分類

含義

處理建議

ECIPendingTimeout

ECI Pod超過最大Pending時間長度。

檢查ECI規格庫存,或切換ECI規格。

ResourceQuotaExceeded

資源配額不足。

聯絡管理員擴容配額,或減少作業並發。

InsufficientClusterResources

叢集CPU或記憶體不足。

等待資源釋放,或擴容叢集。

說明

Watchdog僅將作業標記為失敗,後續是否重試由作業的restartPolicy控制,與作業正常失敗時的行為一致。關於應用重試,請參見本文應用重試。

指定Spark作業的運行環境

使用Virtual Environments打包Python環境,提交Spark作業時需配置以下參數。

參數名稱

是否必填

預設值

參數說明

spark.pyspark.python

否

無

指定要使用的Python解譯器的本地路徑。

指定Spark版本

參數名稱

是否必填

預設值

參數說明

spark.adb.version

否

3.2

指定Spark的版本。取值:

  • 2.4

  • 3.2

  • 3.3

  • 3.5

  • 4.0

高效能向量化執行引擎

參數名稱

是否必填

預設值

參數說明

spark.adb.native.enabled

否

false

是否開啟高效能向量化執行引擎執行作業,AnalyticDB Spark內建高效能向量化執行引擎,與開源Spark完全相容,您無需對現有代碼做任何修改即可開啟。

湖儲存加速

參數名稱

是否必填

預設值

參數說明

spark.adb.lakecache.enabled

否

false

是否開啟湖儲存加速(LakeCache)。

AnalyticDB for MySQL不支援的配置參數

AnalyticDB for MySQLSpark暫不支援以下開源Spark的配置參數。這些配置參數對於AnalyticDB for MySQLSpark不會生效。

Useless options(these options will be ignored):
  --deploy-mode
  --master
  --packages, please use `--jars` instead
  --exclude-packages
  --proxy-user
  --repositories
  --keytab
  --principal
  --queue
  --total-executor-cores
  --driver-library-path
  --driver-class-path
  --supervise
  -S,--silent
  -i <filename>