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/..
文件夹中。是否存在结合结果的现有技术,或者我注定要编写遍历每个日志文件的自己的解析器。我认为用例对于现有的解决方案来说已经足够了 - 任何指针都会有所帮助。
感谢。
答案 0 :(得分:0)
你有几个选择,我提前道歉,没有一个是特别吸引人的。
实施PPNL
PigProgressNotificationListener 是一个java interface,用于将Pig作业过程中发生的事件暴露给任意客户端。如果您实现此接口并附加您的类的实例,则可以获取hadoop计数器(以及许多其他M / R相关指标)并将其存储起来供以后使用。请注意,这需要对Pig内部的合理理解,但不一定是专家级的理解。
使用另一个收集指标的系统
现在您的选项有限Ambrose由Twitter开源,Lipstick由Netflix开源。我不确定Ambrose是否会收集hadoop计数器,但可以延长。口红确实按原样收集hadoop计数器。使用其中任何一个,您都可以分析具有不同难度级别的计数器,具体取决于您如何配置它们来存储数据。
解析您的日志文件
听起来你已经考虑过这条路线,原因有两个:
答案 1 :(得分:0)
一种简单的方法是构建一个小型java方法,它接收所有计数器并将它们发送到Graphite。 *安装Graphite *让你的所有工作都通过一个中央Main类,在工作结束时,取得计数器,转换为Key Value,其中key可以是..,value是计数器值,它是一个长数字。 *将这些键值报告为CSV格式,石墨可以使用端口2003通过普通Socket读取并发送它(我认为它是默认的Graphite端口)。 *使用Graphite Web UI查看和分析数据。