2013-01-07 38 views
6

如何控制hadoop中的日志功能? Hadoop使用默认的log4j.properties文件来控制日志。我的用例是控制我的类生成的日志。控制hadoop中的日志功能

Hadoop守护进程像JobTracker的的TaskTracker的NameNode的DataNode守护进程使用log4j.properties文件从各自的主机节点的hadoop-conf-directory。 rootLogger设置为“信息,控制台”,其将级别为信息的所有消息记录到控制台。

我使用Oozie Workflow触发hadoop作业。我尝试通过设置-Dlog4j.configuration=path/to/log4j.properties系统属性将我的自定义log4j.properties文件传递给作业,但它不起作用。尽管如此,它仍然需要使用默认的log4j属性。

我不应该触摸默认的log4j.properties文件。

我正在使用Oozie-v3.1.3-incubating,hadoop-v0.20和cloudera CDH-v4.0.1。

如何覆盖默认的log4j.properties文件?或 如何控制我的课程日志?

回答

10

您试图用自己的Log4J文件实现什么?我问,因为日志分布在集群中,但是通过将日志记录到rootLogger,您应该能够通过作业跟踪器查看它们(通过钻取作业任务尝试)。

如果您想使用滚动文件,那么稍后您很难再检索这些文件(因为它们分布在任务节点上)。

如果你想动态设置日志级别,这应该是很简单的:

public static Logger log = Logger.getLogger(MyMapper.class); 

@Override 
protected void setup(Context context) throws IOException, 
     InterruptedException { 
    log.setLevel(Level.WARN); 
} 

如果你想添加自己追加程序,那么你应该能够以编程方式做到这一点(见本SO Question)在上面的设置方法中。

+0

感谢您的回复克里斯:-) 这可以帮助我很多。 – Suresh

+0

是的,这很有帮助..谢谢 –