在多个作业中聚合Hadoop作业计数器

时间:2013-10-07 18:21:42

标签: logging hadoop apache-pig

Hadoop :(版本 - 1.2.1),(1 + 8节点集群)

我的用例是,我正在尝试花时间执行特定的猪脚本,以及从mapreduce的角度来看如何花费时间。我需要多次运行pig脚本(比如100)来获得平均时间。我已启用pig.udf.profile,这使我在每个udf函数上花费时间作为mapreduce计数器。我还对报告的每个作业的其他延迟,内存指标(cpu时间,堆使用率)感兴趣。我可以从jobtracker Web UI(host:50030/jobdetails.jsp?jobid=blah)中看到这些计数器。现在,我的问题是,有没有办法在工作中聚合这些计数器。或者,我将如何构建一个看起来像

的表
                        Run1   Run2   Run3 ...
Cpu time              |      |      |
Redcr wait            |      |      |
UdfCntr1(approx_us)   |      |      |
UdfCntr2(approx_invc) |      |      |
CounterY(approx_us)   |      |      |

就Hadoop而言,每次运行都是一项不同的工作。在浏览日志文件夹之后,我发现计数器位于history/done/..文件夹中。是否存在结合结果的现有技术,或者我注定要编写遍历每个日志文件的自己的解析器。我认为用例对于现有的解决方案来说已经足够了 - 任何指针都会有所帮助。

感谢。

2 个答案:

答案 0 :(得分:0)

你有几个选择,我提前道歉,没有一个是特别吸引人的。

实施PPNL

PigProgressNotificationListener 是一个java interface,用于将Pig作业过程中发生的事件暴露给任意客户端。如果您实现此接口并附加您的类的实例,则可以获取hadoop计数器(以及许多其他M / R相关指标)并将其存储起来供以后使用。请注意,这需要对Pig内部的合理理解,但不一定是专家级的理解。


使用另一个收集指标的系统

现在您的选项有限Ambrose由Twitter开源,Lipstick由Netflix开源。我不确定Ambrose是否会收集hadoop计数器,但可以延长。口红确实按原样收集hadoop计数器。使用其中任何一个,您都可以分析具有不同难度级别的计数器,具体取决于您如何配置它们来存储数据。


解析您的日志文件

听起来你已经考虑过这条路线,原因有两个:

  1. 所有其他选项要求您了解另一个项目的内部结构,无论是Pig,Lipstick还是Ambrose。如果您计划因其他原因而潜入其中一个原因,那么请继续使用它,否则这对单个用例来说是一笔巨大的投资。
  2. 所有其他选项仅限于Pig工作。如果您运行vanilla Map / Reduce作业或开始使用其他工具(如hive,cascading等),则不会获得此数据。如果您构建了一些日志解析工具,将数据转换为众所周知的格式,然后得到处理后,您应该能够使用hadoop工具重用所有代码(实际解析除外)。
  3. 如果您的数据基于您的日志,并且您归档了所有日志,那么如果您对之前未收集的某些数据点感兴趣,则可以在六个月后回填。其他方法无法做到这一点。
  4. 这是一种既定的模式。我不能指出很多在线资源讨论采用这种方法的人,但我遇到了很多人,他们独立采用这种方法并对此感到满意。

答案 1 :(得分:0)

一种简单的方法是构建一个小型java方法,它接收所有计数器并将它们发送到Graphite。 *安装Graphite *让你的所有工作都通过一个中央Main类,在工作结束时,取得计数器,转换为Key Value,其中key可以是..,value是计数器值,它是一个长数字。 *将这些键值报告为CSV格式,石墨可以使用端口2003通过普通Socket读取并发送它(我认为它是默认的Graphite端口)。 *使用Graphite Web UI查看和分析数据。