• HDFS集群NameNode高可用改造


    背景

    假定目前有3台zookeeper服务器,分别为zk-01/02/03,DataNode服务器若干;

    目前HDFS集群的Namenode没有高可用配置,Namenode和Secondary Namenode同时位于zk-03上,

    且Secondary Namenode的作用是辅助Namenode恢复,并不是Namenode的高可用备份。

    高可用改造

    集群规划

    zk-01zk-02zk-03
    Active NameNodeStandby NameNode
    JournalNodeJournalNodeJournalNode
    ZK Failover ControllerZK Failover Controller

    Hadoop版本为3.0之前,仅支持启用单个Standby Namenode。Hadoop版本3.0后支持启用多个Standby Namenode。

    方案实施

    环境准备
    1. 关闭防火墙
    2. zk-01/02/03之间配置ssh免密登录
    3. 配置jdk环境变量
    配置文件修改
    1. hadoop-2.7.3/etc/hadoop/core-site.xml

      <configuration>
          <property>
              <name>fs.defaultFSname>
              
              <value>hdfs://zk-03:9000value> 
              
              
              <value>hdfs://haclustervalue>
              
          property>
          <property>
              <name>io.file.buffer.sizename>
              <value>131072value>
          property>
          <property>
              <name>hadoop.tmp.dirname>
              <value>/data/0/hadoop/hadoop/tmpvalue>
          property>
          
          <property>
              <name>ha.zookeeper.quorumname>
              <value>zk-01:2181,zk-02:2181,zk-03:2181value>
              <description>指定zookeeper地址description>
          property>
          
      configuration>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
    2. hadoop-2.7.3/etc/hadoop/hdfs-site.xml

      <configuration>
          
          <property>
              <name>dfs.nameservicesname>
              <value>haclustervalue>
              <description>指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致description>
          property>
          <property>
              <name>dfs.ha.namenodes.haclustername>
              <value>namenode1,namenode2value>
              <description>hacluster下面有两个NameNodedescription>
          property>
      
          <property>
              <name>dfs.namenode.rpc-address.hacluster.namenode1name>
              <value>zk-01:9000value>
          property>
          <property>
              <name>dfs.namenode.http-address.hacluster.namenode1name>
              <value>zk-01:50070value>
          property>
          <property>
              <name>dfs.namenode.rpc-address.hacluster.namenode2name>
              <value>zk-02:9000value>
          property>
          <property>
              <name>dfs.namenode.http-address.hacluster.namenode2name>
              <value>zk-02:50070value>
          property>
      
          <property>
                  <name>dfs.ha.fencing.methodsname>
                  <value>sshfencevalue>
                  <description>配置隔离机制,同一时刻只有一个Namenode对外响应description>
          property>
          <property>
                  <name>dfs.ha.fencing.ssh.private-key-filesname>
                  <value>/home/hadoop/.ssh/id_rsavalue>
                  <description>使用隔离机制时需要ssh免登陆description>
          property>
      
          <property>
                <name>dfs.ha.automatic-failover.enabledname>
                <value>truevalue>
                <description>开启NameNode故障时自动切换description>
          property>
          <property>
                  <name>dfs.client.failover.proxy.provider.haclustername>
                  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvidervalue>
                  <description>配置失败自动切换实现方式description>
          property>
      
          <property>
              <name>dfs.namenode.shared.edits.dirname>
              <value>qjournal://zk-01:8485;zk-02:8485;zk-03:8485/haclustervalue>
              <description>指定NameNode的元数据在JournalNode上的存放位置description>
          property>
          <property>
                <name>dfs.journalnode.edits.dirname>
                <value>/data/0/hadoop/hadoop/journalvalue>
                <description>指定JournalNode在本地磁盘存放数据的位置description>
          property>
          
          <property>
              <name>dfs.replicationname>
              <value>2value>
          property>
          <property>
              <name>dfs.namenode.name.dirname>
              <value>/data/0/hadoop/hadoop/namevalue>
          property>
          <property>
              <name>dfs.blocksizename>
              <value>268435456value>
          property>
          <property>
              <name>dfs.namenode.handler.countname>
              <value>100value>
          property>
          <property>
              <name>dfs.datanode.data.dirname> 			      												<value>/data/0/hadoop/hadoop/data,/data/1/hadoop/hadoop/data,/data/2/hadoop/hadoop/data,/data/3/hadoop/hadoop/data,/data/4/hadoop/hadoop/data,/data/5/hadoop/hadoop/data,/data/6/hadoop/hadoop/data,/data/7/hadoop/hadoop/data,/data/8/hadoop/hadoop/data,/data/9/hadoop/hadoop/data,/data/10/hadoop/hadoop/data,/data/11/hadoop/hadoop/datavalue>
          property>
      configuration>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
      • 68
      • 69
      • 70
      • 71
      • 72
      • 73
      • 74
      • 75
      • 76
      • 77
      • 78
      • 79
      • 80
      • 81
      • 82
      • 83
    应用配置
    1. 登录zk-03
    $ scp -r /home/hadoop/hadoop-2.7.3 zk-02:/home/hadoop/
    $ scp -r /home/hadoop/hadoop-2.7.3 zk-01:/home/hadoop/
    # 停止现有HDFS集群的服务
    $ hdfs/sbin/stop-dfs.sh
    
    • 1
    • 2
    • 3
    • 4
    1. zk-01/02/03: 全部启动JournalNode
    $ hdfs/sbin/hadoop-daemon.sh start journalnode
    
    • 1
    1. zk-01: 初始化并启动namenode1、zkfc
    # 初始化并启动namenode1
    $ hdfs/bin/hdfs namenode -format
    $ hdfs/bin/hdfs namenode -initializeSharedEdits
    $ hdfs/sbin/hadoop-daemon.sh start namenode
    # 在ZK中初始化ha集群的信息
    $ hdfs/bin/hdfs zkfc -formatZK
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. zk-02:启动namenode2、zkfc
    # 同步zk01上namenode的元数据信息并启动namenode2
    $ hdfs/bin/hdfs namenode -bootstrapStandby
    $ hdfs/sbin/hadoop-daemon.sh start namenode
    # 在ZK02中同步ha集群的信息
    $ hdfs/bin/hdfs zkfc -formatZK
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. zk-01: 启动集群中其他服务,包括datanode
    $ hdfs/sbin/start-dfs.sh
    
    • 1
    集群状态验证
    1. 登录zk-01/02,分别执行jps, 结果中应存在:
      • PID1 JournalNode
      • PID2 NameNode
      • PID3 DFSZKFailoverController
    • 若不存在JournalNode进程则执行:
      sbin/hadoop-daemon.sh start journalnode
    • 若不存在DFSZKFailoverController进程则执行:
      sbin/hadoop-daemon.sh start zkfc
    • 若不存在NameNode进程则执行:
      sbin/hadoop-daemon.sh start namenode
    1. 登录zk-03,执行jps,结果中应存在:
      • PID JournalNode
    • 若不存在JournalNode进程则执行:

      sbin/hadoop-daemon.sh start journalnode

    1. 在任意DataNode服务器上,执行jps,结果中应存在:
      • PID1 DataNode
    • 若不存在DataNode进程则执行:

      sbin/hadoop-daemon.sh start datanode

    高可用验证
    1. 登录zk-01,查看namenode1的状态:

      bin/hdfs haadmin -getServiceState namenode1,输出结果应为active;

      若上述结果为standby,可以执行如下命令将主namenode切换为namenode1:

      bin/hdfs haadmin -transitionToActive --forcemanual namenode1

      再次执行命令查看namenode1和namenode2的状态:

      bin/hdfs haadmin -getServiceState namenode1,输出应为active;

      bin/hdfs haadmin -getServiceState namenode2,输出应为standby。

    2. 登录zk-01,停止namenode1:bin/hdfs --daemon stop namenode
      zkfc进程应自动随之停止,执行jps,结果中不存在NameNode和DFSZKFailoverController。
      查看namenode2的状态:
      bin/hdfs haadmin -getServiceState namenode2,结果应为active。

    3. 重新启动namenode1:
      bin/hdfs --daemon start namenode
      查看namenode1的状态:

      bin/hdfs haadmin -getServiceState namenode1,结果应为standby。

      此时可以使用第1步中切换主节点的命令将主节点切换到namenode1。

  • 相关阅读:
    Abnova丨Abnova mutaFISH 探针研究方案
    ky10 server arm 在线编译安装openssl3.1.4
    Linux下查找JDK默认安装路径
    游戏电竞蓝牙耳机推荐
    arm 内核版本编译记录
    mindspore提示Syntax error. Invalid data, Page size: 33554432 is too small
    #力扣:LCP 06. 拿硬币@FDDL
    服务器防御100G是什么意思?够用吗?
    电压源与电流源简介
    HIVE SQL计算一组值的中位数
  • 原文地址:https://blog.csdn.net/qq184861643/article/details/134031002