zoukankan      html  css  js  c++  java
  • Hadoop的配置文件设置(HDFS HA)

    Hadoop 2.7.4 + HBase 1.2.6 + ZooKeeper 3.4.10 配置

    本文为上述配置的一部分,为方便阅读,故设为独立页面

    参考:http://hadoop.apache.org/docs/r2.7.4/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

    各虚拟节点配置

       

    YARN

    HDFS

         

    hostname

    IP

    ResourceManager

    NodeManager

    NameNode

    DataNode

    Zookeeper

    JournalNode

    Process

    master

    192.168.2.1

    Y

     

    Y

     

    Y

    Y

    NameNode
    JournalNode
      DFSZKFailoverController
    QuorumPeerMain
    ResourceManager

    slave1

    192.168.2.2

    Y

    Y

    Y

    Y

    Y

    Y

    NameNode
    JournalNode
      DFSZKFailoverController
    DataNode
    QuorumPeerMain
    ResourceManager
    NodeManager

    slave2

    192.168.2.3

     

    Y

     

    Y

    Y

    Y

    JournalNode
    DataNode
    QuorumPeerMain
    NodeManager

    1:原理

    hadoop 2.x 中支持NFS及QJM (Quorum Journal Manager), QJM 是由Cloudera 提出的基于Paxos的方案

    Hadoop提供了ZKFailoverController角色,部署在每个NameNode的节点上,作为一个deamon进程, 简称zkfc,示例图如下

    ZKFailoverController 主要包括三个组件:

    1. HealthMonitor:              监控NameNode是否处于unavailable或unhealthy状态,当前通过RPC调用NN相应的方法完成
    2. ActiveStandbyElector:       管理和监控自己在ZK中的状态
    3. ZKFailoverController         它订阅HealthMonitor 和ActiveStandbyElector 的事件,并管理NameNode的状态

    ZKFailoverController主要职责:

    1. 健康监测:周期性的向它监控的NN发送健康探测命令,从而来确定某个NameNode是否处于健康状态,如果机器宕机,心跳失败,那么zkfc就会标记它处于一个不健康的状态
    2. 会话管理:如果NN是健康的,zkfc就会在zookeeper中保持一个打开的会话,如果NameNode同时还是Active状态的,那么zkfc还会在Zookeeper中占有一个类型为短暂类型的znode,当这个NN挂掉时,这个znode将会被删除,然后备用的NN,将会得到这把锁,升级为主NN,同时标记状态为Active
    3. 当宕机的NN新启动时,它会再次注册zookeper,发现已经有znode锁了,便会自动变为Standby状态,如此往复循环,保证高可靠,需要注意,目前仅仅支持最多配置2个NN
    4. master选举:如上所述,通过在zookeeper中维持一个短暂类型的znode,来实现抢占式的锁机制,从而判断那个NameNode为Active状态

    2:配置

    Hadoop HA的配置包括2部分,HDFS HA用于NameNode及YARN HA用于ResourceManager, 本节先配置hdfs ha

    创建journal临时目录:/home/mytestzk/Hadoop-2.7.4/tmp/journal

    • 修改core-site.xml,增加节点ha.zookeeper.quorum

    • 修改hdfs-site.xml

    删除节点dfs.namenode.secondary.http-address,并增加以下配置节点(红框内):

     

    3:首次启动:

    • 3.1 首先启动zookeeper集群, 分别在master, slave1, slave2执行以下命令

      ./bin/zkServer.sh start    

    • 3.2 初始化HA空间,在master namenode节点执行命令,格式化zkfc,在zookeeper中生成znode节点,用来保存HA或failover的数据

      ./bin/hdfs zkfc -formatZK

    • 3.3 启动journalnode集群, 在每个节点用如下命令启日志程序

             NameNode将元数据操作日志记录在JournalNode上,主备NameNode通过记录在JouralNode上的日志完成元数据同步

         ./sbin/hadoop-daemon.sh start journalnode

    • 3.4 格式化主namenode节点

            ./bin/hdfs namenode -format mycluster

    • 3.5 初始化JournalNode (直接配置HA时不需要这步)

       如果是非HA转HA才需要这一步,在其中一个JournalNode上执行以下命令,用namenode的edits初始化JournalNode:

      bin/hdfs namenode -initializeSharedEdits

    •  3.6 启动NameNode

    在主namenode节点,执行命令启动namenode:./sbin/hadoop-daemon.sh start namenode

    在备namenode节点,首先执行命令:./bin/hdfs namenode -bootstrapStandby

    这个是把备namenode节点的目录格式化并把元数据从主namenode节点copy过来,并且这个命令不会把journalnode目录再格式化了

    然后再执行命令启动备namenode进程:./sbin/hadoop-daemon.sh start namenode

    • 3.7 启动ZKFC,在两个namenode节点都执行以下命令

            ./sbin/hadoop-daemon.sh start zkfc

    • 3.8 启动datanode, 在所有datanode节点都执行以下命令

           ./sbin/hadoop-daemon.sh start datanode

     

    4:正常启动结束方法:

    启动:

             下次启动的时候,先启动zookeeper,然后执行以下命令就可以全部启动所有进程和服务了:

             ./sbin/start-dfs.sh

    结束:

             停止所有HDFS相关的进程服务,执行以下命令:

             ./sbin/stop-dfs.sh

    5:测试HA的高可用性

    在active namenode上执行如下命令关闭namenode: sbin/hadoop-daemon.sh stop namenode 

    然后访问以下两个地址查看namenode的状态:

    http://master:50070/dfshealth.html

    http://slave1:50070/dfshealth.html

     

    从HDFS Non-HA 升级到 HDFS HA

    • 停止HDFS:./sbin/stop-dfs.sh
    • 修改配置文件 core-site.xml, hdfs-site.xml并覆盖到每台机器上
    • 启动zookeeper
    • 启动journalnode集群,上述第3.3步骤
    • 初始化JournalNode,上述第3.5步骤
    • 启动namenode节点,上述第3.6步骤
    • 启动datanode节点,上述第3.8步骤

    上面步骤只是配置了手动failover,在这种模式下,系统不会自动触发failover,即不会将Standby提升为Active,即使Active已经失效。接下来介绍如何实现自动failover。

    • 初始化HA空间,上述第3.2步骤

    完成上诉步骤后,就可以正常启动hdfs了,此时hdfs已经具备自动failover功能。

    ZKFC和Namenodes守护进程的启动顺序没有关系,ZKFC只是调度Namenode的存活状态,如果不启动ZKFC,此Namenode将无法参与自动failover过程。

  • 相关阅读:
    [one day one question] safari缓存太厉害
    对工厂方法模式的一些思考(2)
    对工厂方法模式的一些思考(java语法表示)
    [选译]MySQL5.7以上Zip版官方安装文档
    clojure 使用阿里云仓库
    对jbox2d引擎的一些回顾与思考(swing实现demo)
    定位
    空白空间及溢出的处理
    BFC
    高度自适应
  • 原文地址:https://www.cnblogs.com/benfly/p/8118391.html
Copyright © 2011-2022 走看看