全部產品
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.coresspark.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.coresspark.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和數位檔案夾儲存對應的節點日誌。

  • 名稱為stdoutstderr的檔案夾儲存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.executorRatiospark.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>