3
在開發過程中,我一直在「客戶端」模式下運行我的spark工作。我使用「--file」與執行程序共享配置文件。驅動程序在本地讀取配置文件。現在我想以「集羣」模式部署作業。我現在無法與驅動程序共享配置文件。在集羣模式下使用spark-submit共享配置文件
例如,我將配置文件名稱作爲extraJavaOptions傳遞給驅動程序和執行程序。我在讀使用SparkFiles.get()文件
val configFile = org.apache.spark.SparkFiles.get(System.getProperty("config.file.name"))
這非常適用於執行者,但失敗的驅動程序。我認爲這些文件只與執行程序共享,而不與驅動程序運行的容器共享。 一種選擇是將配置文件保存在S3中。我想檢查這是否可以使用spark-submit來實現。
> spark-submit --deploy-mode cluster --master yarn --driver-cores 2
> --driver-memory 4g --num-executors 4 --executor-cores 4 --executor-memory 10g \
> --files /home/hadoop/Streaming.conf,/home/hadoop/log4j.properties \
> --conf **spark.driver.extraJavaOptions**="-Dlog4j.configuration=log4j.properties
> -Dconfig.file.name=Streaming.conf" \
> --conf **spark.executor.extraJavaOptions**="-Dlog4j.configuration=log4j.properties
> -Dconfig.file.name=Streaming.conf" \
> --class ....
感謝您的迴應! 我已經有另一種格式的配置文件(typesafe配置)。保持配置組織而不是將它們作爲KV對放在文件中有幾個優點。 沒有辦法讓我的配置文件與驅動程序共享嗎? – Cheeko
@Cheeko:你是什麼意思分享conf文件到驅動程序? conf文件中有什麼?同樣,如果你可以閱讀執行者,爲什麼不讀你的驅動程序?讀取驅動程序中的相同內容並將其作爲廣播變量傳遞給執行程序..因此,您可以在兩個位置使用它。 – Shankar
配置文件不在所有節點都可訪問的位置。所以我使用spark-submit和--files將文件傳遞給所有執行者。它看起來像 - 文件沒有傳遞給驅動程序,該驅動程序以「集羣」模式運行另一個節點。 – Cheeko