代码之家  ›  专栏  ›  技术社区  ›  Atais

传递系统属性以触发从类路径或自定义路径提交和读取文件

  •  10
  • Atais  · 技术社区  · 9 年前

    我最近发现 a way to use logback instead of log4j spark-submit ). 然而,还有最后一块不见了。

    问题是Spark努力不让自己看到 logback.xml 类路径中的设置。我已经找到了在本地执行期间加载它的方法:

    到目前为止我拥有的

    基本上,检查系统属性 logback.configurationFile logback.xml 从我的 /src/main/resources/

    // the same as default: https://logback.qos.ch/manual/configuration.html
    private val LogbackLocation = Option(System.getProperty("logback.configurationFile"))
    // add some default logback.xml to your /src/main/resources
    private lazy val defaultLogbackConf = getClass.getResource("/logback.xml").getPath
    
    private def getLogbackConfigPath = {
       val path = LogbackLocation.map(new File(_).getPath).getOrElse(defaultLogbackConf)
       logger.info(s"Loading logging configuration from: $path")
       path
    }
    

    然后当我初始化SparkContext时。。。

    val sc = SparkContext.getOrCreate(conf)
    sc.addFile(getLogbackConfigPath)
    

    我可以确认它在本地有效。

    玩弄

    spark-submit \
      ...
      --master yarn \
      --class com.company.Main\
      /path/to/my/application-fat.jar \
      param1 param2 
    

    Exception in thread "main" java.io.FileNotFoundException: Added file file:/path/to/my/application-fat.jar!/logback.xml does not exist
    

    我认为这是胡说八道,因为首先应用程序会找到文件(根据我的代码)

    getClass.getResource("/logback.xml").getPath
    

    sc.addFile(getLogbackConfigPath)
    

    原来…哇!那里没有文件!?搞什么鬼!?为什么它在jar中找不到文件。很明显,它就在那里,我做到了 检查过了。

    spark提交

    所以我想,好的。我会传递我的文件,因为我可以指定系统属性。我把 application-fat.jar 以及:

    spark-submit \
      ...
      --conf spark.driver.extraJavaOptions="-Dlogback.configurationFile=/path/to/my/logback.xml" \
      --conf spark.executor.extraJavaOptions="-Dlogback.configurationFile=/path/to/my/logback.xml" \
      --master yarn \
      --class com.company.Main\
      /path/to/my/application-fat.jar \
      param1 param2 
    

    我得到了与上面相同的错误。所以我的设置完全被忽略了!为什么?如何指定

    -Dlogback.configurationFile
    

    谢谢

    1 回复  |  直到 6 年前
        1
  •  18
  •   Atais    9 年前

    1、解决 java.io.FileNotFoundException

    可能无法解决 .

    仅仅 SparkContext.addFile zip 或者类似的。

    好的

    2、传球 -Dlogback.configurationFile

    因为我正在使用 --master yarn 参数,但我没有指定 --deploy-mode 到 cluster client

    阅读 https://spark.apache.org/docs/1.6.1/configuration.html#application-properties

    spark.driver.extraJavaOptions

    所以通过这个设置 --driver-java-options 工作:

    spark-submit \
      ...
      --driver-java-options "-Dlogback.configurationFile=/path/to/my/logback.xml" \
      --master yarn \
      --class com.company.Main\
      /path/to/my/application-fat.jar \
      param1 param2 
    

    --驱动程序java选项

    与…对比 --conf 多个参数 作为一个参数传递,例如:

    --driver-java-options "-Dlogback.configurationFile=/path/to/my/logback.xml -Dother.setting=value" \
    

    以及以下内容 不起作用

    --driver-java-options "-Dlogback.configurationFile=/path/to/my/logback.xml" \
    --driver-java-options "-Dother.setting=value" \
    
    推荐文章