从HDFS和MapReduce两方面相识Hadoop
图 3. MapReduce 措施运行图解
Shuffle 简介,什么是 Shuffle MapReduce 措施会确保每个 reduce 函数的输入都是按键排序的。体系执行排序以及将 map 函数的输出传给 reduce 函数的进程称之为 shuffle。整个 Shuffle 分为 Map 端和 Reduce 端,下图是 MapReduce 的 Shuffle 的一个整体概览图,各人先看一下整个图,我们后头再做进一步的表明声名。 图 4. Shuffle 概览图
Map 端 Shuffle 着实 Map 函数发生的输出会写到磁盘上而不是 HDFS。可是它也不是简简朴单的直接写到磁盘,这中间有一个伟大的进程,下面我们就来拆解一下。 从上面的图可以看到每个 Map 使命城市有一个缓冲区,这个缓冲区会姑且存储 map 函数输出的内容,缓冲区的个巨细默认是 100M,我们可以通过 mapreduce.task.io.sort.mb 这个设置项设置,当缓冲区中的内容到达其设定的阈值(阈值的配置值是占整个缓冲区的巨细,默以为 0.8,我们可以通过 mapreduce.map.sort.spill.percent 来设置)时就会发生溢出,这个时辰会有一个靠山线程将缓冲区中的内容分区(按照最终要传给的 Reduce 使命分成差异的区,分区的目标是将输出分别到差异的 Reducer 上去,后头的 Reducer 就会按照分区来读取本身对应的数据) 然后区内凭证 key 排序,假如我们配置了 Combiner(Combiner 的本质也是一个 Reducer,其目标是对将要写入到磁盘上的文件先举办一次处理赏罚,这样,写入到磁盘的数据量就会镌汰。) 的话,这个时辰会运行 Combiner 函数,最后再写入磁盘。而在这个进程中 Map 使命还会继承往缓冲区中输出内容,假如呈现缓冲区空间被占满的环境,Map 使命就会阻塞直到缓冲区中的内容被所有写到磁盘中为止。 每次缓冲区溢出时城市新建一个新的溢出文件,这样最后着实是会呈现多个溢出文件的,在 Map 使命竣事前这些溢出文件会被归并到一个整的输出文件。 Reduce 端 Shuffle Reduce 端的 Shuffle 分为三个阶段,复制阶段、归并阶段和 Reduce。 起首是复制阶段,Reduce 使命必要集群上多少个 map 输出作为其输入内容,在每个 Map 使命完成的时辰 Reduce 使命就开复制其输出,上面也提到过 Map 使命在写入磁盘前会将输出举办按照 Reduce 使命举办分区,以是这里 Reduce 使命在复制的时辰只会复制本身的谁人分区里的内容。假如 Map 的输出很是小,那么 Reduce 会直接将其复制到内存中,不然会被复制到磁盘。 归并阶段,由于有许多的 Map 使命,以是 Reduce 复制过来的 map 输出会有许多个,在这个阶段首要就是将这些 Map 输出归并成为一个文件。 Reduce 阶段,这个阶段首要就是执行我们的 Reduce 函数的代码了,并发生最终的功效,然后写入到 HDFS 中。 在文章的最后,提供我在撰写本文的进程中所编写的一些源代码,供各人参考。也但愿各人可以或许从本文中收成一些辅佐。 竣事语 本文首要从 HDFS 和 MapReduce 两个大的方面讲授了 Hadoop 的相干常识,而且编写了一个简朴的 MapReduce 措施,最后还深入相识了一下 MapReduce 措施的运行道理以及 Shuffle 相干的内容。 【编辑保举】
点赞 0 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |