利用ganglia调优hadoop

利用ganglia 监控集群状态为调优提供依据

           单位同事在对hadoop集群调优的时候,大多数看中的是个体.看中的是本段代码的执行情况.而很少从整集群的资源利用方面考虑. 本文提供一种方法在对hadoop调优的时候从整个资源利用方面入手进行调优.

          mapred.tasktracker.map.tasks.maximum  (最大的map数量)

          mapred.tasktracker.reduce.tasks.maximum (最大的reduce数量)

         现在我的主机配置是48核的cpu 64G内存,我怎么确定上面两个参数呢? 询问了有经验的同事我觉得下面的规则比较适合

<

建议:如果主机上没有其他应用,就可以设置为map+reduce+1=cpu_cores(为守护进程留一个);如果主机上不只mapreduce任务,则设置为map+reduce+1<cpu_cores,以便为其他应用预留资源,而且一般设置都是map数>reduce数。其实除了考虑核数外还需要考虑内存的限制,详情见下面mapred.child.java.opts的设置

>

        这样配置合理吗? 为什么合理? 事实在那里? 我没有在网上收集到相关的测试报告.对这种规则持怀疑态度. 至少在我目前的环境中我不能证明这种规则是错误的,也不能证明是正确的.不过当我对ganglia的逐渐理解加深.我有机会验证上面的规则了(废话多了)

        转入正题,在我目前的环境中hadoop+hive 很多程序都是简单的关联.个人认为cpu消耗不高.故 map+reduce 的值可以大于48(设想) .我做了下面的验证.不改变现有配置运行一个大程序(占用所有map与reduce)用ganglia监控得到如下图(图片省略)观察图片cpu使用率不到60%.

       逐渐增大map与reduce数量。当总数达到54的时候每个任务执行速度会慢很多。且系统会出现严重过载情况。而到达52时基本与最开始配置的30个map中每个任务执行的速度一致。且这个时候系统cpu使用率90%左右浮动 。对于这个程序来说调整为52的时候需要1小时30分钟。而以前30个(map 20 reduce10)需要1小时50分。 从这个结果可知对于该平台map+reduce的应该是52才是最优的。


结论:在hadoop调优这块,有很多现成的经验可供参考。但是对于具体应用,我们应该根据实际,利用性能监控工具来调整参数。这样才能得到针对具体平台的最优参数。




阅读更多

没有更多推荐了,返回首页