Hadoop数据本地化

首先需要知道,hadoop数据本地化是指的map任务,reduce任务并不具备数据本地化特征。
           通常输入的数据首先将会分片split,每个分片上构建一个map任务,由该任务执行执行用户自定义的map函数,从而处理分片中的每条记录。
           那么切片的大小一般是趋向一个HDFS的block块的大小。为什么最佳的分片大小是趋向HDFS块的大小呢?是因为这样能够确保单节 点上最大输入块的大小,如果分片跨越两个数据块,没有一个HDFS能够同时存储这两块数据,因此需要通过网络传输将部分数据传输到map任务节点上。这样明显比使用本地数据的map效率更低。
             注意,map任务执行后的结果并没有写到HDFS中,而是作为中间结果存储到本地硬盘,那为什么没有存储到HDFS呢?因为,该中间结果会被reduce处理后产生最终结果后,该中间数据会被删除,如果存储到HDFS中,他会进行备份,这样明显没有意义。如果map将中间结果传输到reduce过程中出现了错误,Hadoop会在另一个节点上重新执行map产生中间结果。
             那么为什么reduce没有数据本地化的特点呢?对于单 个reduce任务来说,他的输入通常是所有mapper经过排序输出,这些输出通过网络传输到reduce节点,数据在reduce节点合并然后由reduce函数进行处理。最终结果输出到HDFS上。当多个有reduce任务的时候,map会针对输出进行分区partiti on,也就是为每个reduce构建一个分区,分区是由用户指定的partition函数,一般是默认的哈希函数进行分区,效率很高。
         同时为了高效传输可以指定combiner函数,他的作用就是,减少网络传输和本地传输
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值