Hadoop(25)-高可用集群配置,HDFS-HA和YARN-HA

一. HA概述

1. 所谓HA(High Available),即高可用(7*24小时不中断服务)。

2. 实现高可用最关键的策略是消除单点故障。HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN的HA。

3. Hadoop2.0之前,在HDFS集群中NameNode存在单点故障(SPOF)。

4 .   NameNode主要在以下两个方面影响HDFS集群

NameNode机器发生意外,如宕机,集群将无法使用,直到管理员重启

NameNode机器需要升级,包括软件、硬件升级,此时集群也将无法使用

HDFS HA功能通过配置Active/Standby两个NameNodes实现在集群中对NameNode的热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方式将NameNode很快的切换到另外一台机器

二.HDFS-HA工作机制和工作要点

通过双NameNode消除单点故障

1. 元数据管理方式需要改变

内存中各自保存一份元数据;

Edits日志只有Active状态的NameNode节点可以做写操作;

两个NameNode都可以读取Edits;

共享的Edits放在一个共享存储中管理(qjournal和NFS两个主流实现);

2.  需要一个状态管理功能模块

实现了一个zkfailover,常驻在每一个namenode所在的节点,每一个zkfailover负责监控自己所在NameNode节点,利用zk进行状态标识,当需要进行状态切换时,由zkfailover来负责切换,切换时需要防止brain split现象的发生。

3.  必须保证两个NameNode之间能够ssh无密码登录

4.  隔离(Fence),即同一时刻仅仅有一个NameNode对外提供服务

三. HDFS-HA自动故障转移工作机制

自动故障转移为HDFS部署增加了两个新组件:ZooKeeper和ZKFailoverController(ZKFC)进程。ZooKeeper是维护少量协调数据,通知客户端这些数据的改变和监视客户端故障的高可用服务。HA的自动故障转移依赖于ZooKeeper的以下功能:

1. 故障检测:集群中的每个NameNode在ZooKeeper中维护了一个持久会话,如果机器崩溃,ZooKeeper中的会话将终止,ZooKeeper通知另一个NameNode需要触发故障转移。

2. 现役NameNode选择:ZooKeeper提供了一个简单的机制用于唯一的选择一个节点为active状态。如果目前现役NameNode崩溃,另一个节点可能从ZooKeeper获得特殊的排外锁以表明它应该成为现役NameNode。

ZKFC是自动故障转移中的另一个新组件,是ZooKeeper的客户端,也监视和管理NameNode的状态。每个运行NameNode的主机也运行了一个ZKFC进程,ZKFC负责:

1. 健康监测:ZKFC使用一个健康检查命令定期地ping与之在相同主机的NameNode,只要该NameNode及时地回复健康状态,ZKFC认为该节点是健康的。如果该节点崩溃,冻结或进入不健康状态,健康监测器标识该节点为非健康的。

2. ZooKeeper会话管理:当本地NameNode是健康的,ZKFC保持一个在ZooKeeper中打开的会话。如果本地NameNode处于active状态,ZKFC也保持一个特殊的znode锁,该锁使用了ZooKeeper对短暂节点的支持,如果会话终止,锁节点将自动删除。

3. 基于ZooKeeper的选择:如果本地NameNode是健康的,且ZKFC发现没有其它的节点当前持有znode锁,它将为自己获取该锁。如果成功,则它已经赢得了选择,并负责运行故障转移进程以使它的本地NameNode为Active。故障转移进程与前面描述的手动故障转移相似,首先如果必要保护之前的现役NameNode,然后本地NameNode转换为Active状态。

单节点相当不可靠,所以用多节点来解决.多节点就会涉及到两个问题--谁是主谁是从(一个写多个读),以及如何确保通信.

既然每个节点都会宕机,所以写出去的edits.log就要放到一个第三方上--qjournal,而且qjournal也是一个集群,对外提供一致性接口.

NameNode之间直接通信不可靠,所以需要一个ZooKeeper来作为中介,实时监控状态.状态为Active的才可以写,其他的只能读,以及更频繁的做原本2NN做的备份的事情

Zkfc的出现,是为了不破坏已有的代码健壮性和稳定性

如果不确定Active节点是宕机还是网络问题,千万不要贸然让另外的节点上位为Active.如果是之间的网络通信问题而贸然上位,将会产生非常严重的脑裂现象,让数据全部都不可靠

四. HDFS-HA集群配置


hadoop100


hadoop101


hadoop102


NameNode


NameNode


JournalNode


JournalNode


JournalNode


DataNode


DataNode


DataNode


ZK


ZK


ZK


ResourceManager


NodeManager


NodeManager


NodeManager

1. 配置Zookeeper集群,详见zookeeper系列文章

2. 配置HA集群 官方地址:http://hadoop.apache.org/

1). 在/opt/module/目录下创建一个文件夹

mkdir ha

2). 将/opt/module目录下的hadoop2.7.2拷贝一份至ha目录下

cp -r hadoop-2.7.2/ /opt/module/ha/

3). 删除/opt/module/ha/hadoop2.7.2目录下的data logs 以及其他没用的上传文件

4).cd etc文件夹下, 重新配置core-site.xml文件

<configuration>
<!-- 把两个NameNode)的地址组装成一个集群mycluster -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
    </property>

    <!-- 指定hadoop运行时产生文件的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/ha/hadoop-2.7.2/data/tmp</value>
    </property>
</configuration>

5). 重新配置hdfs-site.xml,如果没有配置机器间的无密登录,需要先去生成和设置.注意集群名称是要对应的,以及每个节点的host名称,以及路径,不要搞错咯~~

<configuration>
    <!-- 完全分布式集群名称 -->
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>

    <!-- 集群中NameNode节点都有哪些 -->
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
    </property>

    <!-- nn1的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>hadoop100:9000</value>
    </property>

    <!-- nn2的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>hadoop101:9000</value>
    </property>

    <!-- nn1的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>hadoop100:50070</value>
    </property>

    <!-- nn2的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>hadoop101:50070</value>
    </property>

    <!-- 指定NameNode元数据在JournalNode上的存放位置 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop100:8485;hadoop101:8485;hadoop102:8485/mycluster</value>
    </property>

    <!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>

    <!-- 使用隔离机制时需要ssh无秘钥登录-->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/nty/.ssh/id_rsa</value>
    </property>

    <!-- 声明journalnode服务器存储目录-->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/module/ha/hadoop-2.7.2/data/jn</value>
    </property>

    <!-- 关闭权限检查-->
    <property>
        <name>dfs.permissions.enable</name>
        <value>false</value>
    </property>

    <!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式-->
    <property>
          <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
</configuration>

6). 使用脚本,同步到hadoop101和hadoop102机器,(脚本参考这一章Hadoop(4)-Hadoop集群环境搭建)

xsync /opt/module/ha

五.启动HDFS-HA集群

1. 在各个JournalNode节点上,输入以下命令启动journalnode服务

  sbin/hadoop-daemon.sh start journalnode

2. 在[nn1]上,对其进行格式化,并启动

  bin/hdfs namenode -format

  sbin/hadoop-daemon.sh start namenode

3. 在[nn2]上,同步nn1的元数据信息

  bin/hdfs namenode -bootstrapStandby

4. 启动[nn2]

  sbin/hadoop-daemon.sh start namenode

5. 查看web页面显示

http://hadoop100:50070/dfshealth.html#tab-overview

http://hadoop101:50070/dfshealth.html#tab-overview

两个节点均为standby状态

6. 在[nn1]上,启动所有datanode

  sbin/hadoop-daemons.sh start datanode

六. 配置HDFS-HA故障自动转移

1). 在hdfs-site.xml中增加

<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>

在core-site.xml中增加

<property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop100:2181,hadoop101:2181,hadoop102:2181</value>
</property>

xsync同步配置文件

2). 启动

关闭所有HDFS服务:

sbin/stop-dfs.sh

启动Zookeeper集群:

bin/zkServer.sh start

初始化HA在Zookeeper中状态:

bin/hdfs zkfc -formatZK

启动HDFS服务:

sbin/start-dfs.sh

3). 验证

将Active NameNode进程kill,观察另外一个节点是否自动成为Active

kill -9 namenode的进程id

七.YARN-HA配置

1). 官方文档:

http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html

2). yarn-ha工作机制

3).集群规划


hadoop100  


hadoop101


hadoop102


NameNode


NameNode


JournalNode


JournalNode


JournalNode


DataNode


DataNode


DataNode


ZK


ZK


ZK


ResourceManager


ResourceManager


NodeManager


NodeManager


NodeManager

4). 配置yran-site.xml

<configuration>

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!--启用resourcemanager ha-->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>

    <!--声明两台resourcemanager的地址-->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster-yarn1</value>
    </property>

    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hadoop100</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop101</value>
    </property>

    <!--指定zookeeper集群的地址-->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>hadoop100:2181,hadoop101:2181,hadoop102:2181</value>
    </property>

    <!--启用自动恢复-->
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>

    <!--指定resourcemanager的状态信息存储在zookeeper集群-->
    <property>
        <name>yarn.resourcemanager.store.class</name>             <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
   </property>

</configuration>

xsync配置文件到其他机器

5). 启动

先启动hdfs-ha

启动yarn-ha

在hadoop100中执行:

sbin/start-yarn.sh

在hadoop101中执行:

sbin/yarn-daemon.sh start resourcemanager

查看服务状态

bin/yarn rmadmin -getServiceState rm1

原文地址:https://www.cnblogs.com/duoduotouhenying/p/10126317.html

时间: 2024-12-11 05:17:48

Hadoop(25)-高可用集群配置,HDFS-HA和YARN-HA的相关文章

MongoDB高可用集群配置的方案

>>高可用集群的解决方案 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. 计算机系统的高可用在不同的层面上有不同的表现: (1)网络高可用 由于网络存储的快速发展,网络冗余技术被不断提升,提高IT系统的高可用性的关键应用就是网络高可用性,网络高可用性与网络高可靠性是有区别的,网络高可用性是通过匹配冗余的网络设备实现网络设备的冗余,达到高可用的目的.比如冗余的交换机,冗余的路由器等

Hadoop 2.6.0 HA高可用集群配置详解

1 Hadoop HA架构详解 1.1 HDFS HA背景 HDFS集群中NameNode 存在单点故障(SPOF).对于只有一个NameNode的集群,如果NameNode机器出现意外情况,将导致整个集群无法使用,直到NameNode 重新启动. 影响HDFS集群不可用主要包括以下两种情况:一是NameNode机器宕机,将导致集群不可用,重启NameNode之后才可使用:二是计划内的NameNode节点软件或硬件升级,导致集群在短时间内不可用. 为了解决上述问题,Hadoop给出了HDFS的高

Hadoop完全高可用集群安装

架构图(HA模型没有SNN节点) 用vm规划了8台机器,用到了7台,SNN节点没用   NN DN SN ZKFC ZK JNN RM NM node1 *     *         node2 *     *         node3                 node4       *     *   node5       *     *   node6   *     * *   * node7   *     * *   * node8   *     * *   * 集群搭

基于Keepalived构建高可用集群配置实例(HA Cluster)

什么是集群 简单的讲集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源.这些单个的计算机系统就是集群的节点(node).一个理想的集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一个系统,而非多个计算机系统.并且集群系统的管理员可以随意增加和删改集群系统的节点. 关于更详细的高可用集群我们在后面再做详解,先来说说Keepalived Keepalived是什么 Keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbea

HA高可用集群配置

高可用集群 说明:关键业务节点,需做高可用 HA==high available heartbeat -->HA 结构图: 1. 准备:需要两台机器,一主一从,同一局域网 主:192.168.11.160 从:192.168.11.20 2. 修改下主从主机的hostname,并用bash切换 主:hostname master ; bash 从:hostname slave ; bash 3. 关闭主从机器的防火墙,配置文件/etc/selinux/config,修改SELINUX=disab

最新Hadoop-2.7.2+hbase-1.2.0+zookeeper-3.4.8 HA高可用集群配置安装

Ip 主机名 程序 进程 192.168.128.11 h1 Jdk Hadoop hbase Namenode DFSZKFailoverController Hamster 192.168.128.12 h2 Jdk Hadoop hbase Namenode DFSZKFailoverController Hamster 192.168.128.13 h3 Jdk Hadoop resourceManager 192.168.128.14 h4 Jdk Hadoop resourceMan

搭建三节点高可用集群配置步骤,zookeeper

步骤一:干净的集群,全新的hdfs在第一台主机上配置配置文件core-site.xml:<configuration><property> <name>fs.defaultFS</name> <value>hdfs://bcqm1711</value></property><property> <name>hadoop.tmp.dir</name> <value>/home/

【HA】high available高可用集群配置

主:hh.huangmingming.cn 192.168.1.31 从:yo.huangmingming.cn 192.168.1.250 主和从hosts文件配置: 192.168.1.31 hh hh.huangmingming.cn 192.168.1.250 yo yo.huangmingming.cn 一.安装epel扩展源 [[email protected] ~]# wget http://mirrors.sohu.com/fedora-epel/6/i386/epel-rele

ha高可用集群配置(双机热备)

我们用heartbeat开源软件来做ha高可用 准备两台主机A和B A  : eth1 192.168.1.100 B : eth1 192.168.1.101 给主机A修改主机名 hostname master 或者vim /etc/sysconfig/network 给主机B修改主机名 hostname slave 或者vim /etc/sysconfig/network 修改/etc/hosts文件 两台机器上都加入 192.168.1.100  master 192.168.1.101