06 MR执行流程和原理

一、MR执行流程和原理图

 

1.1、执行流程和原理图

 

06 MR执行流程和原理

 

mapTask的并行机制

  • mapTask在运行的时候,开启多个map由谁来决定?

默认情况:mapTask 的数量和读取 HDFS 中的数据块 block 的数量相等

  • block块:HDFS 中文件各个小数据块(默认 128m )(物理划分)

  • FileSplit: 在MapReduce 读取每一个块称为 fileSplit(文件切片)(逻辑划分)

block 的数量 和 文件分片的数量一样,大小也是一样。

Mapreduce 中 map 阶段的运行机制

  • 读取HDFS中数据, 启动mapTask数量与 读取文件的block块(fileSplit)数量是相等的

  • 在读取数据过程中 , 读取一行就会调用一次 MapTask中map方法, 在map方法中, 将接收到k1 和 v1 转换为 k2 和 v2 过程

  • 当map处理一条数据后, 往出写, 只要一写出去, 就会执行分区(partition)操作,分区操作的核心, 对这条数据进行打分区标记的过程:

    默认分区方案: hash 取模计算法 % numReduceTask,分区可以保证: 相同key , 打上分区的编号必然是一样的

  • 当分好区以后, 数据就会被写入到 环形缓冲区中, 环形缓冲区本质上就是一个内存空间(数组), 大小为100M

    mapTask一条一条的输出, 分区一条一条处理, 一条条的数据写入到环形缓冲区, 当这个环形缓冲区容量达到0.8系数就会启动一个溢写的线程, 将80%的数据进行溢写到磁盘上, 在溢写过程中就会执行排序的工作, 如果此时有规约, 此时就是执行规约的时候了。

  • 当mapTask执行完成后, 如果环形缓冲区依然还有一些剩余数据, 一次性全部溢写到磁盘上, 此时在磁盘上就会有多个溢写出来的临时文件, 然后对这些临时文件进行merge合并操作, 形成一个最终的排好序,分好区 规约好的大文件。

Mapreduce 中 reduce 阶段的运行机制

  • 当reduceTask检测到mapTask全部都执行完成了, 开启copy的机制, 从多个mapTask中拷贝属于自己的分区的数据

  • 在copy过程中, 会先将数据写入到内存中, 当内存存储不下的时候, 在溢写到磁盘上, 形成临时文件

  • 当copy结束后, 会将所有溢写出来的临时文件全部合并为一个大文件, 此时在合并的过程中, 会对数据进行重新的排序工作, 如果reduce只有一个, 此时排序就是全局排序, 如果是多个, 依然是局部排序操作

  • 对排序好数据, 执行分组操作, 将相同key的value数据合并为一个集合, 然后分好一组, 调用一次reduceTask中

    reduce方法

  • reduce方法执行完成后, 将结果数据直接输出到即可

  • 输出组件就会将reduce的输出内容, 输出到目的地址上...

 

 

环形缓冲区等配置

 

配置                                 默认值                               解释

mapreduce.task.io.sort.mb         100                           设置环型缓冲区的内存值大小

mapreduce.map.sort.spill.percent 0.8                               设置溢写的比例

mapreduce.cluster.local.dir       ${hadoop.tmp.dir}/mapred/local 溢写数据目录

mapreduce.task.io.sort.factor     10                           设置一次合并多少个溢写文件

 

 

 

 

 

 

 

 

 

 

 

 

上一篇:JS框架_(JQuery.js)纯css3进度条动画


下一篇:05 MR的序列化和排序