【问题标题】:How to collect Hadoop userlogs?如何收集 Hadoop 用户日志?
【发布时间】:2018-10-17 22:26:43
【问题描述】:

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

【问题讨论】:

  • 您使用的是哪个版本的 Hadoop?
  • 我使用的是 Hadoop 2.0.0。

标签: 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 机制(进入系统日志区域)

    【讨论】:

      【解决方案3】:

      转到您的http://sandbox-hdp.hortonworks.com:8088/cluster/apps
      在那里查找您感兴趣的执行的实例化,然后单击该条目的 History 链接(在 Tracking UI 列中),
      然后查找 Logs 链接(在 Logs 列中),然后单击它

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-07-31
          • 2020-12-19
          • 2018-01-26
          • 2017-08-20
          • 2020-01-18
          • 2012-06-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多