Hadoop.2.x_MR-Shuffle过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop.2.x_MR-Shuffle过程相关的知识,希望对你有一定的参考价值。

1、map到reduce中间的一个过程

  洗牌,打乱(打乱我们传递的所有元素)(流程:input->map->reduce->output)

2、map()->shuffle->reduce()

map()接收数据,以wc为例,其中数据可是为<key,value>
在map()中获取每一行文本内容使用String.split或其他分隔方法分隔文本内容,如<0,hadoop spark hdfs hadoop>
分隔之后:<hadoop,1><spark,1><hdfs,1><hadoop,1>
从map()输出数据到reduce()接收数据进入shuffle阶段
经过shuffle到达reduce()
数据格式与map()输出格式一致
对数据value进行累加<hadoop,2><spark,1><hdfs,1>...
输出格式key文本内容分隔体,value出现的次数
输出到文本上的key与value以制表符\t分隔

3、shuffle过程

map()输出结果->内存(环形缓冲区,当内存大小达到指定数值,如80%,开始溢写到本地磁盘)
溢写之前,进行了分区partition操作,分区的目的在于数据的reduce指向,分区后进行二次排序,第一次是对partitions进行排序,第二次对各个partition中的数据进行排序,之后如果设置了combine,就会执行类似reduce的合并操作,还可以再进行压缩,因为reduce在拷贝文件时消耗的资源与文件大小成正比
内存在达到一定比例时,开始溢写到磁盘上
当文件数据达到一定大小时,本地磁盘上会有很多溢写文件,需要再进行合并merge成一个文件
reduce拷贝copy这些文件,然后进行归并排序(再次merge),合并为一个文件作为reduce的输入数据

  

     

以上是关于Hadoop.2.x_MR-Shuffle过程的主要内容,如果未能解决你的问题,请参考以下文章

用存储过程好,还是在代码中写SQL语句好

开发过程中,调用别人开发的代码,用到啥关键字

存储过程具体过程以及sql数据库调用和程序代码调用

C# 代码生成器 (存储过程生成方法)

C/C++程序编译过程详解

C/C++程序编译过程详解