如何收集Hadoop用户日志?

时间:2015-01-29 21:00:07

标签: hadoop logging mapreduce

我正在运行M / R作业并在发生错误时记录错误,而不是让作业失败。只有少数错误,但作业在具有数百个节点的hadoop集群上运行。如何在不必手动打开web ui(jobtaskhistory)中的每个任务日志的情况下搜索任务日志?换句话说,如何自动搜索遍布集群的M / R任务日志,并在本地存储在每个节点中?

4 个答案:

答案 0 :(得分:2)

旁注第一:2.0.0是老发霉的(" beta"版本的2.0),你应该考虑升级到更新的堆栈(例如2.4,2.5 2.6)。 / p>

从2.0开始,Hadoop实现了所谓的"日志聚合" (虽然它不是你想的。日志只存储在HDFS上)。您可以使用大量命令行工具来获取日志并分析它们,而无需通过UI。事实上,这比UI要快得多。

查看this blog post了解详情。

不幸的是,即使使用命令行工具,也无法同时获取所有任务日志并将其传递给grep之类的东西。您必须将每个任务日志作为单独的命令。但是,这至少可以编写脚本。

Hadoop社区正在开发一种更强大的日志分析工具,它不仅可以将作业日志存储在HDFS上,还可以让您对这些日志执行搜索和其他分析。但是,这仍然是一种出路。

答案 1 :(得分:0)

这就是我们这样做的方式(大型互联网公司):我们确保只记录了v个关键消息:但对于那些消息,我们确实使用了System.err.println。请将每个跟踪器/减速器的聚合消息保持为几KB。

大多数消息仍应使用标准的log4j机制(进入系统日志区域)

答案 2 :(得分:0)

转到http://sandbox-hdp.hortonworks.com:8088/cluster/apps
查找您感兴趣的执行实例化,并为该条目单击历史记录链接(在跟踪UI列中),
然后查找Logs链接(在Logs列中),然后单击它

答案 3 :(得分:0)

yarn logs -applicationId <myAppId> | grep ...