【问题标题】:Spark-submit throwing error from yarn-cluster mode来自纱线集群模式的 Spark-submit 抛出错误
【发布时间】:2017-08-30 23:50:36
【问题描述】:

当我们在 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

我的 Spark 代码:

 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 中运行这个命令吗?

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    yarn-client 和yarn-cluster 的区别在于yarn-client 中的驱动程序位置在运行spark-submit 命令的机器上。

    在您的情况下,配置文件的位置是 /home/cloudera/conf/omega.config,当您以 yarn-client 运行时可以找到该位置,因为驱动程序从 当前机器 运行,该机器包含此完整/路径/to/file.

    但无法在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) 来获取 worker 上下载文件的实际全路径名

    您的代码中的更改应该类似于:

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

    SparkFiles docs

    公共类SparkFiles

    解析通过 SparkContext.addFile() 添加的文件的路径。

    【讨论】:

    • 我尝试通过更改代码和 spark-submit 命令并得到以下错误 17/04/05 14:17:49 ERROR yarn.ApplicationMaster: User class throw exception: java.lang.NullPointerException java.lang.NullPointerException at org.apache.spark.SparkFiles$.getRootDirectory(SparkFiles.scala:37) at org.apache.spark.SparkFiles$.get(SparkFiles.scala:31) 17/04/05 14:17: 49 INFO yarn.ApplicationMaster: Final app status: FAILED, exitCode: 15, (reason: User class throw exception: java.lang.NullPointerException)
    • @SurenderRaja - 你能在你的代码中添加一些调试吗?打印args(0)的值,如果不为null,打印SparkFiles.get(args(0))的值?
    • 当我 println(args(0)) 然后它打印为 omega.config 。这个 NullPointer 异常正好在 SparkFiles.get(args(0)) 行抛出
    • 17/04/05 14:34:02 INFO yarn.ApplicationMaster:等待火花上下文初始化 17/04/05 14:34:02 INFO yarn.ApplicationMaster:等待火花上下文初始化.. . 17/04/05 14:34:02 错误 yarn.ApplicationMaster:用户类抛出异常:java.lang.NullPointerException java.lang.NullPointerException at org.apache.spark.SparkFiles$.getRootDirectory (SparkFiles.scala:37) at org.apache.spark.SparkFiles$.get(SparkFiles.scala:31) .添加完整错误
    • @SurenderRaja - 问题是 SparkFiles.get() 只有在初始化 spark 上下文后才能工作。
    猜你喜欢
    • 1970-01-01
    • 2016-04-18
    • 2018-10-25
    • 2015-10-22
    • 2019-01-09
    • 1970-01-01
    • 2016-04-09
    • 2016-08-23
    • 2018-10-29
    相关资源
    最近更新 更多