Hadoop生态圈之mapreduce

概念

MapReduce是多进程,进程空间独享,方便对资源的管理,消耗更多的启动时间,时效性不高,适合离线处理,高吞吐。mapreduce是hadoop的批量处理计算框架,主要分为map、reduce过程。

map:负责将数据处理为<key,value>形式的数据输出到reduce

reduce:负责处理map输出的结果

工作流程

1.从hdfs获取数据。InputFormat:RecordRead读取一行数据并使用split函数切割数据,形成<key,value>数据

2.map:map读取切分的数据。map首先将数据读入Memerybuffer,当数据量超过Memerybuffer就会向硬盘写入形成小文件这个过程为spill。再通过Merge写在硬盘的数据,根据partition个数按照哈希一致性的原则分配给reduce。

map->reduce会发生shuffle过程,shuffle过程是指从不同的机器把同一个key的数据发送到同一台机器处理,而key集中在某一台机器。

3.reduce:根据partition分发数据到reduce,Merge合并处理数据(发生spill过程与mapReduce一样)

4.dataoutput输出数据到hdfs

Hadoop生态圈之mapreduce

partition个数 跟 reduce个数一样。

例子分析

wordcount例子分析

Hadoop生态圈之mapreduce

1.客户端提交wordcount作业,将jar包分配到执行的datanode

2.datanode从hdfs读取数据

3.map先将数据切分<key,value>形式,可以再分发给reduce之前将数据合并能减少网络传输。从图可知:hello从两个节点分配到一个reduce(哈希一致性的原则),这个过程发生shuffle过程。

shuffle过程产生数据倾斜:1.通过预处理key如:key_01,key_02来打散 2.会发生数据倾斜的数据过滤,不进去reduce阶段,特殊处理

4.reduce处理map数据,合并再输出到hdfs