ITPub博客

首页 > 大数据 > 数据挖掘 > 好程序员大数据培训分享MapReduce理解

好程序员大数据培训分享MapReduce理解

原创 数据挖掘 作者:好程序员 时间:2020-11-26 16:31:28 0 删除 编辑

   好程序员 大数据 培训分享MapReduce 理解,本篇文章 就给大家分享一下大数据MapReduce 理解。

   为什么需要MapReduce? 因为 MapReduce 可以“分而治之”,将计算大数据的复杂任务分解成若干简单小任务。“简单”的意思是:计算规模变小、就近节点计算数据、并行任务。

   一句话版本:

   输入文件 -> 【 map 任务】 split --> map --> partition --> sort --> combine( 写内存缓冲区 ) ~~ spill( 独立线程写磁盘 ) --> merge --> map 输出结果 ~~~ 【 reduce 任务】 copy --> merge -->reduce --> 输出文件

   M 个 map 任务开始并处理分配到的多个 split 数据。

   Partition :

   作用:将map 阶段的输出分配给相应的 reducer , partition 数 == reducer 数

   默认是HashPartitioner 。之后将输出数据写入内存缓冲区 memory buff 。

   spill:

   当memory buff 的数据到达一定阈值时,默认 80% ,将出发溢写 spill ,先锁住这 80% 的内存,将这部分数据写进本地磁盘,保存为一个临时文件。此阶段由单独线程控制,与写 memory buff 线程同步进行。

   sort & combine :

   在spill 写文件之前,要对 80% 的数据 ( 格式 ) 进行排序,先 partition 后 key ,保证每个分区内 key 有序,如果 job 设置了 combine ,则再进行 combine 操作,将 这样的数据合并成,最终输出一个 spill 文件。

   多个spill 文件通过多路归并排序,再合并成一个文件,这是 map 阶段的最终输出。同时还有一个索引文件 (file.out.index) ,记录每个 partition 的起始位置、长度。

   reduce 阶段:

   copy :多线程并发从各个 mapper 上拉属于本 reducer 的数据块 ( 根据 partition) ,获取后存入内存缓冲区,使用率达到阈值时写入磁盘。

   merge :一直启动,由于不同 map 的输出文件是没有 sort 的,因此在写入磁盘前需要 merge ,知道没有新的 map 端数据写入。最后启动 merge 对所有磁盘中的数据归并排序,形成一个最终文件作为 reducer 输入文件,至此 shuffle 阶段结束。

   reduce :和 combine 类似,都是将相同的 key 合并计算,最终结果写到 HDFS 上。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69913864/viewspace-2737300/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-03-20

  • 博文量
    342
  • 访问量
    194994