hadoop3.1.2 HA高可用搭建

官方文档

https://hadoop.apache.org/docs/r3.1.1/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html#Configuration_details

**

1.资源角色规划

**在这里插入图片描述

**

2.配置

**

2.1对全分布式集群的备份,以后想用全分布式的话就把hadoop-full名字改成hadoop,程序就会读取了

cd /var/opt/hadoop-3.1.2/etc
cp -r  hadoop hadoop-full

2.2修改hadoop-env.sh文件

进入到hadoop目录下的etc下(增加两个角色配置)

vi  + hadoop-env.sh

在这里插入图片描述

注释掉SECONDARYNAMENODE那行
添加下面两行

export HDFS_ZKFC_USER=root
export HDFS_JOURNALNODE_USER=root

2.3修改core-site.xml文件

vi + core-site.xml

<property>
        <name>fs.defaultFS</name>        
        <value>hdfs://mycluster</value>      
    </property>
<property>
        <name>hadoop.tmp.dir</name>
        <value>/var/cjc/hadoop/ha</value>     #设置hadoop文件的存储目录
<description>A base for other temporary directories.</description>   #没了这个会启动不了NameNode
    </property>                                                      #自己踩过的坑
<property>
   <name>hadoop.http.staticuser.user</name>
   <value>root</value>
   </property>
<property>
   <name>ha.zookeeper.quorum</name>
   <value>slave2:2181,slave3:2181,slave4:2181</value>
</property>
<property>
  <name>ipc.client.connect.max.retries</name>
  <value>100</value>
  <description>Indicates the number of retries a client will make to establish
      a server connection.
  </description>
</property>
<property>
  <name>ipc.client.connect.retry.interval</name>
  <value>10000</value>
</property>

2.4修改hdfs-site.xml文件

vi + hdfs-site.xml

property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
<property>
       <name>dfs.nameservices</name>    #设置名字
       <value>mycluster</value>
    </property>
<property>
  <name>dfs.ha.namenodes.mycluster</name>   #设置NameNode个数,这里设置的是两个,
  <value>nn1,nn2</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>  #远程服务的调用 
  <value>master:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>slave2:8020</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>  #浏览器访问namenode配置的IP和地址 
  <value>master:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name> #两个
  <value>slave2:50070</value>
</property>
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://master:8485;slave2:8485;slave3:8485/mycluster</value> #journalnode设置为三个节点
</property>
<property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>  #hdfs客户端找到NameNode,active类名的代理类
</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_rsa</value>
    </property>
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/var/cjc/hadoop/ha/journalnodeDiary</value>
</property>
<property>
# 配置自动故障转移
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
</property>

保存退出
在hadoop3.1.2的etc的hadoop目录下运行此命令

scp core-site.xml hdfs-site.xml hadoop-env.sh slave2:pwd
把2改成3,4再来两次
pwd需要用``包着,CSDN的编辑器用`包着会变成代码块
把配置的几个文件分发到节点2,3,4,不用去一个个敲


**

3.安装zookeeper

**

3.1解压和配置zookeeper

根据资源配置可知zookeeper是安装在节点2,3,4的

tar xf zookeeper-3.4.6.tar.gz -C /var/opt/  #解压
vi + /etc/profile

加上这两行

export ZOOKEEPER_HOME=/var/opt/zookeeper-3.4.6
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin

scp /etc/profile slave3:/etc/ #分发到slave3节点

scp /etc/profile slave4:/etc/ #分发到slave4节点

source /etc/profile  #使配置文件生效

进入到zookeeper的conf目录

cp zoo_sample.cfg zoo.cfg   #改名字
vi zoo.cfg  #编辑zoo.cfg文件,主要改数据目录和配置zookeeper启动节点
dataDir=/var/opt/zk  #zk的数据存储目录要改,目录自定义

#最下面添加下面三行
server.1=slave2:2888:3888
server.2=slave3:2888:3888
server.3=slave4:2888:3888

弄好保存退出

弄好配置文件后并不能运行zookeeper,需要生成一个ID文件

mkdir -p /var/opt/zk #02 03 04 节点都要创建



[root@slave02 ~]# echo 1 > /var/opt/zk/myid
[root@slave03 ~]# echo 2 > /var/opt/zk/myid
[root@slave04 ~]# echo 3 > /var/opt/zk/myid

1,2,3都是对应上面配置文件的。

什么都配好之后在命令行下打zkS,按下TAB会自动补全

zkServer.sh start #启动zookeeper,在2.3,4节点都要运行

jps一下看看是否有zookeeper的进程


**~~

4.启动journalnode

~~ **

hdfs --daemon start journalnode  #在配置好的journalnode三个节点上分别跑起来

在master节点上格式化namenode

hdfs namenode -format

#master节点上启动namenode

 hadoop-daemon.sh start namenode

jps查看进程


**

5.同步

**
在节点2运行此命令

hdfs namenode -bootstrapStandby #同步命令

cd /var/cjc/hadoop/ha/name/current
cat VERSION

在这里插入图片描述

在这里插入图片描述
可以看到clusterID是相同的
证明同步成功

这里曾经我的节点2的namenode不能启动,翻了日志,发现缺少了一个fsimage的文件,
解决办法:https://www.cnblogs.com/zy1234567/p/10643895.html

hdfs zkfc -formatZK    #格式化zk


start-dfs.sh    #启动集群

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

看到这些证明启动成功

浏览器运行地址

在这里插入图片描述

在这里插入图片描述

**

HA高可用搭建成功!

**

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页