Mapreduce工作流程与简介

最近几天一直在学习关于大数据方面的相关技术,今天学习了MapReduce的工作流程,让我对数据地处理有了新的认识,接下来我分享一下关于MapReduce2.0的工作流程

Mapreduce简介
Hadoop MapReduce 源于Google发表的 MapReduce论文。Hadoop MapReduce 其实就是Google MapReduce的一个克隆版本。Hadoop 2.0即第二代Hadoop系统,其框架最核心的设计是HDFS、MapReduce和YARN。其中,HDFS为海量数据提供存储,MapReduce用于分布式计算,YARN用于进行资源管理。
MapReduce的工作流程图
Mapreduce工作流程与简介_第1张图片
中文版
Mapreduce工作流程与简介_第2张图片根据图片不难看出mapre的工作流程
1.文件要存储在HDFS中,每个文件被切分成多个一定大小的块也就是Block,(Hadoop1.0默认为64M,Hadoop2.0默认为128M),并且默认3个备份存储在多个的节点中。

  1. MR通过Inputformat将数据文件从HDFS中读入取,读取完后会对数据进行split切片,切片的数量根据Block的大小所决定,然后每一个split的个数又决定map的个数,即一个split会分配一个maptask并行实例处理。说到切片下面讲一下切片的小细节:
    1.获取文件大小 fs.sizeOf(ss.txt);
    2.计算切片大小 computeSliteSize(Math.max(minSize,Math.min(maxSize,blocksize)))=blocksize=128M
    3.默认情况下,切片大小=blocksize
    4.开始切,形成第 1 个切片: ss.txt—0:128M 第 2 个切片 ss.txt—128:256M 第 3个切片 ss.txt—256M:300M(每次切片时,都要判断切完剩下的部分是否大于块的 1.1 倍,不大于 1.1 倍就划分一块切片)

计算切片大小的意义
切片的时候需要解决记录跨block的问题,这时就需要RecordReader读取,在读取的过程中会保证数据的完整性。例如如果一个句子中的一个单词被切到了不同切片当中,会让数据没法识别,RecordReader读取数据会保证每个单词的完整性

4、数据进入到map函数中,然后开始按照一定的规则切分。比如单词统计,将每一个单词后面计数为1.

5、下面正式进入到了shuffle阶段,也是整个mapreduce最核心的阶段。

maptask 收集我们的 map()方法输出的 key value 对,放到内存缓冲区中

从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件

多个溢出文件会被合并成大的溢出文件

在溢出过程中,及合并的过程中,都要调用 partitioner 进行分区和针对 key 进行排序

reducetask 根据自己的分区号,去各个 maptask 机器上取相应的结果分区数据

reducetask 会取到同一个分区的来自不同 maptask 的结果文件, reducetask 会将这些文件再进行合并(归并排序)

合并成大文件后, shuffle 的过程也就结束了,后面进入 reducetask 的逻辑运算过程(从文件中取出一个一个的键值对 group,调用用户自定义的 reduce()方法)

6.最后到reduce,多个reduce任务输入的数据都属于不同的partition,因此结果数据的key不会重复。合并reduce的输出文件即可得到最终结果

其他MapReduce的流程图
Mapreduce工作流程与简介_第3张图片

你可能感兴趣的:(大数据技术)