【问题标题】:Customize log4j for apache spark job in EMR cluster为 EMR 集群中的 apache spark 作业自定义 log4j
【发布时间】:2018-02-22 04:54:49
【问题描述】:

我有一个关于使用log4j 的问题,它是Java 中用于Spark 作业的配置文件log4j.properties

我已将log4j.properties 与我的 Spark 作业“jar”文件一起附加,在它提交到 EMR 集群后,我的应用程序将初始化 log4j.properties 文件。

这是我的示例代码:

 public static void initializeLogger() {
            try {
                Properties logProperties = new Properties();
                logProperties.load(RddReadUtils.class.getClassLoader()
    .getResourceAsStream("resources/log4j.properties"));
                PropertyConfigurator.configure(logProperties);

            } catch (IOException e) {
                e.printStackTrace();
            }

        }

在我的本地机器上它可以工作,在 EMR 集群中不起作用。有人可以帮忙吗?
非常感谢

【问题讨论】:

  • 您是在执行程序还是驱动程序上执行此代码?您也可以直接使用 sparkContext 更改日志级别。
  • 你能告诉我一些关于直接使用 sparkcontext 更改日志级别的例子吗?因为我的spark应用运行在EMR集群中,它的main()函数是Driver执行的
  • sparkContext.setLogLevel("DEBUG")
  • 谢谢,这是个好建议。但似乎 dosnt 在 EMR 集群上工作。在独立机器上它可以工作。

标签: java apache-spark jar log4j emr


【解决方案1】:

当您在集群上运行作业时,log4j 将使用集群内配置的属性文件。这是有道理的,因为您的工作可以更加独立于环境。

但是,如果您想使用特定的属性文件,您可以执行以下操作:

  • 将 log4j.properties 文件放在集群的某个位置
  • 使用指向属性文件的配置参数运行作业。

假设你使用 spark-submit 运行你的作业,你可以执行如下:

spark-submit --driver-java-options "-Dlog4j.configuration=file:///absolute/path/to/log4j.properties" job.jar

【讨论】:

    猜你喜欢
    • 2019-08-21
    • 1970-01-01
    • 2019-05-30
    • 2018-11-13
    • 2017-05-13
    • 2019-04-19
    • 2017-10-06
    • 2017-02-13
    • 2018-10-19
    相关资源
    最近更新 更多