Hadoop :(版本-1.2.1),(1 + 8节点集群)
我的用例是,我试图获取执行特定 pig 脚本所花费的时间,以及从mapreduce Angular 如何花费时间。我需要多次运行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/..
文件夹中。是否有现有的技术来组合结果,或者我注定要编写自己的解析器来遍历每个日志文件。我认为用例对于现有解决方案已经足够普遍-任何指针都将有所帮助。谢谢。
最佳答案
您有几种选择,我预先向您道歉,这些选项都没有特别吸引人的地方。
实现PPNL
PigProgressNotificationListener是java interface,用于将Pig工作过程中发生的事件暴露给任意客户端。如果实现此接口(interface)并附加类的实例,则可以获取hadoop计数器(以及许多其他与M / R相关的指标),并将其存储起来以备后用。请注意,这虽然需要专家级的了解,但需要对Pig内部有一个合理的了解。
使用另一个收集指标的系统
现在,您的选择是有限的Ambrose(由Twitter开源)和Lipstick(由Netflix开放)。我不确定Ambrose是否会收集hadoop计数器,但是可以扩展为这样做。口红确实会收集hadoop计数器。使用这两种方法中的任一种,您都可以根据不同的难度来分析计数器,具体取决于您配置计数器以存储数据的方式。
解析您的日志文件
听起来您已经出于以下几个原因考虑过采用这条路线:
关于logging - 跨多个作业聚合Hadoop作业计数器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19231881/