2017-09-13 50 views
0

我有一个关于在Java作业中使用log4j及其配置文件log4j.properties的问题。在EMR集群中针对apache spark任务自定义log4j

我已将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集群不起作用。任何人都可以帮忙吗?
非常感谢

+0

你执行的遗嘱执行人或驱动程序代码?您还可以使用sparkContext直接更改日志级别。 –

+0

您可以直接使用sparkcontext向我展示关于更改日志级别的一些示例吗?因为我的火花应用程序运行在EMR集群中,它由驱动程序执行的main()函数 – user2953788

+0

'sparkContext.setLogLevel(“DEBUG”)' –

回答

0

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

但是,如果你想使用一个特定的属性文件,你可以做到以下几点:

  • 将您的log4j.properties文件的某处集群
  • 上运行一个配置参数你的工作,指点到属性文件。

假设你运行作业火花提交,您可以执行如下:

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