Sri*_*pan 8 hadoop log4j mapreduce distributed-cache
我不清楚如何在作业级别配置Hadoop MapReduce log4j.有人可以帮我回答这些问题.
1)如何从客户端计算机添加支持log4j日志记录.即我想在客户端机器上使用log4j属性文件,因此不希望干扰群集中的Hadoop log4j设置.我认为在项目/ jar中使用属性文件应该足够了,而hadoop的分布式缓存应该完成传输map-reduce jar的其余部分.
2)如何在$ HADOOP_HOME/logs/userlogs/job_/dir中将消息记录到自定义文件.
3)map reduce任务是否同时使用log4j属性文件?客户端作业提供的那个和hadoop集群中存在的那个?如果是,那么log4j.rootLogger会添加两个属性值吗?
谢谢Srivatsan Nallazhagappan
您可以直接在代码中配置 log4j。例如,您可以PropertyConfigurator.configure(properties);在映射器/减速器设置方法中调用例如。
这是存储在 hdfs 上的属性的示例:
InputStream is = fs.open(log4jPropertiesPath);
Properties properties = new Properties();
properties.load(is);
PropertyConfigurator.configure(properties);
Run Code Online (Sandbox Code Playgroud)
其中 fs 是 FileSystem 对象,log4jPropertiesPath 是 hdfs 上的路径。
这样,您还可以将日志输出到带有 job_id 的目录。例如,您可以在调用 PropertyConfigurator.configure(properties); 之前修改我们的属性。
Enumeration propertiesNames = properties.propertyNames();
while (propertiesNames.hasMoreElements()) {
String propertyKey = (String) propertiesNames.nextElement();
String propertyValue = properties.getProperty(propertyKey);
if (propertyValue.indexOf(JOB_ID_PATTERN) != -1) {
properties.setProperty(propertyKey, propertyValue.replace(JOB_ID_PATTERN, context.getJobID().toString()));
}
}
Run Code Online (Sandbox Code Playgroud)