为 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
我有一个关于使用 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