如何收集Hadoop用户日志?

How to collect Hadoop userlogs?

我正在 运行宁 M/R 作业并在错误发生时记录错误,而不是让作业失败。只有少数错误,但作业在具有数百个节点的 hadoop 集群上 运行。如何在任务日志中搜索而无需在网络中手动打开每个任务日志 ui (jobtaskhistory)?也就是说,如何自动搜索分布在集群各处、存储在本地各个节点的M/R个任务日志?

我们就是这样做的(大型互联网公司):我们确保只记录 v 条关键消息:但对于那些消息,我们实际上确实使用了 System.err.println。请将每个 tracker/reducer 的总消息控制在几 KB。

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

旁注首先:2.0.0 发霉了(这是 2.0 的 "beta" 版本),您应该考虑升级到更新的堆栈(例如 2.4、2.5 2.6)。

从 2.0 开始,Hadoop 实现了所谓的 "log aggregation"(虽然这不是您想象的那样。日志只是存储在 HDFS 上)。您可以使用许多命令行工具来获取日志并进行分析,而无需通过 UI。事实上,这比 UI.

快得多

查看 this blog post 了解更多信息。

不幸的是,即使使用命令行工具,您也无法同时获取所有任务日志并将其通过管道传输到类似 grep 的工具。您必须将每个任务日志作为单独的命令获取。但是,这至少是可编写脚本的。

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

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

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