引言
数据存储在分布式文件系统中HDFS里边,通过使用Hadoop资源管理系统YARN,Hadoop可以将MapReduce计算,转移到有存储部分的数据的各台机器上。
一:概念和原理
1:MapReduce作业
MapReduce作业被称为一个工作单元。
1:一个工作单元的逻辑组成元素:输入数据、MapReduce程序、配置信息。
2:Hadoop将工作单元划分成多个任务(Task)任务有两类(Map和Reduce)。
3:Task任务运行在HDFS集群上,通过YARN进行调度。
4:一个任务失败,将在集群节点上自动重新调度运行。
2:分片
1):分片概念
MapReduce输入数据是等长的小数据块称为分片。一个分片对应一个Map任务,对应任务运行用户定义的map函数,从而处理分片中的每条记录。
2):分片大小
事实A:块越小,从磁盘到内存中的内容越少,计算越快。从这个角度越小越好
事实B:HDFS分块,是越大越好。越大,总体寻址开销小,越小的话,内容中需要存150B字节的源数据,块越小导致内存不够用。
两者相悖,取折中的办法,一秒钟机械磁盘的传输速率100MB,所以这里取得块的大小是128MB
事实C:分片比块大,一个分片需要读多个块,大概率多个块不在在一台物理机,导致网络IO
事实D:分片比快小,多个分片运行一个快,引发单个块如何划分给多个Map任务的问题。
结论:最理想的状态就是一个分片对应一个HDFS的块的大小
3:Map任务
1:Map任务将会把任务作为Reduce任务的入参
2:Map任务产出结果存储在磁盘而非HDFS,杀鸡用不到宰牛刀,HDFS里边还得做数据副本,也就是数据备份。
3:Map任务结果丢失或者传输失败怎么办?其他节点在走一遍。
4:Reduce任务
Reduce任务没数据本地化的这一说。单个Reduce任务输入来自于所有Map任务的输出。Reduce任务首先进行数据合并,数据合并为一个整体之后进行Reduce任务处理。处理完毕之后Reduce任务结果需要基于网络带宽写入到HDFS里边。
该图 清晰的表示了Map任务和Reduce任务之间的关系是混洗(shuffle)
二:组合器函数combiner
组合器函数是一个优化项,减少Map与Reduce之间的网络传输的带宽。
本质上是对Map函数处理结果的组合和精简。让Map和Reduce之间传输的数据量变小。