大家好,欢迎来到IT知识分享网。
以下理论部分参考了网上的一些资料,安装部分自己实践心得(见下一篇)
目录
3.2.1、ResourceManager (RM) —— 部门经理
3.2.3、ApplicationMaster (AM) —— 项目经理
一、什么Hadoop
Hadoop是一个由Apache基金会所开发的用于解决海量数据的存储及分析计算问题的分布式系统基础架构。简单地说来,Hadoop是一个可以更容易开发和运行处理大规模数据的软件平台 。
网上大都是这么说的:
狭义上来说 ,hadoop就是单独指代hadoop这个软件
广义上来说 ,hadoop指代大数据的一个生态圈,包含很多其他软件
以下是hadoop生态圈中的技术:
二、核心组件
狭义上的Hadoop是指其核心的四个组件主要由HDFS、MapReduce、Yarn组成、Common模块。
Common模块
1、Hadoop 分布式文件系统(HDFS)
Hadoop 的核心组件之一是 HDFS(Hadoop Distributed File System)是一个分布式文件系统,用于存储文件,通过目录树来定位文件。可以将大型数据集存储在多台机器上。它的设计思想是将数据分成多个块,并将它们分别存储在不同的机器上,以提高可靠性和效率。HDFS 主要由 NameNode 和 DataNode 两部分组成。
- NameNode(nn):NN是一个中心服务器,负责管理文件系统的命名空间(namespace)以及客户端对文件的访问,其中存储了文件的元数据,包括文件名、文件目录结构、文件属性(生成时间、副本数、权限)等,以及每个文件的块列表和列表中的块与块所在的DataNode之间的地址映射关系;所有的文件系统操作,如读、写、删除等都由 NameNode 控制。
- DataNode(dn):一般是一个节点一个;负责管理它所在节点上的存储,真正用于在本地文件系统存放数据,并向 NameNode 报告存储信息;以及块数据的校验和;执行数据块的读写操作;DataNode 会定期向 NameNode 发送心跳信号,以确保数据块的完整性和可用性。DN的基本单位是块(block),默认128M。在HDFS上会保存数据的副本,默认是3个,即同一块数据会同时存储在3个不同的DN上进行备份
- Secondary NameNode(2nn):定期备份NameNode元数据;在紧急情况下,可辅助恢复NameNode。
1.1、HDFS架构图
1.2、HDFS执行步骤(写数据)
1.3、HDFS执行步骤(读数据)
1.4、Secondary NameNode工作原理
2、MapReduce (分布式计算框架)
MapReduce 是一个分布式的离线并行计算框架,是用户开发“基于 Hadoop 的数据分析应用”的核心框架。 MapReduce 核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个 Hadoop 集群上。
MapReduce计算 = Map阶段 + Reduce阶段
- Map阶段就是“分”的阶段,并行处理输入数据;
- Reduce阶段就是“合”的阶段,对Map阶段结果进行汇总;。
2.1、MapReduce执行流程
其中Map将输入的原始数据集转化为Key-Value(键-值对),拆分给不同节点并行进行指定的计算操作(例如排序、聚集),形成中间结果,这个计算操作的过程称为Map shuffle;Reduce则并行地对生成的中间结果中相同的Key的所有Value进行规约合并汇总处理后,输出新的Key-Value得到最终结果,这个处理相同Key的过程称为Reduce shuffle. 可以看出,在Map和Reduce中间,其实还有一个过程,就是对Map的输出进行整理并交给Reduce,这个过程就是shuffle. Map和Reduce操作需要我们自己定义相应的Map类和Reduce类,而shuffle则是系统自动帮我们实现的。
简单点理解,可以将Map看作是拆分数据集给不同的节点进行并行计算操作,将Reduce看作是整合每个节点的计算结果以汇总出最终结果(即Map负责分的计算,Reduce负责合的计算)。
2.2、Map Task工作机制
每个Map Task处理输入数据集合中的一片数据(InputSplit),并将产生的若干个数据片段写到本地磁盘上。Map Task整体计算流程分为以下五个阶段(其中最后三个阶段就是上面提到的 Map shuffle):
- Read阶段:Map Task通过用户编写的RecordReader从输入InputSplit中解析出一个个的Key-Value.
- Map阶段:该阶段主要将解析出来的Key-Value交给用户编写的map()函数处理,并产生新的Key-Value.
- Collect阶段:在用户编写的map()函数中,首先调用Partitioner计算该Key-Value所属的partition,并将Key-Value写入到环形缓冲区中。
- Spill阶段:即“溢写”阶段,当环形缓冲区比较满后,Map Task会将缓冲区中的数据写到本地磁盘的临时文件中,在写入文件之前,Map Task会首先对数据进行一次排序。
- Combine阶段:当该Map Task的所有数据处理结束之后,Map Task对所有生成的临时文件进行合并,确保当前的Map Task只生成一个数据文件。
2.3、Reduce Task工作机制
Reduce Task从每个Map Task上远程拷贝相应的数据片段,经分组聚集和归约后,将结果写到HDFS上作为最终结果。Reduce Task整体计算流程也分为五个阶段(其中前面三个阶段就是上面提到的 Reduce shuffle):
- Copy阶段:Reduce Task从各个Map Task上远程拷贝一片数据,并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中。
- Merge阶段:在远程拷贝数据的同时,Reduce Task启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。
- Sort阶段:按照MapReduce语义,用户编写的reduce()函数输入数据是按Key进行聚集的一组数据。为了将Key相同的数据聚在一起,Hadoop采用了基于排序的策略。由于各个Map Task已经实现对自己的处理结果进行了局部排序,因此,Reduce Task只需对所有数据进行一次归并排序即可。
- Reduce阶段:在该阶段中,Reduce Task将每组数据依次交给用户编写的reduce()函数处理。
- Write阶段:reduce()函数将计算结果写到HDFS上。
3、YARN(资源调度管理框架)
YARN(Yet Another Resource Negotiator)是一个资源调度平台,负责为运算程序提供服务器运算资源。取代了Hadoop1.x中MapReduce的资源调度管理,为上层应用(Spark, Hive-MR任务等)提供统一的资源调度管理,Hadoop2.x以后MapReduce只是运行在YARN之上的一个纯粹的计算框架。
在整个YARN资源调度管理系统当中, ResourceManager作为Master ,各个节点的NodeManager作为Slave. ResorceManager组件和HDFS的NameNode部署在一个节点上,而YARN的NodeManager、ApplicationMaster及Container(代表计算资源)和HDFS的DataNode部署在一起。
3.1、YARN基本框架
Yarn中有如下几个主要角色,同样,既是角色名、也是进程名,也指代所在计算机节点名称。
- ResourceManager(RM):核心管理服务,处理客户端请求、启动/监控ApplicationMaster、监控NodeManager、资源分配与调度。
- NodeManager(NM):单个节点上的资源管理、处理来自ResourceManager的命令、处理来自ApplicationMaster的命令。
- ApplicationMaster(AM):数据切分、为应用程序申请资源,并分配给内部任务、任务监控与容错。
- Container:对任务运行环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。
3.2、RARN的角色
3.2.1、ResourceManager (RM) —— 部门经理
RM是YARN的核心组件,或者说是YARN的master节点,一般分配在主节点上,并做HA部署。主要功能是负责处理client的job提交请求,监控NodeManager,并对集群所有资源(CPU和内存)进行管理、分配和调度,对系统中的资源有最高的支配权。可以理解为类似部门经理的角色。
RM作为资源的协调者有两个主要的组件:Scheduler和ApplicationsManager(AsM).
Scheduler负责分配最少但满足application运行所需的资源量给application. Scheduler只是基于资源的使用情况进行调度,并不负责监视或跟踪application的状态,当然也不会处理失败的task.
ApplicationsManager负责处理client提交的job以及协商第一个Container以供ApplicationMaster运行,并且在ApplicationMaster失败的时候会重新启动ApplicationMaster.
3.2.2、 NodeManager (NM) —— 组长
NM是每个子节点上的资源和任务管理器,或者说是YARN的slave节点。一方面,它会定向通过心跳信息向RM汇报本节点上的资源使用情况和各个Container的运行情况;另一方面,它会接收并处理来自RM的命令和来自ApplicationMaster的Container启动和停止等各种请求。可以理解为类似部门组长的角色。
具体运作方式是,NM会启动RM分配给ApplicationMaster的Container以及代表ApplicationMaster的Container,并且会监视Container的运行情况。
在启动Container的时候,NM会设置一些必要的环境变量以及将Container运行所需的jar包、文件等从HDFS下载到本地,也就是所谓的资源本地化。当所有准备工作做好后,才会启动代表该Container的脚本将程序启动起来。启动起来后,NM会周期性的监视该Container运行占用的资源情况,若是超过了该Container所声明的资源量,则会kill掉该Container所代表的进程。
3.2.3、ApplicationMaster (AM) —— 项目经理
一个application对应一个AM,这个进程是在其中某一个节点运行的。主要为application本身向RM申请资源,对数据进行切分,与NM通信以启动或者停止任务,监控所有任务的运行情况,并在任务失败的情况下重新申请资源并重启任务(容错功能)。可以理解为类似组长管辖下的项目的项目经理角色。
由于NM执行和监控任务需要资源,而资源的申请需要通过AM与RM沟通,获取资源。换句话说,AM起着中间人的作用,这就是好比项目经理的其中一个职责,经常需要进行资源的申请。
以更专业的角度解释,AM负责向RM索要NM执行任务所需要的资源容器,更具体来讲是AM负责从Scheduler申请资源,以及跟踪这些资源的使用情况以及任务进度的监控。
3.2.4、 Container —— 项目资源
Container是YARN对系统资源的抽象,同时它也是系统资源分配的基本单位,它封装了节点上的多维度资源,其中包括CPU、内存、磁盘、网络等。可以理解为类似项目所需要的资源,包括人员、资金、硬件等。
YARN会为每个任务分配一个Container,并且该任务只能使用该Container中描述的资源。注意,Contariner是一个动态的资源划分单位,资源是根据实际应用需求而变化的,比较类似Docker Container的概念。
3.3、YARN工作机制
4、Hadoop的优势
- 高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。
- 高扩展性:能在廉价机器组成的集群间分配任务数据,可以方便地扩展数以千计的节点。
- 高效性:在MapReduce的思想下,Hadoop是并行工作的,可以加快任务的处理速度。
- 高容错性:能够自动将失败的任务重新分配。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/110720.html

















