使用Spark typesafe配置提交应用程序属性文件

时间:2018-11-13 22:53:26

标签: scala apache-spark typesafe-config

请,我需要您的帮助,我正在尝试使用typesafe config为我的spark应用程序提交外部配置文件。

我正在像这样在我的应用程序代码中加载application.conf文件:

  lazy val conf = ConfigFactory.load()

文件内容

  ingestion{
  process {
    value = "sas"
  }
  sas {
    origin{
      value = "/route"
    }
    destination{
      value = "/route"
    }
    extension{
      value = ".sas7bdat"
    }
    file{
      value = "mytable"
    }
    month{
      value = "201010,201011"
    }
    table{
      value = "tbl"
    }
  }
}

我的火花提交是

spark2-submit --class com.antonio.Main --master yarn --deploy-mode client --driver-memory 10G --driver-cores 8 --executor-memory 13G --executor-cores 4 --num-executors 10 --verbose  --files properties.conf /home/user/ingestion-1.0-SNAPSHOT-jar-with-dependencies.jar --files application.conf

但是由于某些原因,我收到了

com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'ingestion'

一切看起来都正确配置了?我错过了什么吗?

谢谢

安东尼奥

1 个答案:

答案 0 :(得分:2)

默认情况下,application.conf必须存在于类路径的根目录下,ConfigFactory.load()才能找到它。另外,您可以通过系统属性修改在application.conf文件中的查找位置。因此,您的选择如下。

第一种选择是,将作业的根目录添加到classpath:

spark2-submit ... \
    --conf spark.driver.extraClassPath=./  \
    --conf spark.executor.extraClassPath=./  \    // if you need to load config at executors
    ...

保持--files选项不变。请注意,如果您在客户端模式下运行作业,则必须将正确的路径传递到application.conf选项在驱动程序计算机上的位置spark.driver.extraClassPath

第二种选择是(我认为这是更好的选择),您可以使用config.file系统属性来影响ConfigFactory.load()在哪里寻找配置文件:

spark2-submit ... \
    --conf spark.driver.extraJavaOptions=-Dconfig.file=./application.conf \
    --conf spark.executor.extraJavaOptions=-Dconfig.file=./application.conf \
    ...

关于在执行程序上加载配置并保留--files选项的说明也适用于此。