【问题标题】:Spark 2.1.1 with typesafeconfig带有 typesafeconfig 的 Spark 2.1.1
【发布时间】:2018-03-13 08:09:57
【问题描述】:

我正在尝试使用 typesafeconfig 为我的 spark 应用程序支持一些外部配置文件。

我正在我的应用程序代码中加载 application.conf 文件,如下所示(驱动程序):

val config = ConfigFactory.load()
val myProp = config.getString("app.property")
val df = spark.read.avro(myProp)

application.conf 如下所示:

app.propety="some value"

spark-submit 执行如下所示:

spark-submit 
        --class com.myapp.Main \
        --conf spark.shuffle.service.enabled=true \
        --conf spark.dynamicAllocation.enabled=true \
        --conf spark.dynamicAllocation.minExecutors=56 \
        --conf spark.dynamicAllocation.maxExecutors=1000 \
        --driver-class-path $HOME/conf/*.conf \
        --files $HOME/conf/application.conf \
        my-app-0.0.1-SNAPSHOT.jar

似乎它不起作用,我得到了:

Exception in thread "main" com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'app'
    at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:124)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:147)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:159)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:164)
    at com.typesafe.config.impl.SimpleConfig.getString(SimpleConfig.java:206)
    at com.paypal.cfs.fpti.Main$.main(Main.scala:42)
    at com.paypal.cfs.fpti.Main.main(Main.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:750)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

查看日志我确实看到“--files”工作,似乎是一个类路径问题......

18/03/13 01:08:30 INFO SparkContext: Added file file:/home/user/conf/application.conf at file:/home/user/conf/application.conf with timestamp 1520928510820
18/03/13 01:08:30 INFO Utils: Copying /home/user/conf/application.conf to /tmp/spark-2938fde1-fa4a-47af-8dc6-1c54b5e89d48/userFiles-c2cec57f-18c8-491d-8679-df7e7da45e05/application.conf

【问题讨论】:

  • 当我使用 --conf spark.driver.extraJavaOptions="-Dapp.property=/some/path" 时它可以工作。只是不知道如何让它从我的文件中读取

标签: apache-spark spark-dataframe hadoop2 typesafe-config


【解决方案1】:

原来我一开始就很接近答案了……这对我来说是这样的:

spark-submit \
    --class com.myapp.Main \
    --conf spark.shuffle.service.enabled=true \
    --conf spark.dynamicAllocation.enabled=true \
    --conf spark.dynamicAllocation.minExecutors=56 \
    --conf spark.dynamicAllocation.maxExecutors=1000 \
    --driver-class-path $APP_HOME/conf \
    --files $APP_HOME/conf/application.conf \
    $APP_HOME/my-app-0.0.1-SNAPSHOT.jar

那么 $APP_HOME 将包含以下内容:

conf/application.conf
my-app-0.0.1-SNAPSHOT.jar

我猜你需要确保将 application.conf 放在一个文件夹中,这就是诀窍。

【讨论】:

    【解决方案2】:

    为了指定配置文件路径,你可以将它作为应用程序参数传递,然后从主类的args变量中读取。

    这就是执行 spark-submit 命令的方式。请注意,我在应用程序 jar 之后指定了配置文件。

    spark-submit 
            --class com.myapp.Main \
            --conf spark.shuffle.service.enabled=true \
            --conf spark.dynamicAllocation.enabled=true \
            --conf spark.dynamicAllocation.minExecutors=56 \
            --conf spark.dynamicAllocation.maxExecutors=1000 \
            my-app-0.0.1-SNAPSHOT.jar $HOME/conf/application.conf
    

    然后,从args(0)中指定的路径加载配置文件:

    import com.typesafe.config.ConfigFactory
    [...]
    val dbconfig = ConfigFactory.parseFile(new File(args(0))
    

    现在您可以访问 application.conf 文件的属性了。

    val myProp = config.getString("app.property")
    

    希望对你有帮助。

    【讨论】:

    • 谢谢,但这个解决方案不是一个好的解决方案。感觉像是一种解决方法。
    猜你喜欢
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2018-06-01
    • 1970-01-01
    • 2017-07-05
    • 2019-05-25
    相关资源
    最近更新 更多