【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)

文章目录

    • 1 预先说明
      • 1.1 软件版本说明
      • 1.2 集群配置说明
    • 2 集群规划
    • 3 搭建环境
      • 3.1 修改配置文件
      • 3.2 zookeeper 的安装与配置
      • 3.3 启动测试

1 预先说明

1.1 软件版本说明

  • 操作系统:CentOS-7-x86_64-DVD-1804.iso
  • JDK:jdk-8u202-linux-x64.tar.gz
  • Hadoop:hadoop-3.1.3.tar.gz
  • zookeeper:apache-zookeeper-3.7.0-bin.tar.gz

1.2 集群配置说明

之前已经配置过 Hadoop 完全分布式运行模式(文章:【Hadoop 3】图文详解:搭建Hadoop完全分布式运行模式)本文将在其基础上进行修改,从而搭建 HDFS 的高可用环境。

2 集群规划

hadoop102 hadoop103 hadoop104
NameNode
DataNode
JournalNode
Jps
DFSZKFailoverController
QuorumPeerMain
DataNode
JournalNode
Jps
QuorumPeerMain
NameNode
DataNode
JournalNode
Jps
DFSZKFailoverController
QuorumPeerMain

3 搭建环境

3.1 修改配置文件

1、修改 core-site.xml,配置 Hadoop 客户端的默认路径以使用新的启用 HA 的逻辑 URI,如果之前使用“qf”作为名称服务 ID,这将是所有 HDFS 路径的授权部分的值。

(参考官方)
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第1张图片

在这里插入图片描述

【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第2张图片
2、修改 hdfs-site.xml

(1)为此名称服务选择一个逻辑名称(与上面的 core-site.xml 中 fd.defaultFS 属性对应的 value 值对应),它将用于配置和集群中绝对 HDFS 路径的权限组件。

(参考官方)
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第3张图片
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第4张图片

(2)使用逗号分隔的 NameNode ID 列表进行配置。DataNode 将使用它来确定集群中的所有 NameNode,并使用“nn1”和“nn2”作为 NameNode 的单个 ID。

(参考官方)
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第5张图片
在这里插入图片描述
(3)配置每个 NameNode 监听的完全限定的 RPC 地址,用于 NameNode 的内部通信地址,对于之前配置的两个 NameNode ID,设置 NameNode 进程的完整地址和 IPC 端口。

(参考官方)
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第6张图片
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第7张图片

(4)配置每个 NameNode 监听的完全限定的 HTTP 地址,用于 NameNode 的 web ui 的通信地址,与上面的 rpc-address 类似,设置两个 NameNode 的 HTTP 服务器的地址以进行侦听。

(参考官方)
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第8张图片

【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第9张图片

(5)配置提供共享编辑存储的 JournalNode 的地址。

(参考官方)
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第10张图片
在这里插入图片描述

(6)指定 NameNode 失败后进行自动切换的主类。

【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第11张图片
在这里插入图片描述
(7)出现 “脑裂” 后,采取某种方式杀死其中一个 NameNode;同时也要配置 shh 免密,不然会要求输入密码,将可能导致杀死失败而且还有人工手动操作的麻烦;还可配置杀死超时时间,若超过此时间仍未杀死另一个处于 Active 的 NameNode,那么则报超时。

(参考官方)
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第12张图片
在这里插入图片描述

【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第13张图片
(8)JournalNode 守护进程将存储其本地状态的路径,即 JournalNode 的本地共享目录。

(参考官方)
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第14张图片
在这里插入图片描述
(9)配置自动故障转移。

(参考官方)
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第15张图片
在这里插入图片描述
注意,下图是在 core-site.xml 中添加:
在这里插入图片描述
(10)将此配置分发给集群中的其他机器(此 xsync 脚本是封装的 shell 命令,具体可参考之前搭建 hadoop 完全分布式环境的文章)。
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第16张图片

3.2 zookeeper 的安装与配置

1、下载并解压 zookeeper
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第17张图片
2、配置环境变量
在这里插入图片描述

在这里插入图片描述

3、自定义 zoo.cfg 配置
在这里插入图片描述
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第18张图片

(参考官方)

关于此配置,zookeeper 的官网也有详细介绍:链接地址
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第19张图片
4、分发 zookeeper 给其他客户机

(1)分发 PATH 配置
在这里插入图片描述

(2)分发 Zookeeper

在 hadoop102 上:
在这里插入图片描述
在 hadoop103 上:
在这里插入图片描述

在 hadoop104 上:
在这里插入图片描述
(3)创建在 zoo.cfg 中 dataDir 属性指定的目录

也要在上面 dataDir 属性指定的值中创建相应的目录,用来存储 zookeeper 的数据
在这里插入图片描述
也要讲 zkdata 目录分发给其他客户机
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第20张图片
(4)创建并配置 myid 文件

在 hadoop102 上:
在这里插入图片描述

在这里插入图片描述
在 hadoop103 上:
在这里插入图片描述

在这里插入图片描述

在 hadoop104 上:
在这里插入图片描述

在这里插入图片描述

3.3 启动测试

1、在各节点上启动 zookeeper(只要有半数以上的机器启动 zookeeper 就可以发挥作用),启动后,各节点都应该有 QuorumPeerMain 进程

(1)启动 zookeeper

zkServer.sh start

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(2)查看 zookeeper 运行情况
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、启动 journalnode 服务,此时,各节点的 JournalNode 进程都应该已经启动成功

sbin/hadoop-daemons.sh start journalnode

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、挑选两个 NameNode 之中的一台来格式化,然后启动

(格式化方式可参考之前文章,但是,请注意,此处 HDFS 高可用环境下的 namenode 格式化要先启动 zookeeper 和 journalnode:【Hadoop 3】集群管理:集群中结点的添加、删除(图文总结))

hdfs namenode -format

4、将数据目录复制到另一台 NameNode 的机器(hadoop104)上
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第21张图片

采取复制方式

scp -r data/ hadoop104:/opt/module/hadoop-3.1.3/

在 hadoop102 上执行复制操作,复制给另一台配置 NameNode 进程的主机 hadoop104
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

hadoop104 上接收成功
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第22张图片

5、格式化 zkfc

hdfs zkfc -formatZK

【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第23张图片
这时,连上 zookeeper server 后,会多出一个 hadoop-ha,里面是我们之前自定义的逻辑名 qf,而 qf 里暂时没有内容,等我们启动后,将会出现内容
在这里插入图片描述
在这里插入图片描述

6、启动 hdfs

在 hadoop102 上:

sbin/start-dfs.sh

7、结果

在 hadoop102 上:
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第24张图片

在 hadoop103 上:
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第25张图片

在 hadoop104 上:
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第26张图片
对比之前的规划表,完全一致!

hadoop102 hadoop103 hadoop104
NameNode
DataNode
JournalNode
Jps
DFSZKFailoverController
QuorumPeerMain
DataNode
JournalNode
Jps
QuorumPeerMain
NameNode
DataNode
JournalNode
Jps
DFSZKFailoverController
QuorumPeerMain

查看两个 NameNode 的状态情况,一切正常。
在这里插入图片描述
【Hadoop 3】HDFS 高可用环境搭建(详细图文教程)_第27张图片

8、补充,完整配置文件内容

core-site.xml







<configuration>
    
    

    
    <property>
        <name>fs.defaultFSname>
        <value>hdfs://qfvalue>
    property>

    
    <property>
        <name>hadoop.tmp.dirname>
        <value>/opt/module/hadoop-3.1.3/datavalue>
    property>

    
    <property>
        <name>hadoop.http.staticuser.username>
        <value>atguiguvalue>
    property>

<property>
   <name>ha.zookeeper.quorumname>
   <value>hadoop102:2181,hadoop103:2181,hadoop104:2181value>
 property>
configuration>

hdfs-site.xml







<configuration>

<property> 
  <name>dfs.nameservicesname> 
  <value>qfvalue> 
property>

<property> 
  <name>dfs.ha.namenodes.qfname> 
  <value>nn1,nn2value> 
property>

<property> 
  <name>dfs.namenode.rpc-address.qf.nn1name> 
  <value>hadoop102:8020value> 
property> 
<property> 
  <name>dfs.namenode.rpc-address.qf.nn2name> 
  <value>hadoop104:8020value> 
property> 

<property> 
  <name>dfs.namenode.http-address.qf.nn1name> 
  <value>hadoop102:9878value> 
property> 
<property> 
  <name>dfs.namenode.http-address.qf.nn2name> 
  <value>hadoop104:9878value> 
property> 

<property>
  <name>dfs.namenode.shared.edits.dirname>
  <value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/qfvalue>
property>

<property>
  <name>dfs.journalnode.edits.dirname>
  <value>/opt/module/hadoop-3.1.3/data/journal/datavalue>
property>

<property>
  <name>dfs.ha.automatic-failover.enabledname>
  <value>truevalue>
property>

<property> 
  <name>dfs.client.failover.proxy.provider.qfname> 
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvidervalue> 
property>

<property> 
  <name>dfs.ha.fencing.methodsname> 
  <value>sshfencevalue> 
property> 

<property> 
   <name>dfs.ha.fencing.ssh.private-key-filesname> 
   <value>/home/zlc/.ssh/id_rsavalue> 
property>

<property> 
   <name>dfs.ha.fencing.ssh.connect-timeoutname> 
   <value>30000value> 
property>

    
    <property>
        <name>dfs.hosts.excludename>
        <value>/opt/module/hadoop-3.1.3/etc/hadoop/zlc-datanode-deny.listvalue>
    property>

configuration>

你可能感兴趣的:(大数据开发技术,hadoop,hdfs,big,data)