用Python实现一个细粒度hadoop作业监控分析工具

本文介绍了如何使用Python快速实现一个针对Hadoop作业的细粒度监控分析工具。工具包括两个模块:Monitor和Server,分别负责数据收集和信息组织,并提供了Web接口以展示任务的运行信息。监控粒度细化到job->task_attempt->process级别,使用psutil进行数据采集,webpy构建Web服务器,matplotlib进行数据可视化。文章详细阐述了各个模块的实现细节,并探讨了未来可能的改进和扩展方向。
摘要由CSDN通过智能技术生成

 

在使用或者管理维护hadoop集群的时候,监控工具是必不可少的,hadoop集群相关的监控工具有gangliachukwa,功能强大,可以监控整个集群的资源使用状况。但是面对一些问题,比如具体到单个jobmapperruducer粒度的测试,profiling,性能调优等,gangliachukwa等集群监控工具的监控粒度似乎有些大,好像没有提供针对单个job->task->task-attempt级别的性能数据采集与监控(对它们了解比较少,可能有这个功能我没找到?)

正好最近在尝试优化mapreduce的单机计算部分,需要一个粒度到task_attempt级别的监控工具来收集CPU,内存等性能相关的信息。需求如下:

1.       收集集群中每个mapreduce task相关的进程的动态运行信息(CPU, RSS, VM, 可扩充), 按照job-> task_attempt->process的层次组织;

2.       使用streaming/bistreamingjob每个task_attempt由多个进程组成,这种多进程task也需要识别;

3.       用户可以以web方式浏览每个提交的任务的细粒度运行信息,这些信息通过文本和图表方式展示。

简单分析下需求后,发现可以拿python很快的实现一个:

1.       每个task tracker node部署一个monitor负责收集信息,并将信息通过http POST方式实时发送给server

2.       Server负责将收集到的信心组织成job->task_attempt->process->value_seq的层次形式,并提供web接口供用户浏览

所以这个工具就两个模块,monitorserver,使用python丰富的工具库后代码很少,每个模块一个数百行的py文件即可:

1.       Monitor的监控数据采集使用psutil(http://code.google.com/p/psutil ),与server的通信使用httplib,数据以json方式编码;

2.       Serverweb server使用webpy(http://webpy.org/),将数据转化成图表使用matplotlib(http://matplotlib.sourceforge.net, 在前两篇文章中也有介绍)

由于代码不多,下面会详细介绍实现,网络,多线程,web,图形,系统编程都有些涉及,对学习python或者了解上述几个工具类库的使用来说算是一个不错入门例子吧。

 

先来介绍monitor模块,分成数据收集和数据发送两块,各实现为一个线程。

数据收集线程  ->  buffer -> 数据发送线程, 典型的生产-消费模型

1.       收集线程:

识别新的attempt进程将之放入usefull_processes

遍历usefull_processes,收集进程信息并封装成json stringappendbuffer

2.       发送线程:

定时检查buffer是否有内容,并批量发送给server

 

相关代码:

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值