YARNResourceManagerHA
YARN(MRv2)ResourceManager⾼可⽤性
YARN ResourceManager负责跟踪集群中的资源并调度应⽤程序(例如,MapReduce作业)。在CDH 5之前,ResourceManager是YARN 群集中的单点故障。ResourceManager⾼可⽤性(HA)以主备ResourceManager对的形式添加冗余来消除此单点故障。此外,从活动的ResourceManager故障切换到备⽤时,应⽤程序可以从保存的state store 恢复; 例如,如果在MapReduce作业中的映射任务完成后发⽣了ResourceManager的故障转移,则映射任务不会再次运⾏。这样可以处理以下事件,⽽不会对正在运⾏的应⽤程序产⽣任何显着的性能影响:
未计划的事件,例如机器崩溃
计划维护事件,例如运⾏ResourceManager的机器上的软件或硬件升级
ResourceManager HA需要运⾏ZooKeeper和HDFS服务。
继续阅读:
Architecture架构
使⽤Cloudera Manager配置YARN(MRv2)ResourceManager⾼可⽤性
使⽤命令⾏配置YARN(MRv2)ResourceManager⾼可⽤性
使⽤YARN的rmadmin管理ResourceManager HA
Architecture架构
ResourceManager HA通过ResourceManager 的主备对来实现。在启动时,每个ResourceManager都处于standy状态; 进程已启动,但状态为未加载。当其中⼀个资源管理器转换为活动状态时,ResourceManager从指定的state store 加载内部状态并启动所有内部服务。转换活动状态可以由管理员(通过CLI)或⾃动故障转移触发。以下⼩节提供了有关ResourceManager HA组件的更多详细信息。
ResourceManager重新启动
如果启⽤恢复功能,重新启动ResourceManager允许恢复正在运⾏的应⽤程序。为此,ResourceManager将其内部状态(主要是应⽤程序相关的数据和令牌)存储到ResourceManagerStateStore; 当NodeManager连接时重新构建群集资源。可以替代的state store 是MemoryResourceManagerStateStore (基于内存的实现), FileSystemResourceManagerStateStor
e (基于⽂件系统的实现; HDFS可⽤于⽂件系统)和 ZKResourceManagerStateStore (基于ZooKeeper的实现)。
Fencing隔离
当运⾏两个资源管理器时,在两个资源管理器都假定它们处于活动状态时会出现裂脑情况。为了避免这种情况,只有⼀个ResourceManager应该能够执⾏主动操作,⽽另⼀个ResourceManager应该被“隔离”。基于ZooKeeper的状态存储ZKResourceManagerStateStore 只允许单个ResourceManager对存储状态进⾏更改,并隐式隔离其他ResourceManager。这是通过ResourceManager声明对根znode的独占创建 -删除权限来完成的。root znode 上的ACL是基于ACLs配置⾃动创建的; 对于安全集群,Cloudera建议您为根主机设置ACL,以便两个ResourceManagers共享读写管理员访问权限,但具有独占的创建 - 删除访问权限。防护是隐含的,不需要显式配置(如HDFS和MRv1中的fencing需要显⽰配置)。 可以根据需要插⼊⾃定义的“Fencer”- 例如,使⽤不同的状态存储实现。
配置和故障转移代理
在HA设置中,应该配置两个ResourceManager以使⽤不同的端⼝(例如,不同主机上的端⼝)。为了促进这⼀点,YARN使⽤ResourceManager标识符的概念(rm-id)。每个ResourceManager都有⼀个唯⼀的rm-id,以及所有RPC配置(<rpc-address>; for sourcemanager.address)
可以通过配置 <rpc-address>.<rm-id>完成。即使在故障转移后,客户端,ApplicationMaster 和NodeManagers也会使⽤这些RPC地址⾃动与活动的ResourceManager进⾏通信。为了实现这⼀点,他们循环遍历配置中的资源管理器列表。这是⾃动完成的,不需要任何配置(如在HDFS和MapReduce(MRv1)中那样)。山水蒙卦详解
⾃动故障转移
默认情况下,ResourceManager HA使⽤ZKFC(基于ZooKeeper的故障转移控制器)进⾏⾃动故障转移。在内部, StandbyElector ⽤于选择活动的ResourceManager。故障切换控制器作为ResourceManager的⼀部分运⾏(不像HDFS和MapReduce v1中的单独进程),并且在l中配置适当的属性后不需要进⼀步设置。
如果您愿意,可以插⼊⾃定义故障转移控制器。
⼿动转换和故障转移
您可以使⽤命令⾏⼯具 yarn rmadmin 将特定的ResourceManager转换为活动或备⽤状态,从⼀个ResourceManager故障切换到另⼀个,获取ResourceManager的HA状态以及监控ResourceManager的健康状况。
使⽤Cloudera Manager配置YARN(MRv2)ResourceManager⾼可⽤性
最低要求的⾓⾊: 群集管理员(也由完全管理员提供)
您可以使⽤Cloudera Manager为CDH 5或更⾼版本配置ResourceManager⾼可⽤性(HA)。Cloudera Manager⽀持ResourceManager 的⾃动故障转移。它不提供通过Cloudera Manager⽤户界⾯⼿动强制进⾏故障转移的机制。
重要提⽰:启⽤或禁⽤HA将导致先前的监控历史记录不可⽤。
启⽤⾼可⽤性
1. 转到YARN服务。
2. 选择Actions > Enable High Availability 。显⽰有资格运⾏备⽤ResourceManager的主机的屏幕。当前ResourceManager运⾏的主机不
可⽤作为选择。
3. 选择要安装备⽤ResourceManager的主机,然后单击继续。Cloudera Manager继续运⾏⼀组停⽌YARN服务的命令,添加备⽤
ResourceManager,在ZooKeeper中初始化ResourceManager⾼可⽤性状态,重新启动YARN并重新部署相关的客户端配置。
4. 在Cloudera Manager中启⽤ResourceManager HA时,默认情况下会为ResourceManager启⽤保留⼯作恢复。有关更多信息(包括禁⽤
保留恢复⼯作的说明),请参阅⼯作保留YARN组件的恢复。
注意: ResourceManager HA不会影响JobHistory服务器(JHS)。JHS不保持任何状态,所以如果主机出现故障,您可以简单地将其分配给新的主机。您也可以通过执⾏以下操作来启⽤流程⾃动重新启动:
1. 转到YARN服务。
2. 单击配置选项卡。
3. 选择范围 > JobHistory服务器。
4. 选择类别 > ⾼级。
5. 找到⾃动重新启动进程属性或通过在搜索框中键⼊它的名称来搜索它。
6. 点击修改个⼈值
7. 选择JobHistory服务器默认组。
8. 重新启动JobHistory服务器⾓⾊。
禁⽤⾼可⽤性
1. 转到YARN服务。
2. 选择操作 > 禁⽤⾼可⽤性。显⽰运⾏ResourceManagers的主机的屏幕。
< source manag er.addr ess.
<rm-id>Res
ourc
eMa
蜂蜜减肥的正确吃法nage
r,
Clie
nt
(None)
Cluster-
specific
The value sourcemanager. address (Client-
ResourceManager RPC) for this ResourceManager. Must be
t for all ResourceManagers.
< source manag er.sche duler.a ddress. <rm-id>Res
ourc
eMa
nage
r,
Clie
nt
(None)
Cluster-
specific
The value sourcemanager. scheduler.address (AM-
ResourceManager RPC) for this ResourceManager. Must
bet for all ResourceManagers.
礼物英文 source manag er.admi n.addr ess.
<rm-id>Res
ourc
eMa
沈石溪的书nage
r,
Clie
nt/A
dmi
n
(None)
Cluster-
specific
The value sourcemanager. admin.address
(ResourceManager administration) for this ResourceManager.
Must be t for all ResourceManagers.
< source so urce-tracker .addres s.<rm-id>Res
ourc
eMa
nage
r,
Nod
eMa
nage
r
(None)
Cluster-
specific
The value sourcemanager. resource-tracker.address
(NM-ResourceManager RPC) for this ResourceManager. Must
be t for all ResourceManagers.
家庭打印机< source manag er.web app.ad dress. <rm-id>Res
ourc
eMa
nage
r,
Clie激动得
nt
(None)
Cluster-
specific怎样写申请
The value sourcemanager. webapp.address
(ResourceManager webapp) for this ResourceManager.Must
be t for all ResourceManagers.
< source abled Res
ourc
eMa
nage
r
fal true Enable job recovery on ResourceManager restart or failover.
< source manag er.stor e.class Res
ourc
eMa
nage
r
org.apache.ha
doop.
yarn.rver.
resourcemana
ger. recovery.
FileSystemRes
如何做好办公室工作
ourceManager
StateStore
org.apache.
hadoop.yarn.
rver.
resourceman
ager.
recovery.
ZKResource
ManagerStat
eStore
The ResourceManagerStateStore implementation to u to
store the ResourceManager's internal state. The ZooKeeper-
bad store supports fencing implicitly. That it, it allows a
single ResourceManager to make multiple changes at a time,
and hence is recommended.
< source manag er. zk-addres Res
ourc
eMa
nage
(None)
Cluster-
specific
The ZooKeeper quorum to u to store the
ResourceManager's internal state.
名称使⽤默认值推荐值描述
s r
<
source
manag
er. zk-
acl
Res ourc eMa nage r world:anyone:r wcda Cluster-specific The ACLs the ResourceManager us for the znode structure to store the internal
source
manag
er.zk-
state-
store.r
oot-
node.a
cl Res ourc eMa nage r (None)Cluster-specific The ACLs ud for the root host of the ZooKeeper state store. The ACLs t here should allow both ResourceManagers to read, write, and administer, with exclusive access to create and delete. If nothing is specified,the root host ACLs are automatically generated on the basis of the ACLs specified sourcemanager.zk-acl.But that leaves a curity hole in a cure tup.
名称
使⽤默认值推荐值描述配置⾃动故障转移:
在l中配置以下其他属性以配置⾃动故障转移。
配置⼯作保持恢复:
或者,您可以为资源管理器和节点管理器配置⼯作保留恢复。请参阅⼯作保留YARN组件的恢复。
图⽚.png
以下是⼀个⽰例l,显⽰配置的这些属性,包括保留ResourceManager和NM的恢复⼯作:<configuration>
<!-- Resource Manager Configs -->
<property>
<name&-interval.ms</name>
<value>2000</value>
</property>
<property>
<name&abled</name>
<value>true</value>
</property>
<property>
<name&sourcemanager.abled</name>
<value>true</value>