加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

从HDFS和MapReduce两方面了解Hadoop

发布时间:2019-03-21 23:52:20 所属栏目:教程 来源:佚名
导读:简介 Hadoop 是一个能够对大量数据进行分布式处理的软件框架,框架最核心的设计就是:HDFS 和 MapReduce。HDFS 为海量的数据提供了存储,而 MapReduce 则为海量的数据提供了计算。这篇文章就主要从 HDFS 和 MapReuce 两个大的方面展开对 Hadoop 讲解,当然

图 3. MapReduce 程序运行图解

从HDFS和MapReduce两方面了解Hadoop
点击查看大图

Shuffle

简介,什么是 Shuffle

MapReduce 程序会确保每个 reduce 函数的输入都是按键排序的。系统执行排序以及将 map 函数的输出传给 reduce 函数的过程称之为 shuffle。整个 Shuffle 分为 Map 端和 Reduce 端,下图是 MapReduce 的 Shuffle 的一个整体概览图,大家先看一下整个图,我们后面再做进一步的解释说明。

图 4. Shuffle 概览图

从HDFS和MapReduce两方面了解Hadoop
点击查看大图

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 相关的内容。

【编辑推荐】

  1. 深入浅出Hadoop YARN
  2. Hadoop巨头完成合并,成为全球第二大开源软件公司
  3. 一套很专业的监控方案:HDFS监控落地背后的思考
  4. 大数据的技术生态?Hadoop、Hive、Spark之间是什么关系?
  5. Hadoop大数据通用处理平台
【责任编辑:未丽燕 TEL:(010)68476606】
点赞 0

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读