簡體   English   中英

來自紗線群集模式的Spark-submit拋出錯誤

[英]Spark-submit throwing error from yarn-cluster mode

當我們在yarn-cluster上提交spark作業時,我們如何將配置文件傳遞給executor?

如果我將我的下面的spark-submit命令更改為--master yarn-client,那么它工作正常,我得到各自的輸出

 spark-submit\
 --files /home/cloudera/conf/omega.config \
 --class com.mdm.InitProcess \
 --master yarn-cluster \
 --num-executors 7 \
 --executor-memory 1024M  \
 /home/cloudera/Omega.jar \  
 /home/cloudera/conf/omega.config

我的火花代碼:

 object InitProcess
  {
      def main(args: Array[String]): Unit = {
           val config_loc = args(0)
           val config = ConfigFactory.parseFile(new File(config_loc ))
           val jobName =config.getString("job_name")


      .....
      }

  }

我收到以下錯誤

17/04/05 12:01:39 ERROR yarn.ApplicationMaster: User class threw exception:     com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'job_name'
com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'job_name'

有人可以幫我在--master yarn-cluster中運行這個命令嗎?

yarn-clientyarn-cluster之間的區別在於,在yarn-client ,驅動器位置在運行spark-submit命令的機器上。

在您的情況下,配置文件的位置是/home/cloudera/conf/omega.config ,當您作為yarn-client運行時可以找到它,因為驅動程序正在從保存此完整/路徑/到/的當前計算機運行文件。

但是無法在yarn-cluster模式下訪問,因為驅動程序正在其他主機上運行,​​而該主機不保存此完整/路徑/到/文件。

我建議按以下格式執行命令:

spark-submit\
 --master yarn-cluster \
 --num-executors 7 \
 --executor-memory 1024M  \
 --class com.mdm.InitProcess \
 --files /home/cloudera/conf/omega.config \
 --jar /home/cloudera/Omega.jar omega.config 

使用帶有完整路徑名的--files發送配置文件,並將其作為參數提供給jar文件名(不是完整路徑),因為文件將被下載到工作者的未知位置。

在您的代碼中,您可以使用SparkFiles.get(filename)來獲取工作服務器上下載文件實際完整路徑名

代碼中的更改應類似於:

       val config_loc = SparkFiles.get(args(0))

SparkFiles文檔

公共類SparkFiles

解析通過SparkContext.addFile()添加的文件的路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM