赞
踩
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,其v1.x版本主要由HDFS和MapReduce构成,而v2.x版本则是由HDFS、YARN和MapReduce构成。
上图即是Hadoop v1.x版本的架构,Hadoop是一种处理分布式数据的大数据架构,由分布式存储和并行计算编程框架构成(即底层是HDFS,上层是MapReduce)。
由于有海量的数据需要存储和计算,所以针对该类的数据(大数据)一般都是采用机架服务器集群方式来处理的(单独服务器搞不定),集群架构如下图所示。
每个DataNode(数据节点)都是一台独立的具有一定算力的存储服务器(本例中是这样,实际也可以多个DataNode部署于一台高性能服务器上),系统中唯一的NameNode(名称节点/管理节点)也是独立部署于一台服务器上的。
整个HDFS(分布式文件存储系统)是Master/Slave(主从)架构,主管是NameNode,随从是众多的DataNode,NameNode负责调度管理DataNode,DataNode负责具体的文件存储(读、写、删)。
HDFS Client是HDFS的客户端,负责发起数据操作的请求(如写数据、删数据等);
NameNode是主管,由元数据属性的Fsimage和系统操作日志的Edits两部分构成,同时负责监管其下的所有数据节点(DataNode);
DataNode是数据节点,负责文件数据的存储和读写删操作;
缓存,客户端侧的本地缓存,大小为64MB或者128MB(一旦溢出,就会生成一个Block);
下图中的数字“0,1,2,3”分别表示“Block 0、Block 1、Block 2、Block 3”。
备注:后面的过程以存储Block 0为例展开描述
直至Block 0的所有数据都写完(注意:Block 0的切片不一定是4,这里只是举例)。
HDFS Client向NameNode申请某个文件的访问,NameNode返回该文件的Block List(如下图所示),HDFS Client基于此去逐个访问读取。
上图中的红色矩形框标记的数据节点为距离NameNode最近的,从左往右的排位代表各DataNode距离HDFS Client的距离由近至远。每个Block都是优先访问最近的节点来实现文件Block的读取的,只有最近节点出现故障而访问不了时,才会访问次最近节点的Block副本数据以实现文件的读取。
HDFS解决了海量数据的存储问题,Hadoop MapReduce则是为了解决HDFS的数据处理(逻辑计算)的问题。
Hadoop MapReduce是一个快速、高效、简单的,用于编写并行处理大数据程序的,应用在大集群上的编程框架。
Hadoop MapReduce极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。其只需要简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量廉价的 PC 机器运行。从而使你写一个分布式程序,跟写一个简单的串行程序是一模一样,这就是MapReduce 编程变得非常流行的根因。
适合用MapReduce来处理的数据集(或任务),需要满足一个基本要求:待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。
Hadoop MapReduce的原理:
如上图所示,MapReduce框架的计算节点和存储节点通常是运行在同一个节点上的(方便就近取材),也就是说,运行MapReduce框架和运行HDFS文件系统的节点通常是在一起的。整个框架如同HDFS也是Master/Slave架构,由一个Job Tracker和众多的Task Tracker构成。Job Tracker负责整个框架的运行和监控,JobTracker是一个后台服务进程,启动之后,会一直监听并接收来自各个TaskTracker发送的心跳信息,包括资源使用情况和任务运行情况等信息。Job Tracker对应与HDFS的NameNode,一般也是独立部署于一台服务器上的。Task Tracker定期向JobTracker汇报本节点的健康状况、资源使用情况以及作业执行情况,接收来自JobTracker的命令,例如启动任务或结束任务等。
一个MapReduce作业通常会把输入的数据集切分为若干独立的数据块,由map任务以完全并行的方式处理它们。框架会对map的输出先进行排序,然后把结果输入给reduce任务,也可以直接将结果输出(不做reduce任务)。
通常,作业的输入和输出都会被存储在文件系统中。整个框架负责任务的调度和监控,以及重新执行已经失败的任务。
该框架的特性:
而Hadoop V2.x能很好的解决上述问题。
为了能够在Hadoop上运行更多的数据作业,解决Hadoop v1.x的缺点,Hadoop v2.x诞生了,主要就是加入了资源调度的Yarn,如下图所示。
该架构的最大优势是:不同计算框架可以共享同一个HDFS集群上的数据,享受整体的资源调度,如下图所示。
该大数据架构基于集群资源层和数据存储层,利用资源调度层来实现一套集群架构上可以部署并运行多个不同计算框架,而不仅仅是MapReduce框架,从而实现集群资源的充分利用和大数据服务能力的丰富。很明显,资源调度层的YARN是核心,它实现了不同计算框架的监控和资源调度,否则就是Hadoop v1.x。
YARN的基本思想是将资源管理和作业调度/监控的功能分解为单独的守护进程(守护进程是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。)。 这个想法是有一个全局的ResourceManager和每个应用程序的ApplicationMaster。 应用程序可以是单个作业,也可以是DAG作业。
ResourceManager是仲裁系统中所有应用程序之间资源的最终权威机构,没有获得其认可的命令都是无效的。
NodeManager是DataNode节点的总管家,负责管理该节点资源和应用。
ApplicationMaster,ApplicationMaster实例,主要负责具体应用程序的管理(比如为Task申请Core、Memory等)和NodeManager的交互。每个应用程序都对应着一个ApplicationMaster,例如:MapReduce会对应一个、Spark会对应一个,它主要负责应用程序的管理。
Container是Yarn框架的计算单元,封装了Core、Memory等资源的容器,是具体执行应用task(如map task、reduce task)的基本单位。
YARN的工作流程:
在应用程序运行期间,提交应用的客户端主动和ApplicationMaster交流获得应用的运行状态、进度更新等信息,交流的协议也是application-specific协议。
一旦应用程序执行完成并且所有相关工作也已经完成,ApplicationMaster向ResourceManager取消注册然后关闭,用到所有的Container也归还给系统。
详见https://blog.csdn.net/qq_24140237/article/details/81206963,关于Hadoop的深度学习可转此博客。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。