您的位置:首页 > 运维架构

Hadoop之MapReduce任务的优化

2012-04-06 17:34 155 查看
1. 任务调度

(1)计算方面:Hadoop总会优先将Task分配给空闲的机器,所有的人物能公平地分享系统资源

(2)I/O方面:Hadoop尽量将map Task分配给Input Split所在的机器,以减少网络I/O的消耗。

2.数据预处理与Input Split的大小

(1)提交MapReduce Task前可以先对数据进行一次预处理,将数据合并以提高MapReduce Task的执行效率。参考Map Task 的执行时间,当一个Map Task执行时间比较短的时候,可以分配更多的数据。通过设置map的输入数据大小来调节map的运行时间。

3.map和reduce任务的数量

(1)map任务槽和reduce任务槽。指的是这个集群能够同时运行的map/reduce任务的最大数量。设置MapReduce Task的map数量主要参考的还是map Task的运行时间,而reduce任务的数量就只需要参考任务槽的设置了。

4.combine函数

用于本地合并数据的函数,map中间有很多重复的数据,将这些记录一一传送给reduce task是很耗时的,所以MapReduce框架运行用户写一个combine函数,用于本地合并,这会大大减少网络I/O操作的消耗。job.setCombineClass(combine.class);

5.编写MapReduce程序时,可以选择对map的输出和最终输出结果进行压缩(同时可以选择压缩方式)。在一些情况下,map的中间输出可能会很大,对其进行压缩可以有效减少网络上数据传输量。

6.自定义compator

在Hadoop中,可以自定义数据类型以实现更复杂的目的。当读者想实现k-means算法(一个基础的聚类算法)可以定义k个整数的集合。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: