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计数器。使用这两种方法中的任一种,您都可以根据不同的难度来分析计数器,具体取决于您配置计数器以存储数据的方式。

解析您的日志文件

听起来您已经出于以下几个原因考虑过采用这条路线:

  • 所有其他选项都要求您完全了解另一个项目的内部结构,例如Pig,Lipstick或Ambrose。如果您还打算出于其他原因而涉足其中之一,那么就去吧,否则,对于单个用例来说,这是一笔巨大的投资。
  • 所有其他选项仅限于Pig作业。如果您运行普通的Map / Reduce作业或开始使用其他工具(如配置单元,级联等),则不会获得此数据。如果您构建了一些日志解析工具,可以将数据转换为众所周知的格式,得到处理后,您应该能够使用hadoop工具重用所有代码(实际解析除外)。
  • 如果您的数据是基于日志的,并且您已存档所有日志,那么如果您对以前从未收集过的某些数据点感兴趣的六个月后,便可以随时回填。使用其他方法是不可能的。
  • 这是一个行之有效的模式。我不能指出很多在线资源来讨论采用这种方法的人,但是我遇到了很多独立采用这种方法并对此感到满意的人。
  • 关于logging - 跨多个作业聚合Hadoop作业计数器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19231881/

    10-16 01:57