Hadoop之MapReduce任务的优化

来源:互联网 发布:方维p2p源码下载 编辑:程序博客网 时间:2024/05/20 15:59

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个整数的集合。

      

原创粉丝点击