hadoop覆盖每个作业的log4j.properties

时间:2015-03-15 05:22:15

标签: java hadoop logging log4j

是否可以覆盖每个作业的log4j属性?
我有一个多步骤程序(管道),它运行一些hadoop作业,但在它之前和之后它还执行其他一些步骤。

如果我使用java命令运行我的程序(java -jar my_program.jar) 然后它运行正常,但我收到警告:
Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

如果我使用hadoop命令运行我的程序(hadoop jar my_program.jar) 然后加载默认的hadoop log4j.properties

在我的程序中,我将有关步骤执行的信息记录到特定文件中。我不需要来自hadoop map / reduce任务的日志。我需要来自我的程序的日志,因为它执行许多其他任务。

我应该担心这个警告吗? 如何使用我的自定义log4j.properties覆盖每个作业的log4j属性以保存我的管道中的日志?

我正在使用hadoop v1.0.4

编辑:
我发现在导出LD_LIBRARY_PATH后,在使用命令Unable to load native-hadoop library for your platform...运行程序时,警告java -jar my_program.jar不再出现。来源说明:
http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html
有人知道如何覆盖每个作业的log4j属性吗?

1 个答案:

答案 0 :(得分:2)

基于这个答案:https://stackoverflow.com/a/7390644/4496488
我正在使用以下代码在启动hadoop作业的主代码中加载我的自定义log4j.properties(在这种情况下,它实际上覆盖了hadoop log4j配置):

String log4jPropertiesFilePath = "path/to/my/custom/log4j.properties";
PropertyConfigurator.configure(log4jPropertiesFilePath);

它不会覆盖datanodes中的log4j属性 - 仅在程序启动hadoop作业中 - 这正是我想要的。

相关问题