收集各个hadoop工作的计数器和指标

时间:2016-09-14 12:10:03

标签: java hadoop mapreduce metrics

我正在寻找一种方法,以事件驱动的方式收集各个hadoop作业的所有计数器和指标,以便将所有这些数据存储在elasticsearch中,以便以后进行故障排除和分析。

目前我发现很少有方法可以满足要求:

  1. 使用指标导出程序,尤其是ContainerMetrics,允许获取每容器内存和cpu使用情况以及MRAppMetrics,但汇总所有指标所有的工作。

  2. 使用REST API轮询MR History Server非常简单,但需要大量HTTP调用来收集作业,任务及其尝试的所有计数器。

  3. 将其他自定义EventHandler插入MRAppMaster的事件dispatcher,但MRAppMaster没有相应的机制来注册自定义事件处理程序。

  4. 使用javaagents的黑魔法(java instrumentation api),字节码修改和类似aop的功能来拦截EventHandler#handle(T)方法的所有执行。这种方式应该能够解决所有需求,但需要额外配置MR-jobs,javaagent开发和注册,并且通常看起来相当复杂。

  5. 所以,我想问一下是否有更简单的方法来收集个人hadoop工作的指标和计数器?

1 个答案:

答案 0 :(得分:1)

您可以将指标实际提供给任何收件人:实施您自己的MetricsSink并配置hadoop以使用它。

或者您可以使用已与Hadoop发行版捆绑在一起的MetricsSink,例如GraphiteSink,并在Graphite中获取指标。

请注意,在作业完成(成功与否)之前,某些计数器不可用。

此外,选项2也存在使HistoryServer陷入困境的风险(当您使用大量映射器轮询某个作业时,它可能是OOM)。