为 EMR 集群中的 apache spark 作业自定义 log4j

Customize log4j for apache spark job in EMR cluster

我有一个关于使用 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 集群中不起作用。有人可以帮忙吗?
非常感谢

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

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

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

假设你运行你的工作是spark-submit,你可以执行如下:

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