zoukankan      html  css  js  c++  java
  • Hadoop高可用

    1.先实现node2免密登录node1

      在node2下执行:ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

              cat id_dsa.pub >> authorized_keys

              scp id_dsa.pub node1:`pwd`/node2.pub

      在node1下执行:cat node2.pub >> authorized_keys

    2.配置第二个NameNode节点

      vi hdfs-site.xml

      删除:

        <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>node2:50090</value>
        </property>

      添加:

        <property>      # mycluster是nameservices的一个逻辑名
          <name>dfs.nameservices</name>
          <value>mycluster</value>
        </property>

        <property>      # nn1,nn2是namenodes的逻辑名

          <name>dfs.ha.namenodes.mycluster</name>

          <value>nn1,nn2</value> 

        </property>

        <property>   # 通过rpc映射nn1和物理机地址
          <name>dfs.namenode.rpc-address.mycluster.nn1</name>
          <value>node1:8020</value>
        </property>
        <property>  # 通过rpc映射nn2和物理机地址
          <name>dfs.namenode.rpc-address.mycluster.nn2</name>
          <value>node2:8020</value>
        </property>

        <property>   #  给浏览器访集群提供ip和端口
          <name>dfs.namenode.http-address.mycluster.nn1</name>
          <value>node1:50070</value>
        </property>
        <property>   #  给浏览器访集群提供ip和端口
          <name>dfs.namenode.http-address.mycluster.nn2</name>
          <value>node2:50070</value>
        </property>

        <property>    #  指明JNs集群部署在哪些节点上,即JNN主机位置

            <name>dfs.namenode.shared.edits.dir</name>

            <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>

        </property>

        <property>    #  实现故障转移时的代理位置

            <name>dfs.client.failover.proxy.provider.mycluster</name>    

            <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

        </property>

        <property>     #  主NameNode出现故障后,备用NameNode通过秘钥登录主NameNode立刻关闭NameNode状态,自己接管变成主节点

            <name>dfs.ha.fencing.methods</name>

            <value>sshfence</value>

        </property>

        <property>

            <name>dfs.ha.fencing.ssh.private-key-files</name>

            <value>/root/.ssh/id_dsa</value>

        </property>

        <property>  #  JNN保存日志的路径

            <name>dfs.journalnode.edits.dir</name>

            <value>/var/sxt/hadoop/ha/journalnode</value>

        </property>

        <property>  # 完成自动故障转移
          <name>dfs.ha.automatic-failover.enabled</name>
          <value>true</value>
        </property>

      vi core-site.xml

        修改:

        <property>

                <name>fs.defaultFS</name>

                <value>hdfs://node1:9000</value>

           </property>

        <property>

                <name>hadoop.tmp.dir</name>

                <value>/var/sxt/hadoop/full</value>

             </property>

        修改成:

        <property>

                <name>fs.defaultFS</name>

                <value>hdfs://mycluster</value>   # 修改成逻辑名

           </property>

        <property>

                <name>hadoop.tmp.dir</name>

                <value>/var/sxt/hadoop/ha</value>   # 修改路径为ha

             </property>

        <property>  # zookeep的集群的指定
          <name>ha.zookeeper.quorum</name>
          <value>node2:2181,node3:2181,node4:2181</value>
        </property>

    3.进行分发

      执行:scp core-site.xml hdfs-site.xml node2:`pwd`

          scp core-site.xml hdfs-site.xml node3:`pwd`

          scp core-site.xml hdfs-site.xml node4:`pwd`

    4.安装zookeeper

      进入node2(zookeeper安装在node2、node3、node4)

      tar zxvf zookeeper-3.4.6.tar.gz -C /opt/sxt/

      配置zookeeper:

        cd /opt/sxt/zookeeper-3.4.6/conf

        改文件名:mv zoo_sample.cfg zoo.cfg 

        vi zoo.cfg

        修改dataDir=/tmp/zookeeper为/var/sxt/zk

        再增加:   

          server.1=node2:2888:3888  # 指明zookeeper所在节点
          server.2=node3:2888:3888
          server.3=node4:2888:3888

      分发到node3和node4:

          scp -r zookeeper-3.4.6/ node3:`pwd`

          scp -r zookeeper-3.4.6/ node4:`pwd`

    5.创建步骤4增加的路径/var/sxt/zk

      mkdir -p /var/sxt/zk

      echo 1 > /var/sxt/zk/myid

      上面2步操作需要在node3和node4上也执行一遍,分别echo 2和echo 3

    6.配置zookeeper环境变量

      vi + /etc/profile

      增加:

        export ZOOKEEPER_HOME=/opt/sxt/zookeeper-3.4.6

      修改:

        PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin

      分发文件:scp /etc/profile node3:/etc

           scp /etc/profile node4:/etc

      修改完全部读一下文件:  . /etc/profile

    7.集群配置完毕

    8.开启zookeeper

      执行:zkServer.sh start

      查看状态:zkServer.sh status    node4为主,node2,、node3为从

      关闭:zkServer.sh stop

    9.启动JNN(journalnode)用于两个NameNode同步数据(注意:一定要先于集群格式化完成)

      在node1、node2、node3节点上执行:hadoop-daemon.sh start journalnode

    10.运行JNN后,在node1或者node2上执行格式化操作,这里选择node1

      hdfs namenode -format

      再启动主节点:

       hadoop-daemon.sh start namenode

    11.把格式化的主节点的元数据信息拷贝到备用主节点,确保步骤9、步骤10 已经完成

      再node2上执行:hdfs namenode -bootstrapStandby    以同步node1格式化后的元数据信息

    12.active的节点(node1)在zookeeper服务器上完成注册,即在zookeeper服务器上创建一个节点

      执行:hdfs zkfc -formatZK

      成功后会自动在zookeeper客户端创建/hadoop-ha/mycluster

      查看:执行    zkCli.sh   进去zookeeper客户端,执行  ls /    查看

    13.启动集群!!!

      在主节点node1执行: start-dfs.sh

     14.启动后查看各个节点的进程:执行jps

      在node4查看zookeeper客户端目录下的 /hadoop-ha/mycluster,会出现两个注册的节点[ActiveBreadCrumb, ActiveStandbyElectorLock],执行get /hadoop-ha/mycluster/ActiveBreadCrumb查看此节点下的数据

    注意:关闭Hadoop集群和zookeeper集群后,在重新启动集群,只需要选启动zookeeper:zkServer.sh start,再启动Hadoop集群:start-dfs.sh即可,不需要再启动JNN集群,因为第一次搭建的时候已经创建了目录节点,start-dfs.sh会自动运行JNN

    常用命令

      1)停止主节点守护进程(主节点down):hadoop-daemon.sh stop namenode

      2)启动主节点守护进程(主节点up):hadoop-daemon.sh start namenode

      3)停止主节点zkfc物理进程(不会down,状态会从active切换到standby):hadoop-daemon.sh stop zkfc

      4)关闭所有的角色进程:stop-dfs.sh

      5)启动集群角色进程:start-dfs.sh

      6)关闭zookeeper集群角色进程:zkServer.sh stop  

      7)进入zookeeper客户端:zkCli.sh

      8)

  • 相关阅读:
    01-节点层次
    WebAPI02
    WebAPI01
    牛客剑指Offer7
    Python字典排序
    Python字典中的键映射多个值
    计算机硬件的主要技术指标
    计算机的基本组成
    计算机系统概论
    数据库概论
  • 原文地址:https://www.cnblogs.com/yangyangming/p/12643289.html
Copyright © 2011-2022 走看看