其他分享
首页 > 其他分享> > Hadoop-HA模式的搭建(手把手教,超细)

Hadoop-HA模式的搭建(手把手教,超细)

作者:互联网

参考的Hadoop官网

具有QJM的NameNode HA_Hadoop 中文网https://hadoop.org.cn/docs/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html从我完全分布式过来的同学,现在已经有了四台搭建了完全分布式的四台虚拟机

如果没有看过,请参照下文搭建!我们接下来的HA(高可用模式)是基于我们完全分布式的补充

(32条消息) hadoop完全分布式搭建(手把手教,超细)_迫壳的博客-CSDN博客https://blog.csdn.net/qq_56893858/article/details/121384480?spm=1001.2014.3001.5502

先说一下此篇文章各个节点的角色

                        NameNode                DataNode        zookeeper           journalNode        zkfc

node01                  *                                                                                        *                *

node02                  *                                     *                        *                        *                *

node03                                                        *                        *                        *

node04                                                        *                        *
 

环境:

1.已经搭好完全分布式的四台虚拟机

2.zookeeper-3.4.6.tar.gz

1.背景

在Hadoop 2.0.0之前,NameNode是HDFS集群中的单点故障(SPOF)。每个群集只有一个NameNode,并且如果该计算机或进程不可用,则整个群集将不可用,直到NameNode重新启动或在单独的计算机上启动。

这从两个方面影响了HDFS群集的总可用性:

  • 如果发生意外事件(例如机器崩溃),则在操作员重新启动NameNode之前,群集将不可用。

  • 计划内的维护事件,例如NameNode计算机上的软件或硬件升级,将导致群集停机时间的延长。

HDFS高可用性功能通过提供以下选项来解决上述问题:在具有热备用功能的主动/被动配置中,可以在同一群集中运行两个(自3.0.0起,超过两个)冗余NameNode。这可以在计算机崩溃的情况下快速故障转移到新的NameNode,或出于计划维护的目的由管理员发起的正常故障转移。

概念补充:

主从模式:一个主,多个从。主用于读写,从用于读,如果访问从节点想要写数据,那么从节点会转给主节点,让它进行写

主备模式:“养兵千日,用兵一时”,没错,就是先备着一台主机,当主的备胎,等主挂掉了之后,备机才会被使用,在这之前只是让其与主的数据同步,不会对其进行使用。

两者区别:根本区别,一个不养着,直接使用;另外一个,等到主挂了之后,才进行使用。

2.ssh免密node01,node02

node02: 
            cd ~/.ssh
            ssh-keygen -t dsa -P '' -f ./id_dsa
            cat id_dsa.pub >> authorized_keys
            scp ./id_dsa.pub  node01:`pwd`/node02.pub
        node01:
            cd ~/.ssh
            cat node02.pub >> authorized_keys

3.zookeeper集群的搭建

node02~node04

node02:

(1)安装zookeeper : tar -zxvf zookeeper...(版本号自己添加,本文章使用3.4.6版本)

(2)将zookeeper移动到 /opt/poke/bigdata中 : mv zookeeper... /opt/poke/bigdata

(3)cd /opt/poke/bigdata/zookeeper../conf

(4)cp zoo_sample.cfg zoo.cfg

(5)vi zoo.cfg

(6)创建一个和上图datadir对应的目录 :mkdir /var/poke/bigdata/hadoop/zk

(7)设置myid 对应上图的server.x :x为myid的数值,echo 1 > /var/poke/bigdata/hadoop/zk/myid

(8)修改/etc/profile:

 source /etc/profile

(9)将zookeeper拷给node03 04

cd /opt/poke/bigdata

scp -r ./zookeeper-3.4.6 node03:`pwd`

scp -r ./zookeeper-3.4.6 node04:`pwd`

node03:

mkdir /var/poke/bigdata/hadoop/zk

echo 2 > /var/poke/bigdata/hadoop/zk/myid

配置/etc/profile

source /etc/profile

node04:

mkdir /var/poke/bigdata/hadoop/zk

echo 3 > /var/poke/bigdata/hadoop/zk/myid

配置/etc/profile

source /etc/profile

最后,打开node02-node04的zookeeper

zkServer.sh start

4.修改hadoop的相关配置

cd $HADOOP_HOME/etc/hadoop

core-site.xml
        <property>
          <name>fs.defaultFS</name>
          <value>hdfs://mycluster</value>
        </property>

         <property>
           <name>ha.zookeeper.quorum</name>
           <value>node02:2181,node03:2181,node04:2181</value>
         </property>

    hdfs-site.xml

        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/var/poke/bigdata/hadoop/ha/dfs/name</value>
        </property>

            <property>
                <name>dfs.datanode.data.dir</name>
                <value>/var/poke/bigdata/hadoop/ha/dfs/data</value>
            </property>

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

            <property>
                <name>dfs.namenode.checkpoint.dir</name>
                <value>/var/poke/bigdata/hadoop/ha/dfs/secondary</value>
            </property>
        <property>
          <name>dfs.nameservices</name>
          <value>mycluster</value>
        </property>
        <property>
          <name>dfs.ha.namenodes.mycluster</name>
          <value>nn1,nn2</value>
        </property>
        <property>
          <name>dfs.namenode.rpc-address.mycluster.nn1</name>
          <value>node01:8020</value>
        </property>
        <property>
          <name>dfs.namenode.rpc-address.mycluster.nn2</name>
          <value>node02:8020</value>
        </property>
        <property>
          <name>dfs.namenode.http-address.mycluster.nn1</name>
          <value>node01:50070</value>
        </property>
        <property>
          <name>dfs.namenode.http-address.mycluster.nn2</name>
          <value>node02:50070</value>
        </property>
        <property>
          <name>dfs.namenode.shared.edits.dir</name>
          <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
        </property>
        <property>
          <name>dfs.journalnode.edits.dir</name>
          <value>/var/poke/bigdata/hadoop/ha/dfs/jn</value>
        </property>
        
        <property>
          <name>dfs.client.failover.proxy.provider.mycluster</name>
          <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        <property>
          <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>
           <name>dfs.ha.automatic-failover.enabled</name>
           <value>true</value>
         </property>

5.将node02的配置分发给node01,03,04

cd $HADOOP_HOME/etc

scp -r hadoop node01:`pwd`

scp -r hadoop node03:`pwd`

scp -r hadoop node04:`pwd`

 

6.初始化与启动

参照前面的各个节点角色表

        (1)先启动JN (node01,02)  hadoop-daemon.sh start journalnode 
        (2)选择一个NN 做格式化(node01或者node02):hdfs namenode -format   
        (3) 启动这个格式化的NN ,以备另外一台同步 hadoop-daemon.sh start namenode 
        (4) 在另外一台机器中: hdfs namenode -bootstrapStandby(另一台备用namenode输入这个命令) 
        (5) 格式化zk(node01):   hdfs zkfc  -formatZK     <只有第一次搭建做,以后不用做>
        (6)  开启服务(node01):start-dfs.sh

 

7.结果与验证(这个自己去操作)

 

 

 

同学们如果感觉我的理解有误,请及时指出!

最后,写作不易,如果对您有帮助的话,请点个赞!

 

标签:node02,bigdata,poke,超细,Hadoop,dfs,hadoop,namenode,HA
来源: https://blog.csdn.net/qq_56893858/article/details/121400388