赞
踩
背景:
数据、程序、运算资源(内存、CPU)三者组在一起,才能完成数据的计算处理过程。在单机环境下,三者之间协调配合不是太大问题。
为了应对海量数据的处理场景,Hadoop软件出现并提供了分布式处理思想。分布式环境下的三者如何协调好将成为关键。
通过对Hadoop版本演进的简单回顾,可以让我们知道YARN的产生和发展简史,洞悉YARN发展进程。
很多Hadoop的早期用户使用Hadoop的方式与在众多主机上运行桌面应用程序类似。
在少量几个节点上手工建立一个集群;
将数据载入Hadoop分布式文件系统(HDFS);
通过运行MapReduce任务来运算并获得结果;
然后拆掉集群。
Ad Hoc集群:
HOD集群:
特点:用户可以使用HOD来同时分配多个MapReduce集群。
缺点:无法支持数据本地化、资源回收效率低、无动态扩容缩容能力,多租户共享延迟高等。
共享计算集群:
共享MapReduce计算集群就是Hadoop 1.x版本里的主要架构模型。
主要组件:
JobTracker:一个中央守护进程,负责运行集群上的所有作业。
TaskTracker:系统里的从进程,根据JobTracker的指令来执行任务。
JobTracker身兼多职、压力大(作业数据管理、作业状态记录、作业调度)、可靠性和可用性欠缺(JobTracker单点故障)、计算模型单一(不能万物皆MapReduce)。
YARN集群:
对YARN的需求:
概述:
Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的Hadoop资源管理器。
YARN是一个通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度。
它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
可以把Hadoop YARN理解为相当于一个分布式的操作系统平台,而MapReduce等计算程序则相当于运行于操作系统之上的应用程序,YARN为这些程序提供运算所需的资源(内存、CPU等)。
Hadoop能有今天这个地位,YARN可以说是功不可没。因为有了YARN ,更多计算框架可以接入到 HDFS中,而不单单是 MapReduce,正式因为YARN的包容,使得其他计算框架能专注于计算性能的提升。
HDFS可能不是最优秀的大数据存储系统,但却是应用最广泛的大数据存储系统, YARN功不可没。
问:如何理解通用资源管理系统和调度平台?
概述:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nm7BCXIG-1668434421972)(assets/image-20221113163048876.png)]
MRv1介绍:
YARN介绍:
集群角色概述:
ResourceManager(RM):
NodeManager(NM):
概述:
ResourceManager负责资源管理和应用的调度,是YARN的核心组件,存在单点故障的问题。
ResourceManager Restart重启机制是使RM在重启动时能够使Yarn集群正常工作的特性,并且使RM的出现的失败不被用户知道。
重启机制并不是自动帮我们重启的意思。所以说不能解决单点故障问题。
不开启RM重启机制:如果RM出现故障重启之后,之前的信息将会消失。正在执行的作业也会失败。
设置命令:
Non-work-preserving RM restart
不保留工作的RM重启,在Hadoop 2.4.0版本实现。
Work-preserving RM restart
保留工作的RM重启,在Hadoop 2.6.0版本中实现。
保留工作与不保留工作的区别:
Non-work-preserving RM restart:
Work-preserving RM restart:
RM状态数据的存储介质:
RM的重启机制本质上是将RM内部的状态信息写入外部存储介质中。
在RM启动时会初始化状态信息的目录,当Application运行时会将相关的状态写入对应的目录下。
如果RM发生故障切换或者重启,可以通过外部存储进行恢复。
RM状态存储的实现是RMStateStore抽象类。
ZKRMStateStore:
配置:yarn-site.xml 配置启用RM重启功能,使用Zookeeper进行转态数据存储。
<property>
<name>hadoop.zk.address</name> <value>node1.itcast.cn:2181,node2.itcast.cn:2181,node3.itcast.cn:2181</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name> <value>true</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
背景:
架构:
故障转移机制:
管理员使用命令手动进行状态切换。
RM可以选择嵌入基于Zookeeper的ActiveStandbyElector来实现自动故障转移。
YARN的自动故障转移不需要像HDFS那样运行单独的ZKFC守护程序,因为ActiveStandbyElector是一个嵌入在RM中充当故障检测器和Leader选举的线程,而不是单独的ZKFC守护进程。
故障转移原理(基于zk自动切换):
YARN的Fencing机制是借助ZooKeeper数据节点的ACL权限控制来实现不同RM之间的隔离。创建的根ZNode必须携带ZooKeeper的ACL信息,目的是为了独占该节点,以防止其他RM对该ZNode进行更新。借助这个机制假死之后的RM会试图去更新ZooKeeper的相关信息,但发现没有权限去更新节点数据,就把自己切换为Standby状态。
官方构架图
概述:
主要组件:
概述:
NodeManager是每个节点上的资源和任务管理器。
概述:
职责:
当前YARN自带了两个AM实现
概述:
概述:
RPC协议组成:
客户端通过该 RPC 协议提交应用程序、查询应用程序状态等。
Admin通过该 RPC 协议更新YARN集群系统配置文件,比如节点黑白名单、用户队列权限等。
AM 通过该 RPC 协议向RM注册和撤销自己,并为各个任务申请资源。
AM 通过该 RPC 要求NM启动或者停止 Container,获取各个 Container 的使用状态等信息。
NM 通过该 RPC 协议向 RM 注册,并定时发送心跳信息汇报当前节点的资源使用情况和 Container 运行情况。
Yarn上应用类型:
尽管这两类应用程序作用不同,一类直接运行数据处理程序,一类用于部署服务(服务之上再运行数据处理程序),但运行在 YARN 上的流程是相同的。
整体概述:
当用户向 YARN 中提交一个应用程序后, YARN 将分两个阶段运行该应用程序 。
MR提交YARN交互流程:
第1步、用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster 的命令、用户程序等。
第2步、ResourceManager 为该应用程序分配第一个Container,并与对应的 NodeManager通信,要求它在这个 Container中启动应用程序的 ApplicationMaster。
第3步、ApplicationMaster 首先向 ResourceManager 注册,这样用户可以直接通过ResourceManage 查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤 4~7。
第4步、ApplicationMaster 通过 RPC 协议向 ResourceManager 申请和领取资源。
第5步、一旦 ApplicationMaster 申请到资源后,便与对应的 NodeManager 通信,要求它启动任务。
第6步、NodeManager 为任务设置好运行环境(包括环境变量、 JAR 包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
第7步、各个任务通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度,以让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过 RPC 向 ApplicationMaster 查询应用程序的当前运行状态。
第8步、应用程序运行完成后,ApplicationMaster 向 ResourceManager 注销并关闭自己。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。