3、溢写
因为内存缓冲区的大年夜小限制(默认100MB),当map task输出结不雅很多时就可能产生内存溢出,所以须要在必定前提下精华冲区的数据临时写入磁盘,然后从新应用这块缓冲区。这个大年夜内存往磁盘写数据的过程被称为Spill,中文可译为溢写。
这个溢写是由别的零丁线程来完成,不影响往缓冲区写map结不雅的线程。
全部缓冲区有个溢写的比例spill.percent。这个比例默认是0.8,
Combiner 将有雷同key的 key/value 对加起来,削减溢写spill稻磁逄的数据量。Combiner的实用处景:因为Combiner的输出是Reducer的输入,Combiner毫不克不及改变最终的计算结不雅。龟大年夜多半情况下,combiner实用于输入输出的key/value类型完全一致,且不影响最终结不雅的场景(比如累加、最大年夜值等……)。
4、Merge
map 很大年夜时,每次溢写会产生一个 spill_file,如许会有多个 spill_file,而最终的输出只有一个文件,在最终输出之前会对多个中心过程多次产生的溢写文件 spill_file 进行归并,此过程就是 merge。
merge 就是把雷同 key 的结不雅加起来。(当然,如不雅设置过combiner,也会应用combiner来归并雷同的key)
Hadoop 设计为仅运行 MapReduce 功课。跟着替代性的编程模型(比如 Apache Giraph 所供给的图形处理)的到来,除 MapReduce 外,越来越须要为可经由过程高效的、公平的方法在同一个集群上运行并共享资本的其他编程模型供给支撑。
- 原MapReduce框架的不足
- JobTracker是集群事务的集中处理点,存在单点故障
- JobTracker须要完成的义务太多,既要保护job的状况又要保护job的task的状况,造成过多的资本消费
- 在taskTracker端,用map/reduce task作为资本的表示过于简单,没有推敲到CPU、内存等资本情况,当把两个须要消费大年夜内存的task调剂到一路,很轻易出现OOM
- 把资本强迫划分为map/reduce slot,当只有map task时,reduce slot不克不及用;当只有reduce task时,map slot不克不及用,轻易造成资本应用不足。
- 解决可伸缩性问题
四、Reduce Shuffle

1、reduce shuffle
在 reduce task 之前,赓续拉取当前 job 琅绫强个 maptask 的最终结不雅,然后对大年夜不合处所拉取过来的数据赓续地做 merge ,也最终形成一个文件作为 reduce task 的输入文件。
2、copy
Reduce过程启动一些数据copy线程(Fetcher),经由过程HTTP方法请求map task地点的TaskTracker获取map task的输出文件。因为maptask早已停止,这些文件就归TaskTracker治理在本地磁盘中。
3、merge
Copy 过来的数据会先放入内存缓冲区中,这里的缓冲区大年夜小要比 map 端的更为灵活,它基于 JVM 的 heap size 设置,因为 Shuffle 阶段 Reducer 不运行,所以应当把绝大年夜部分的内存都给 Shuffle 用。这里须要强调的是,merge 有三种情势:1)内存到内存 2)内存稻磁逄 3)磁盘稻磁逄。默认情况下第一种情势不启用,让人比较困惑,是吧。当内存中的数据量达到必定阈值,就启动内存稻磁逄的 merge 。与 map 端类似,这也是溢写的过程,这个过程中如不雅你设置有Combiner,也是会启用的,然后在磁盘中生成了浩瀚的溢写文件。第二种merge方法一向在运行,直到没有 map 端的数据时才停止,然后启动第三种磁盘稻磁逄的 merge 方法生成最终的那个文件。
4、reducer的输入
merge 的最后会生成一个文件,大年夜多半情况下存在于磁盘中,然则须要将其放入内存中。当reducer 输入文件已定,全部 Shuffle 阶段才算停止。然后就是 Reducer 履行,把结不雅放到 HDFS 上。
C、YARN
YARN(Yet Another Resource Negotiator),下一代MapReduce框架的名称,为了轻易记忆,一般称为MRv2(MapReduce version 2)。该框架已经不再是一个传统的MapReduce框架,甚至与MapReduce无关,她是一个通用的运行时框架,用户可以编写本身的计算框架,在该运行情况中运行。用于本身编写的框架作为客户端的一个lib,在应用提交功课时打包即可。
五、why YARN instead of MR
MR 的缺点
经典 MapReduce 的最严重的限制重要关系到可伸缩性、资本应用和对与 MapReduce 不合的工作负载的支撑。在 MapReduce 框架中,功课履行受两种类型的过程控制:
- 一个称为 JobTracker 的重要过程,它调和在集群上运行的所有功课,分派要在 TaskTracker 上运行的 map 和 reduce 义务。
- 很多称为 TaskTracker 的下级过程,它们运行分派的义务并按期向 JobTracker 申报进度。
- 大年夜型的 Hadoop 集群浮现出了由单个 JobTracker 导致的可伸缩性瓶颈。
【编辑推荐】
- Hadoop伪分布式搭建操作步调指南
- 嫌弃Hadoop?可能是你的打开方法有问题
- 若何为Hadoop集群选择精确的硬件
- 深度解析:Spark优于Hadoop吗?
- 你须要懂得关于Hadoop与大年夜数据的12个事实
此外,较小和较大年夜的 Hadoop 集群都大年夜未最高效地应用他们的计算资本。在 Hadoop MapReduce 中,每个从属节点上的计算资本竽暌股集群治理员分化为固定命量的 map 和 reduce slot,这些 slot 弗成替代。设定 map slot 和 reduce slot 的数量后,节点在任何时刻都不克不及运行比 map slot 更多的 map 义务,即使没有 reduce 义务在运行。这影响了集群的应用率,因为在所有 map slot 都被应用(并且我们还须要更多)时,我们无法应用任何 reduce slot,即使它们可用,反之亦然。
推荐阅读
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 存眷科技范畴很难跟上行业的>>>详细阅读
本文标题:Hadoop面试,有它就够了
地址:http://www.17bianji.com/lsqh/39155.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示