赞
踩
Hadoop的三大核心组件分别是:
HDFS是google三大论文之一的GFS的开源实现,是一个高度容错性的系统,适合部署在廉价的机器上的,适合存储海量数据的分布式文件系统。
在HDFS中,1个文件会被拆分成多个Block,每个Block默认大小为128M(可调节)。这些Block被复制为多个副本,被存放在不同的主机上,这也保证了HDFS的高容错性。
下图展示了HDFS的基本架构
HDFS采用Master/slave架构模式,1一个Master(NameNode/NN) 带 N个Slaves(DataNode/DN)。
从内部来看,数据块存放在DataNode上。NameNode执行文件系统的命名空间,如打开、关闭、重命名文件或目录等,也负责数据块到具体DataNode的映射。DataNode负责处理文件系统客户端的文件读写,并在NameNode的统一调度下进行数据库的创建、删除和复制工作。NameNode是所有HDFS元数据的管理者,用户数据永远不会经过NameNode。
NN:
1)负责客户端请求的响应
2)负责元数据(文件的名称、副本系数、Block存放的DN)的管理
DN:
1)存储用户的文件对应的数据块(Block)
2)要定期向NN发送心跳信息,汇报本身及其所有的block信息,健康状况
写数据流程
读数据流程
从上面的流程我们可以更清晰地理解HDFS各个组件的作用:namenode负责管理,不接触数据,datanode负责存储数据,在写数据时,每份数据复制多个副本以pipeline的方式在datanode中流动。读数据时,namenaode的作用只是提供datanode的信息,又客户端自己从datanode读取。
可以看出,HDFS的一个特点是,适合一次写入多次存取的场景。
另外还有一个小知识点,在实际应用中存储数据时,数据的第一份副本存放在离客户端最近的一台主机上,第二份副本存放在与第一台主机不同机架的主机上,第三个副本存放在与上一个副本同一个机架的不同主机上。这样也是保证了HDFS的高容错性。
为什么要把这两个放到一块说呢,因为YARN可以说是为了弥补MRv1的缺陷而诞生的,所以两者放到一块说比较合适
Hadoop的MapReduce是对google三大论文的MapReduce的开源实现,实际上是一种编程模型,是一个分布式的计算框架,用于处理海量数据的运算。
MapReduce主要由下面几个过程组成,理解了这几个过程,基本上就可以理解MapReduce了
先上一张图再说
数据从map中出来到进入reduce之前称为shuffle阶段,shuffle的处理任务:将maptask输出的处理结果数据,分发给reducetask,并在分发的过程中,对数据按key进行了分区和排序;
1、maptask收集我们的map()方法输出的k、v对,放到内存缓冲区中
2、从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件
3、多个溢出文件会被合并成大的溢出文件
4、在溢出过程中,及合并的过程中,都要调用partitoner进行分组和针对key进行排序
5、reducetask根据自己的分区号,去各个maptask机器上取相应的结果分区数据
6、reducetask会取到同一个分区的来自不同maptask的结果文件,reducetask会将这些文件再进行合并(归并排序)
7、合并成大文件后,shuffle的过程也就结束了,后面进入reducetask的逻辑运算过程(从文件中取出一个一个的键值对group,调用用户自定义的reduce()方法)
备注:Shuffle中的缓冲区大小会影响到mapreduce程序的执行效率,原则上说,缓冲区越大,磁盘io的次数越少,执行速度就越快。缓冲区的大小可以通过参数调整, 参数:io.sort.mb 默认100M
MR过程中的数据流向:一个文件在HDFS中是分布存储在不同节点的block中,每一个block对应一个Mapper,每一条数据以K,V的形式进入一个map()方法,map()方法中对数据进行处理(数据筛选,业务逻辑以及分区),再将处理结果以K,V的形式写入环形缓冲区,一个Mapper对应一个context,context对写入的数据按key进行聚合、排序、归约。context的大小默认为100M,当context容量达到80%或Mapper处理结束时,context会向外溢出,形成许多小文件,小文件为一个K和许多V的集合。处理完成后,这些文件会发送到Reducer所在节点,在该节点的context中,会对不同节点发送过来的数据按key进行再一次的聚合、排序和归约,最后进入Reducer,在reduce方法中对同一个<key,value集合>进行处理(业务逻辑),然后按照分区写入文件。
MapReduce的架构模式分为两个阶段,MR1.x和MR2.x时期,先说MR1.x,上一张图
MapReduce采用Master/Slave架构,1个JobTracker带多个TaskTracker
1)JobTracker: JT
2)TaskTracker: TT
3)MapTask
4)ReduceTask
可以看出来,这种架构模式有很大的缺陷:
出现了缺陷,就该寻找解决的办法,这时候,我们的YARN就闪亮登场了
Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。通过YARN,不同计算框架可以共享同一个HDFS集群上的数据,享受整体的资源调度。
1)ResourceManager: RM
2) NodeManager: NM
3) ApplicationMaster: AM
4) Container
5) Client
YARN将MapReduce1.x中的JobTracker拆分为两部分:ResourceManager和Applicationaster。大大减轻了ResourceManager上的资源消耗与负担,下面三MR2.x的架构图。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。