【问题标题】:How to collect Hadoop userlogs?如何收集 Hadoop 用户日志?
【发布时间】:2018-10-17 22:26:43
【问题描述】:
我正在运行 M/R 作业并在错误发生时记录错误,而不是让作业失败。只有几个错误,但该作业是在具有数百个节点的 hadoop 集群上运行的。如何在任务日志中搜索而无需手动打开 web ui 中的每个任务日志(jobtaskhistory)?也就是说,如何在遍布集群、本地存储在各个节点的M/R任务日志中进行自动搜索?
【问题讨论】:
标签:
hadoop
logging
mapreduce
【解决方案1】:
旁注首先:2.0.0 已经过时了(即 2.0 的“测试版”),您应该考虑升级到更新的堆栈(例如 2.4、2.5 2.6)。
从 2.0 开始,Hadoop 实现了所谓的“日志聚合”(尽管这不是您想的那样。日志只是存储在 HDFS 上)。您可以使用许多命令行工具来获取日志并对其进行分析,而无需通过 UI。事实上,这比 UI 快得多。
查看this blog post了解更多信息。
不幸的是,即使使用命令行工具,您也无法同时获取所有任务日志并将其通过管道传输到 grep 之类的东西。您必须将每个任务日志作为单独的命令获取。但是,这至少是可编写脚本的。
Hadoop 社区正在开发一种更强大的日志分析工具,它不仅可以将作业日志存储在 HDFS 上,还可以让您对这些日志执行搜索和其他分析。不过,这个工具还是有出路的。
【解决方案2】:
我们就是这样做的(大型互联网公司):我们确保只记录 v 条关键消息:但对于这些消息,我们实际上确实使用了 System.err.println。请将每个 tracker/reducer 的聚合消息保持在几 KB。
大多数消息仍应使用标准 log4j 机制(进入系统日志区域)
【解决方案4】:
yarn logs -applicationId <myAppId> | grep ...