HADOOP HA之NameNode HA集群配置与应用

目录

前言

一、HADOOP HA之NameNode HA集群配置

1、修改hadoop-env.sh

2、修改core-site.xml

3、修改hdfs-site.xml

4、修改workers

5、同步配置文件

6、启动zookeeper集群

7、启动journalnode

8、格式化namenode

9、同步元数据

10、格式化ZKFC

11、启动HDFS

二、HADOOP HA之NameNode HA集群应用

1、查看两个NameNode的运行状态

(1)命令行  (nn2是 NameNode的名字,可以换成nn1)

(2)Hadoop的Web UI界面

  2、关闭集群中的原Active NameNode,查看原Standby NameNode的运行状态

 3、重新启动原Active NameNode,依次查看原Active NameNode和原Standby NameNode的运行状态

问题

1、Active NameNode关闭后Standby NameNode没有自动切换成Active NameNode

2、两个NameNode的运行状态都是Standby

3、Standby NameNode启动不了

参考


前言

本文只讲解HADOOP HA的NameNode HA集群配置与应用,Yarn HA不作讲解。

集群基础环境准备:

1、已经搭建好Hadoop和zookeeper集群

2、在本地主机的 /etc/hosts文件修改集群各个主机名和IP的映射关系(访问Hadoop的Web UI界面时需要)

3、配置好ssh免登陆


一、HADOOP HA之NameNode HA集群配置

        找到你配置hadoop的目录,想不起来可以用which hadoop命令行查看,在bin的同级目录etc下找到hadoop配置文件所在目录,进行修改配置文件。

1、修改hadoop-env.sh

vi hadoop-env.sh
export JAVA_HOME=/opt/module/jdk-8u162-linux-x64/jdk1.8.0_162
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/opt/module
export PATH=$HADOOP_HOME/bin:$PATH
export PATH=$HADOOP_HOME/sbin:$PATH
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root

把jdk和hadoop的配置路径换成你自己的,可以用which javawhich hadoop命令行查看。

2、修改core-site.xml

vi core-site.xml
<configuration>

    <!-- HA集群名称,该值要和hdfs-site.xml中的配置保持一致 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
    </property>

    <!-- hadoop本地磁盘存放数据的公共目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/home/hadoop/tmp</value>
    </property>

    <!-- 传输文件大小配置 -->
    <property>
        <name>io.file.buffer.size</name>
        <value>131702</value>
    </property>

    <!-- ZooKeeper集群的地址和端口-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
    </property>

</configuration>

我Hadoop集群的主机名是hadoop1、hadoop2、hadoop3(记得完成主机名和ip地址映射,不然会出问题),换成你自己集群的主机名。

3、修改hdfs-site.xml

vi hdfs-site.xml
<configuration>


        <!-- 配置namenode和datanode的工作目录-数据存储目录 -->
        <property>
                 <name>dfs.namenode.name.dir</name>
                <value>file:/home/hadoop/hdfs_name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/home/hadoop/hdfs_data</value>
        </property>


        <!-- 指定副本数 -->
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>


        <!-- 启用webhdfs -->
        <property>
                <name>dfs.webhdfs.enabled</name>
                <value>true</value>
        </property>

        <!--指定hdfs的nameservice为mycluster,需要和core-site.xml中的保持一致 -->
        <property>
                <name>dfs.nameservices</name>
                <value>mycluster</value>
        </property>

        <!-- mycluster下面有两个NameNode,分别是nn1,nn2 -->
        <property>
                <name>dfs.ha.namenodes.mycluster</name>
                <value>nn1,nn2</value>
        </property>
        
        <!-- nn1的RPC通信地址 -->
        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn1</name>
                <value>hadoop1:8020</value>
        </property>

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

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

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

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

        <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/home/hadoop/data/journaldata</value>
        </property>

        <!-- 开启NameNode失败自动切换 -->
        <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</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
              shell(/bin/true)
      </value>
    </property>

        <!-- 使用sshfence隔离机制时需要ssh免登陆 -->
        <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/root/.ssh/id_rsa</value>
    </property>

        <!-- 配置sshfence隔离机制超时时间 -->
        <property>
                <name>dfs.ha.fencing.ssh.connect-timeout</name>
                <value>30000</value>
        </property>
</configuration>

集群的主机名和存放数据的目录换成你自己的。

4、修改workers

vi workers
hadoop1
hadoop2
hadoop3

换成你自己集群的主机名。

5、同步配置文件

返回上一层目录,把hadoop目录下的配置文件同步给集群中的其他主机,-r后加目录路径,@后加主机名,如果新建了存放数据的目录也要同步给集群中的其他主机。

cd ..

scp -r hadoop root@hadoop2:$PWD

6、启动zookeeper集群

在集群中的每台主机上启动zookeeper,在zookeeper安装目录下输入:

bin/zkServer.sh start

查看状态:一般是一个leader,两个follower
 

bin/zkServer.sh status

7、启动journalnode

在集群中的每台主机上启动journalnode,用jps命令行查看进程,可以看到JournalNode进程

hdfs --daemon start journalnode
jps

8、格式化namenode

格式化和启动namenode,在hadoop1上执行命令:

hdfs namenode -format
hdfs --daemon start namenode

9、同步元数据

在hadoop2上执行命令:

hdfs namenode -bootstrapStandby

10、格式化ZKFC

在哪台主机上执行,哪台主机就将成为第一次的Active Namenode

hdfs zkfc -formatZK

11、启动HDFS

在hadoop1上执行命令:

start-dfs.sh

二、HADOOP HA之NameNode HA集群应用

1、查看两个NameNode的运行状态

有两种方式可以查看:

(1)命令行  (nn2是 NameNode的名字,可以换成nn1)

hdfs haadmin -getServiceState nn2

(2)Hadoop的Web UI界面

在浏览器网址栏输入:http://hadoop1:9870/  和  http://hadoop2:9870/

        我是用docker在虚拟机里搭建hadoop集群的,所以用虚拟机主机里的浏览器查看,如果是开了三台虚拟机搭建hadoop集群的话,在电脑本地的浏览器查看即可。如果用主机名+端口访问不了,应该是主机号和ip地址映射没做好,可以直接用ip地址+端口号访问;如果还是访问不了那就是配置文件没改好,或者是防火墙没关闭等等。

 

  2、关闭集群中的原Active NameNode,查看原Standby NameNode的运行状态

        hadoop1的NameNode原来是Active NameNode,hadoop2的NameNode原来是Standby NameNode,所以在hadoop1中关闭NameNode,输入:

hdfs --daemon stop namenode

        也可以用jps查看进程号,kill -9 进程号,结束NameNode进程。刷新网页后,发现hadoop1的NameNode访问不了,hadoop2的NameNode变成了Active NameNode。

 3、重新启动原Active NameNode,依次查看原Active NameNode和原Standby NameNode的运行状态

在hadoop1中输入:

hdfs --daemon start namenode

 

        刷新网页后,hadoop1的NameNode可以访问且变成了Standby NameNode,hadoop2的NameNode是Active NameNode。

问题

1、Active NameNode关闭后Standby NameNode没有自动切换成Active NameNode

解决方法:CentOS可能没有自带fuster 程序,但是在hdfs-site.xml中用到了fuster 程序,所以得自己安装(每台主机上都要安装),安装完如果还是不行,可以重启所有虚拟机再试试。

yum -y install psmisc

2、两个NameNode的运行状态都是Standby

解决方法:强制选定一个NameNode为Active NameNode,nn1是名称节点的名字,换成你选定的

NameNode的名字

hdfs haadmin -transitionToActive --forcemanual nn1

3、Standby NameNode启动不了

解决方法:从Active NameNode拉取FSimage和元数据,再启动Standby NameNode

hdfs namenode -bootstrapStandby

参考

黑马程序员:HADOOP HA集群搭建

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值