遷移指南:Spark Core
- 從 Core 3.4 升級至 3.5
- 從 Core 3.3 升級到 3.4
- 從 Core 3.2 升級到 3.3
- 從 Core 3.1 升級到 3.2
- 從 Core 3.0 升級到 3.1
- 從 Core 2.4 升級到 3.0
從 Core 3.4 升級至 3.5
-
自 Spark 3.5 起,
spark.yarn.executor.failuresValidityInterval
已過時。請改用spark.executor.failuresValidityInterval
。 -
自 Spark 3.5 起,
spark.yarn.max.executor.failures
已過時。請改用spark.executor.maxNumFailures
。
從 Core 3.3 升級到 3.4
-
自 Spark 3.4 起,Spark 驅動程式將擁有
PersistentVolumnClaim
,並嘗試在未指派給執行中執行緒時重複使用。若要還原 Spark 3.4 之前的行為,您可以將spark.kubernetes.driver.ownPersistentVolumeClaim
設為false
,並將spark.kubernetes.driver.reusePersistentVolumeClaim
設為false
。 -
自 Spark 3.4 起,在未啟用混流服務的情況下,Spark 驅動程式將追蹤混流資料,並在啟用動態配置時進行追蹤。若要還原 Spark 3.4 之前的行為,您可以將
spark.dynamicAllocation.shuffleTracking.enabled
設為false
。 -
自 Spark 3.4 起,如果
spark.decommission.enabled
和spark.storage.decommission.enabled
皆為 true,Spark 將嘗試停用快取的 RDD 和混流區塊。若要還原 Spark 3.4 之前的行為,您可以將spark.storage.decommission.rddBlocks.enabled
和spark.storage.decommission.shuffleBlocks.enabled
皆設為false
。 -
自 Spark 3.4 起,如果
spark.history.store.hybridStore.enabled
為 true,Spark 將使用 RocksDB 儲存。若要還原 Spark 3.4 之前的行為,您可以將spark.history.store.hybridStore.diskBackend
設為LEVELDB
。
從 Core 3.2 升級到 3.3
- 自 Spark 3.3 起,Spark 將其 log4j 相依性從 1.x 遷移至 2.x,因為 log4j 1.x 已達使用壽命終點,且不再受到社群支援。2015 年 8 月後針對 log4j 1.x 回報的漏洞並未經過檢查,且不會修復。使用者應使用 log4j2 語法(XML、JSON、YAML 或屬性格式)重新撰寫原始 log4j 屬性檔案。Spark 會將包含在 Spark 發行版中的
conf/log4j.properties.template
重新撰寫為conf/log4j2.properties.template
,並採用 log4j2 屬性格式。
從 Core 3.1 升級到 3.2
-
自 Spark 3.2 起,
spark.scheduler.allocation.file
支援使用 Hadoop 檔案系統讀取遠端檔案,這表示如果路徑沒有架構,Spark 將尊重 Hadoop 組態來讀取它。若要還原 Spark 3.2 之前的行為,您可以為spark.scheduler.allocation.file
指定本機架構,例如file:///path/to/file
。 -
自 Spark 3.2 起,
spark.hadoopRDD.ignoreEmptySplits
預設設為true
,這表示 Spark 對於空的輸入分割不會建立空的分割區。若要還原 Spark 3.2 之前的行為,您可以將spark.hadoopRDD.ignoreEmptySplits
設為false
。 -
自 Spark 3.2 起,
spark.eventLog.compression.codec
預設設為zstd
,這表示 Spark 將不再回退使用spark.io.compression.codec
。 -
自 Spark 3.2 起,
spark.storage.replication.proactive
已預設啟用,這表示 Spark 會在執行器故障導致快取的 RDD 區塊複本遺失時嘗試補充。若要回復到 Spark 3.2 之前的行為,您可以將spark.storage.replication.proactive
設為false
。 -
在 Spark 3.2 中,
spark.launcher.childConectionTimeout
已標示為過時(錯字),但仍可使用。請改用spark.launcher.childConnectionTimeout
。 -
在 Spark 3.2 中,不再支援 Apache Mesos 作為資源管理員,且將在未來版本中移除。
-
在 Spark 3.2 中,Spark 會在應用程式自行終止時刪除 K8s 驅動程式服務資源。若要回復到 Spark 3.2 之前的行為,您可以將
spark.kubernetes.driver.service.deleteOnTermination
設為false
。
從 Core 3.0 升級到 3.1
-
在 Spark 3.0 及以下版本中,可以在執行器中建立
SparkContext
。自 Spark 3.1 起,在執行器中建立SparkContext
時會擲回例外。您可以在執行器中建立SparkContext
時,透過設定組態spark.executor.allowSparkContext
來允許此行為。 -
在 Spark 3.0 及以下版本中,Spark 會將 Hadoop 類別路徑從
yarn.application.classpath
和mapreduce.application.classpath
傳播到提交至 YARN 的 Spark 應用程式,當時 Spark 發行版內建 Hadoop。自 Spark 3.1 起,當 Spark 發行版內建 Hadoop 時,它不再進行傳播,以防止 Hadoop 群集選取到的不同傳遞相依項(例如 Guava 和 Jackson)所造成的失敗。若要回復到 Spark 3.1 之前的行為,您可以將spark.yarn.populateHadoopClasspath
設為true
。
從 Core 2.4 升級到 3.0
-
已將
org.apache.spark.ExecutorPlugin
介面和相關組態替換為org.apache.spark.api.plugin.SparkPlugin
,它新增了新的功能。使用舊介面的外掛程式必須修改才能延伸新的介面。請查看 監控 指南以取得更多詳細資訊。 -
已移除過時的
TaskContext.isRunningLocally
方法。已移除本機執行,且它總是傳回false
。 -
已移除
ShuffleWriteMetrics
中的過時方法shuffleBytesWritten
、shuffleWriteTime
和shuffleRecordsWritten
。請改用bytesWritten
、writeTime
和recordsWritten
。 -
已移除過時的
AccumulableInfo.apply
方法,因為不允許建立AccumulableInfo
。 -
已移除已棄用的累加器 v1 API,請改用 v2 API。
-
事件記錄檔將以 UTF-8 編碼寫入,而 Spark 歷史記錄伺服器將以 UTF-8 編碼重播事件記錄檔。先前 Spark 會將事件記錄檔寫入為驅動程式 JVM 程序的預設字元集,因此 Spark 2.x 的 Spark 歷史記錄伺服器需要在編碼不兼容的情況下讀取舊的事件記錄檔。
-
使用新的通訊協定來擷取混洗區塊。建議在執行 Spark 3.0 應用程式時升級外部混洗服務。您仍可透過將設定
spark.shuffle.useOldFetchProtocol
設為true
來使用舊的外部混洗服務。否則,Spark 可能會遇到錯誤訊息,例如IllegalArgumentException: Unexpected message type: <number>
。 -
獨立模式中已棄用
SPARK_WORKER_INSTANCES
。建議在一個工作器中啟動多個執行器,並在每個節點啟動一個工作器,而不是在每個節點啟動多個工作器並在每個工作器啟動一個執行器。