MapReduce初探与思考

     MapReduce是hadoop的分布式计算框架,主要包括map与reduce两大阶段:

     Map阶段主要负责把数据输入转换成中间键值对结果,它要求输入为键值对方式,具体实现map方法就可以,产生的输出是以可序列化的键值对结果,对键要求可比较即可。而在读入输入数据之前,要求数据已经被逻辑分片。

reduce阶段主要负责把中间结果进一步处理产生最后的输出结果。

      考虑到海量数据键的重复性和从中间结果到reduce输入的映射关系,在map结果后以一个combine方式进行重复键的合并,也可以说是通过shuffle和sort来减少发送到reduce阶段的有效数据量。这样就能起到第一步的优化。conbine其实也是一种reduce。

     combine之后,虽然数据量有所减少,但数量还是很大的,于是就采用compress的方式把数据压缩,到达reduce端后再去解压缩就OK了。

        基本上单个mapreduce任务的通用优化方式就这些。针对多任务的mapreduce,比如 map  map  reduce方式,则以第一个map的中间结果来作为第二个map的输入的方式,减少一个reduce阶段从而缩短整体耗时。


       虽然有了以上的优化方式,mapreduce效率有所提高,但仍然很慢,仍然是只能处理离线的任务。 

        mapreduce online提供了一个优化的方案,以稍微复杂的框架改造来提高效率,通过准实时的用户响应来改进用户体验。 mapreduce online是基于pipeline的改造方式。首先,将map阶段产生的结果不先写入磁盘文件,而是直接发送给reduce机器,这就要求map机器和reduce机器维持一个socket连接.如果没有建立连接,则写入磁盘,结果可以是到达一定阀值之后进行combine类似操作去重减少数据集大小,然后发送给reduce端。 由reduce端去优化处理。

 

          以上是延数据流向上的优化思考。

         针对不同的角色,master (jobtracker),slave (tasktracker),由于tasktracker通过heartbeat消息向jobtrakcer请求map 或者reduce任务,而一个tasktracker通常有多个maptask或是reducetask 。尽量从hdfs文件系统中高效取得带输入文件(最好本机数据,次之同机架数据等),复用子vm(即多个map任务之间可能公用某些元数据,如果将这些数据存入vm中,则也能改进效率)都能改进效率。

         多个job任务之间如果能优化合并则能提高整体jobs的执行效率。

 

          总而言之,hadoop作为离线数据处理的一个架构,注重吞吐量,但效率改进上还可以大大提高。总的思路就是减少数据传输量,提高并发率,提高复用比率等通用方式。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值