如何在spark yarn cluster模式下使用--properties-file选项加载额外的spark属性?

时间:2017-03-23 11:33:13

标签: scala apache-spark yarn

我在纱线群集模式下使用spark-submit运行火花作业。要在运行时提交输入和输出文件路径,我尝试加载包含输入和输出路径的属性文件。

属性文件:input.properties


    spark.myapp.input /input/path
    spark.myapp.output /output/path

我正在使用以下命令运行我的应用程序。

  `spark-submit --class Property --master yarn-cluster prop.jar --properties-file input.properties`

Scala代码:


    import org.apache.spark.SparkConf
    import org.apache.spark.SparkContext
    import java.io.FileInputStream
    import collection.JavaConversions._
    import java.util.Properties;
    object Property {
      def main(args: Array[String]) {
        val conf = new SparkConf().setAppName("myApp");
        val sparkContext = new SparkContext(conf);
        val input=sparkContext.getConf.get("spark.myapp.input")
        println(input)
        sparkContext.stop;
      }
    }

当我以本地和纱线客户端模式运行程序时,我能够访问这些属性。但是在火花提交模式下,我会超越异常。

    ERROR yarn.ApplicationMaster: User class threw exception: java.util.NoSuchElementException: spark.myapp.input

2 个答案:

答案 0 :(得分:2)

如果您使用纱线,请使用--files input.properties。我有同样的问题,它解决了我的问题。

答案 1 :(得分:0)

我使用--files--driver-class-path参数来读取在移除纱线群集上执行的驱动程序中的属性。

spark-submit \
    --class com.acme.Main \
    --master yarn \
    --deploy-mode cluster \
    --driver-memory 2g \
    --executor-memory 1g \
    --driver-class-path "./conf" \
    --files "./conf/app.properties,./conf/log4j.properties" \
    ./lib/my-app-uber.jar \
    "$@"

请注意,可以使用逗号分隔的字符串指定多个属性文件(不要忘记引号)

然后,您的驱动程序代码可以将这些属性文件作为类路径资源加载,就像它在本地运行一样。