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
partition个数 跟 reduce个数一样。
例子分析
wordcount例子分析
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