赞
踩
# 1、Hadoop YARN
介绍:集群资源管理 任务调度
3大组件 架构
程序在yarn运行流程:以mr程序提交为例
yarn调度器
# 2、Hadoop HA集群
高可用概念:持续可用 一直可用
解决单点故障问题 主备集群
Hadoop HDFS HA实现方案--QJM、YARN HA
yarn是一个通用资源管理系统和调度平台。
通用: 也就是哪怕不是Hadoop中的组件,通过一定的规则接入yarn集群,也可以进行资源的申请和使用.
例如: spark, flink, sqoop…
资源指的跟程序运行相关的硬件资源 比如:CPU RAM
由于Yarn的出现,让Hadoop不再是单一的软件平台,而是一个通用的大数据生态.
思考: Yarn为什么能够通用?
- Yarn不需要考虑任务具体怎么做,只需要分配资源即可
- 所有的使用Yarn进行资源调度的任务,只要满足Yarn的资源申请机制,就可以获取资源并执行
- 任务的执行逻辑,由任务所使用的框架进行编写和管理,无需向Yarn中提交,也无需遵循特定的规则
- Yarn可以分配的资源有 内存和cpu
物理层面上-2个组件
主角色 resourcemanager (RM)
ResourceManager 负责整个集群的资源管理和分配,是一个全局的资源管理系统。
是程序申请资源的唯一入口 负载调度。
nodemanager会向resourcemanager中汇报自己所在服务器的资源状况,当接收到资源请求时,resourcemanager会根据资源使用情况从nodemanager 中挑选合适的服务执行任务.
从角色 nodemanager (NM)
nodemanager 负责每台机器上具体的资源管理 负责启动 关闭container容器
容器: 在yarn集群中,nodemanager 会将自己所在服务器的资源(内存,cpu)预先拆分为大小不同的容器
例如: 一个服务中内存 4G cpu核心 4个 拆分为三个容器
容器1: 1G 1核
容器2: 1G 1核
容器3: 2G 2核
容器与容器之间的资源不共享,也就是在第一个容器中执行的任务,不会收到第二个容器中任务的影响.
# 1. 如果申请的资源是10M 此时会分配给他哪个容器????
容器1 和 容器2 均可
# 2. 如果申请的资源是3G 此时会分配给他哪个容器????
此时系统会将容器1 和容器3合并将合并后的容器分配给该任务
# 3. 如果申请的资源是5G 此时会怎样???
直接报错
程序内部–1个组件
ApplicationMaster AM (AM不是集群,而是在nodemanager启动的容器中运行的一个程序)
yarn集群不关心任务具体的执行逻辑,此时就由ApplicationMaster去进行管理,监控和执行
ApplicationMaster是怎么创建出来的?
- 编写依托于Yarn的计算程序(申请资源, 创建AM, 计算逻辑)的时候,需要按照Yarn的规则来编写申请资源的代码
- Yarn中申请资源的规则中,就需要实现ApplicationMaster,此时Application就是一串代码
- 当任务向Yarn中成功申请到资源后,会由指定的NodeManager在容器中运行AM的相关代码
- AM向RM申请资源运行计算逻辑代码,在运行过程中,进度,异常,资源使用全程由AM负责管理.
yarn作为通用资源管理系统 不关心程序的种类和程序内部的执行情况? 谁来关心程序内部执行情况? 比如MapReduce程序来说,先maptask 再运行reducetask. 需要一个组件来管理程序执行情况 程序内部的资源申请 各阶段执行情况的监督 #为了解决这个问题 yarn提供了第三个组件 applicationmaster (男)主人,雇主; 主宰; 主人; 有控制力的人; 能手; 擅长…者; #把applicationmaster称之为程序内部的老大角色 负责程序内部的执行情况 #AM针对不同类型的程序有不同的具体实现 yarn默认实现了MapReduce的AM 名字叫做MrAppMaster. 其他软件比如spark flink需要实现自己的AM 才能在yarn运行。 #结论:在上述设计模式下 任何种类程序在yarn运行,首先都是申请资源运行AM角色,然后由AM控制程序内部具体的执行。
计算程序运行过程中, ApplicationMaster与哪些服务建立了通信关系?
- 与ResourceManager建立心跳关系,并申请资源
- 与NodeManager建立联系,初始化容器
- 与Clinet建立联系,实时汇报任务进度
整个执行过程,申请了几次资源?(2次)
第一次Client向RM申请资源: 启动AM程序
第二次AM向RM申请资源: 执行计算任务
问题: 根据谁上述图解,Yarn只能给MR分配资源么?
上述内容只是以MR任务为例进行了处理.我也可以执行其他的任务
所谓的调度器指的是当集群繁忙的时候 如何给申请资源的程序分配资源
如果资源充足,则不需要资源分配规则,直接每个人拿满就可以了.
scheduler属于ResourceManager功能
资源调度器(scheduler),决定了资源不足时,哪个任务占用资源多,哪个任务占用资源少
哪个任务先执行,哪个任务后执行
YARN3大调度策略
FIFO Scheduler 先进先出策略
容量调度,就是将资源划分为几个队列,每个队列占用的资源比例不同
多个队列间,可以实现并行,同时执行对应的操作
单个队列中是先进先出策略
Apache版本的调度策略默认是capacity
优点: 可以实现多任务同时执行,且任务间不会挤占对方的资源
缺点: 如果1队列资源紧缺,2队列资源空闲,无法互相协调使用资源,造成资源浪费.
公平调度,就是每一个任务运行时,平分当前的现有资源,如果程序执行完成后,将资源归还由剩余的任务平分
公平调度时CDH版本的Hadoop默认的调度模式
优点: 最大限度的使用资源,资源不浪费
缺点: 任务间没有权重,占用资源比例相同.
Apache Hadoop版本默认策略是capacity 。CDH商业版本默认策略是Fair。
在配置端口下可以查看yarn使用的调度策略和队列详情
决定调度策略的参数
#yarn-site.xml
yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
#还可以在yarn 8088页面查看
HA叫做高可用模式 注意解决的是单点故障问题。 SPOF
什么是单点故障?
就是一个服务或者一个服务器的故障,将导致整个集群的无法使用,那么这个服务,或者这个服务器就是单点故障.
Hadoop中单点故障
** 解决单点故障,使用的是主(Active)备(Standby)方案,那么对备用机有什么要求呢?**
性能: standby节点的性能尽量和Active节点相同或相似,满足集群的基本使用要求
功能: Active节点具备的功能, Standby节点必须全部具备.
数据: Active节点中的数据内容,和Standby节点中的数据要时刻同步,保证数据完全一致.
思考: 如果容错控制器说NN宕机了,但是NN正在正常运行会怎样???
如果zkfc说NN挂了,没挂也挂了,如果真的没挂, 补刀. 这样的操作可以避免脑裂现象
思考2: 什么是脑裂现象?
在主备切换时, 一个集群中有两个Active状态的NameNode,或者没有NameNode都是脑裂.
zkfc的三个功能:
- 监控和记录NN的健康状况
- 监控zk节点,记录当前的NN是Active节点还是Standby节点
- 在zk中创建节点,并且保持会话(会话中断节点消失), 如果创建失败则注册监听.
Resourcemanager HA --基于zk实现
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。