zoukankan      html  css  js  c++  java
  • YARN High Availablity

    1. RM Failover

     

    ResourceManager HA 由一个Active/Standby 架构实现:在任何时间点,仅有一个RM是Active,其他一个(或多个)RM节点处于Standby 模式,在Active RM发生故障后,Standby RM 取代它并接管Active的工作。触发转换成active的操作可以由管理命令完成,或是自动由内置的failover-controller完成(需要开启automatic-failover的功能)。

    2. 手动转换与failover

    当自动failover没有开启时,管理员需要手动将RM的状态转为Active。为了完成failover,首先需要将Active-RM 转换为Standby,然后将Standby-RM 转换为Active。这些均可以通过 yarn rmadmin 命令完成。

    3. 自动failover

    RMs可以配置一个内置的,基于 Zookeeper 的ActiveStandbyElector,用于决定哪个RM应该是Active的。当Active RM 出现故障下线,或者无法响应了,另一个RM会被自动推选为Active,并接管之后的工作。需要注意的是,这里没有必要像 HDFS HA 那样运行一个额外的ZKFC守护进程,因为ActiveStandbyElector 内置于RM,担任failure detector以及leader elector的角色,可以替代ZKFC守护进程

    4. 客户端,ApplicationMaster 以及 NodeManager RM failover

    当集群中有多个RM时,客户端以及节点所使用的 yarn-site.xml配置文件中,需要列出所有的RMs。客户端,AM以及NM会尝试以轮询的方式去连接RMs,直到命中Active RM。如果Active RM 下线了,则它们会重新尝试轮询,直到命中新的Active RM。默认的重试逻辑由org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider.可以通过实现org.apache.hadoop.yarn.client.RMFailoverProxyProvider类并设置参数 yarn.client.failover-proxy-provider 为实现的类名,以覆盖默认的实现。

    5. 恢复前一个active-RM 的状态

    在ResourceManager Restart的功能开启后,RM可以被提升为active 状态。加载RM的内部状态数据,并尽可能地从前一个active RM 终止的点继续工作(依赖于RM restart的功能)。对于前Active RM 管理的每个提交的application,均会发起一个新的attempt。Applications可以定期做checkpoint,以防止丢失任何工作。存储的RM 应用状态的 state-store 必须均可被Active/Standby RM 访问。对于状态数据持久化,当前有两种实现RMStateStore 的方式:FileSystemRMStateStore 和 ZKRMStateStore。ZKRMStateStore 在任何时刻仅允许一个RM 拥有写权限,所以它时在HA集群中被推荐使用的方式。在使用ZKRMStateStore时,没有必要再单独增加一个fencing机制(此机制防止可能的脑裂状态),因为多个RM可以自行assume the Active role。

    在使用ZKRMStateStore时,建议不要在Zookeeper中设置zookeeper.DigestAuthenticationProvider.superDigest 属性,以确保zookeeper admin 没有访问 yarn application/user credential 信息的权限。

    6. 部署

    下面是YARN HA 有关配置项:

    1. yarn.resourcemanager.zk-address

    ZK-quorum的地址,用于state-store以及embedded leader-election

    2. yarn.resourcemanager.ha.enabled

    Enable HA

    3. yarn.resourcemanager.rm-ids

    列出RMs的逻辑 id,如:

    <property>

        <name>yarn.resourcemanager.ha.rm-ids</name>

        <value>rm1,rm2,rm3</value>

      </property>

    4. yarn.resourcemanager.hostname.rm-id

    对每个 rm-id,设置它对应的RM hostname,如:

    <property>

        <name>yarn.resourcemanager.hostname.rm1</name>

        <value>xx.xx.xx.xx</value>

      </property>

    5. yarn.resourcemanager.address.rm-id

    对每个rm-id,指定host:port地址,用于客户端提交job。在指定后,会覆盖 yarn.resourcemanager.hostname.rm-id 里的内容,例如:

    <property>

        <name>yarn.resourcemanager.address.rm1</name>

        <value>ip-xx.xx.xx.xx:8032</value>

      </property>

    6. yarn.resourcemanager.ha.automatic-failover.enabled

    开启自动failover功能,仅当HA功能开启后才开启此功能

    7. yarn.resourcemanager.ha.automatic-failover.embedded

    使用内置的 leader-elector 选择Active RM,仅当 HA 功能开启后才开启此功能

    8. yarn.resourcemanager.cluster-id

    集群标识符,elector 使用此属性以确保某个RM不会接管另一集群的工作,例如:

    <property>

        <name>yarn.resourcemanager.cluster-id</name>

        <value>ha-rm-uri</value>

      </property>

    7. 管理命令

    yarn rmadmin 提供了部分 HA 相关的命令,用于检查RM 的健康状态,并转换某个RM的状态到Active/Standby。命令接受的 RM id为配置文件中 yarn.resourcemanager.ha.rm-ids 中指定的id。

    常规命令如:

    > yarn rmadmin -getServiceState rm1

    standby

    > yarn rmadmin -getServiceState rm3

    active

    > yarn rmadmin -getAllServiceState

    ip-x.x.x.x:8033     standby

    ip-y.y.y.y:8033     standby

    ip-z.z.z.z:8033      active

    如果开启了自动failover的功能,则无法手动做transition。不过仍可以通过加上 -forcemanual 的标识进行强制手动failover(不建议):

    > yarn rmadmin -transitionToActive rm1

    Automatic failover is enabled for org.apache.hadoop.yarn.client.RMHAServiceTarget@1ea9f6af

    Refusing to manually manage HA state, since it may cause

    a split-brain scenario or other incorrect state.

    If you are very sure you know what you are doing, please

    specify the --forcemanual flag.

    也可以在zookeeper 里查看对应 active 的 RM

    > get /yarn-leader-election/ha-rm-uri/ActiveBreadCrumb

    ha-rm-uri


    rm1

    > get /yarn-leader-election/ha-rm-uri/ActiveStandbyElectorLock

    ha-rm-uri


    rm1

    8. Web Service and UI

    在 standby RM 也是正常运行的情况下,在访问standby RM 的 web UI 地址时,会自动转发请求到Active 的 RM,除了“About”页面

    对于发往standby RM 的 Yarn Web Service (如 yarn REST APIs)的请求,standby RM 也会自动重定向到Active 的 RM

    References:

    https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html

  • 相关阅读:
    迭代器和生成器
    20.03.23作业
    装饰器
    集合
    元组类型
    字典类型
    列表类型
    字符串类型
    for循环
    深浅copy与while循环
  • 原文地址:https://www.cnblogs.com/zackstang/p/10812523.html
Copyright © 2011-2022 走看看