hadoop的高可用,hadoop+zookeeper高可用

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
[1] Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。

Hadoop是一个能够对大量数据进行分布式处理的软件框架。 Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理。
Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。
Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。
Hadoop 还是可伸缩的,能够处理 PB 级数据。
此外,Hadoop 依赖于社区服务,因此它的成本比较低,任何人都可以使用。
Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点:

  • 高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。
  • 高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
  • 高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
  • 高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
  • 低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。

一、hadoop单机版
获取压缩包进行解压并制作软连接(注意切换到普通用户hadoop)

[root@server1 ~]# su - hadoop
[hadoop@server1 ~]$ ls
hadoop-3.0.3.tar.gz  jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ id
uid=1000(hadoop) gid=1000(hadoop) groups=1000(hadoop)
[hadoop@server1 ~]$ tar zxf jdk-8u181-linux-x64.tar.gz 
[hadoop@server1 ~]$ ls
hadoop-3.0.3.tar.gz  jdk1.8.0_181  jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ ln -s jdk1.8.0_181/ java
[hadoop@server1 ~]$ tar zxf hadoop-3.0.3.tar.gz 
ls
[hadoop@server1 ~]$ ls
hadoop-3.0.3         java          jdk-8u181-linux-x64.tar.gz
hadoop-3.0.3.tar.gz  jdk1.8.0_181
[hadoop@server1 ~]$ ln -s hadoop-3.0.3 hadoop
[hadoop@server1 ~]$ ls
hadoop        hadoop-3.0.3.tar.gz  jdk1.8.0_181
hadoop-3.0.3  java 

配置环境变量

[hadoop@server1 hadoop]$ vim etc/hadoop/hadoop-env.sh

在这里插入图片描述

[hadoop@server1 ~]$ vim .bash_profile 
 10 PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HOME/java/bin
[hadoop@server1 ~]$ source .bash_profile
[hadoop@server1 hadoop]$ jps
12076 Jps

测试:

[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ ls
bin  include  libexec      NOTICE.txt  sbin
etc  lib      LICENSE.txt  README.txt  share
[hadoop@server1 hadoop]$ mkdir input
[hadoop@server1 hadoop]$ cp etc/hadoop/*.xml  input/
[hadoop@server1 hadoop]$ ls input/
capacity-scheduler.xml  hdfs-site.xml    kms-site.xml
core-site.xml           httpfs-site.xml  mapred-site.xml
hadoop-policy.xml       kms-acls.xml     yarn-site.xml
[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar grep input output 'dfs[a-z.]+'
[hadoop@server1 hadoop]$ ls
bin  include  lib      LICENSE.txt  output      sbin
etc  input    libexec  NOTICE.txt   README.txt  share
[hadoop@server1 hadoop]$ cd output/
[hadoop@server1 output]$ ls
part-r-00000  _SUCCESS

二、伪分布式

1.编辑文件

[hadoop@server1 ~]$ cd hadoop/etc/hadoop/
[hadoop@server1 hadoop]$ vim core-site.xml
 19 <configuration>
 20     <property>
 21         <name>fs.defaultFS</name>
 22         <value>hdfs://localhost:9000</value>
 23     </property>
 24 </configuration>

在这里插入图片描述

[hadoop@server1 hadoop]$ vim hdfs-site.xml 
 19 <configuration>
 20     <property>
 21         <name>dfs.replication</name>
 22         <value>1</value>
 23     </property>
 24 </configuration>

在这里插入图片描述
生成密钥做免密连接

[hadoop@server1 hadoop]$ ssh-copy-id localhost
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is 28:a8:7a:1c:94:25:20:08:31:09:f1:f1:be:98:e1:d5.
Are you sure you want to continue connecting (yes/no)? yes
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
hadoop@localhost's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'localhost'"
and check to make sure that only the key(s) you wanted were added.

[hadoop@server1 hadoop]$ ssh 'localhost'
Last login: Thu May 23 00:28:13 2019
[hadoop@server1 ~]$ logout
Connection to localhost closed.
[hadoop@server1 sbin]$ ssh-copy-id 172.25.80.1
[hadoop@server1 sbin]$ ssh-copy-id server1

3.格式化并开启服务

[hadoop@server1 hadoop]$ bin/hdfs namenode -format

在这里插入图片描述

[hadoop@server1 hadoop]$ cd sbin/
[hadoop@server1 sbin]$ ./start-dfs.sh 
[hadoop@server1 sbin]$ jps
13091 NameNode
12660 SecondaryNameNode
13461 Jps
12490 DataNode

4.在浏览器查看:172.25.80.1:9870
在这里插入图片描述

5.测试
创建一个目录上传

[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir -p /user/hadoop
[hadoop@server1 hadoop]$ bin/hdfs dfs -ls
[hadoop@server1 hadoop]$ bin/hdfs dfs -put input/
[hadoop@server1 hadoop]$ bin/hdfs dfs -ls
Found 1 items
drwxr-xr-x   - hadoop supergroup          0 2019-05-23 00:58 input

在浏览器点击utilities–>Browse Directory
在这里插入图片描述
在这里插入图片描述
删除input和output文件,重新执行命令

[hadoop@server1 hadoop]$ rm -rf input/ output/
[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar grep input output 'dfs[a-z.]+'
[hadoop@server1 hadoop]$ ls		##此时input和output不会出现在当前目录下,而是上传到了分布式文件系统中,可以在网页看到
bin  include  libexec      logs        README.txt  share
etc  lib      LICENSE.txt  NOTICE.txt  sbin
[hadoop@server1 hadoop]$  bin/hdfs dfs -cat output/*
1	dfsadmin
[hadoop@server1 hadoop]$ bin/hdfs dfs -get output		##从分布式系统中get下来output目录
[hadoop@server1 hadoop]$ cd output/
[hadoop@server1 output]$ ls
part-r-00000  _SUCCESS
[hadoop@server1 output]$ cat *
1	dfsadmin

三、分布式

1.需要先停掉之前的服务,数据清除干净

[hadoop@server1 hadoop]$ sbin/stop-dfs.sh 
Stopping namenodes on [localhost]
Stopping datanodes
Stopping secondary namenodes [server1]

[hadoop@server1 ~]$ cd /tmp/
[hadoop@server1 tmp]$ ls
hadoop  hadoop-hadoop  hsperfdata_hadoop
[hadoop@server1 tmp]$ rm -rf *

2.打开两个新的虚拟机当作节点
创建用户

[root@server2 ~]# useradd hadoop
[root@server2 ~]# id hadoop
uid=1000(hadoop) gid=1000(hadoop) groups=1000(hadoop)
[root@server3 ~]# useradd hadoop
[root@server3 ~]# id hadoop
uid=1000(hadoop) gid=1000(hadoop) groups=1000(hadoop)
安装nfs-utils
[root@server1 ~]# yum install -y nfs-utils
[root@server2 ~]# yum install -y nfs-utils
[root@server3 ~]# yum install -y nfs-utils
启动服务
[root@server1 ~]# systemctl start rpcbind
[root@server2 ~]# systemctl start rpcbind
[root@server3 ~]# systemctl start rpcbind

3.server1开启服务并配置

[root@server1 ~]# systemctl start nfs-server
[root@server1 ~]# vim /etc/exports
  1 /home/hadoop   *(rw,anonuid=1000,anongid=1000)

在这里插入图片描述

[root@server1 ~]# exportfs -rv
exporting *:/home/hadoop
[root@server1 ~]# showmount -e
Export list for server1:
/home/hadoop *

4.server2和server3进行挂载

[root@server2 ~]# showmount -e server1		##查看server1可挂载的磁盘
Export list for server1:
/home/hadoop *
[root@server2 ~]# mount 172.25.80.1:/home/hadoop/ /home/hadoop/		##挂载磁盘
[root@server2 ~]# df		##查看挂载
Filesystem               1K-blocks    Used Available Use% Mounted on
/dev/mapper/rhel-root     17811456 1098996  16712460   7% /
devtmpfs                    497292       0    497292   0% /dev
tmpfs                       508264       0    508264   0% /dev/shm
tmpfs                       508264   13072    495192   3% /run
tmpfs                       508264       0    508264   0% /sys/fs/cgroup
/dev/sda1                  1038336  141504    896832  14% /boot
tmpfs                       101656       0    101656   0% /run/user/0
172.25.80.1:/home/hadoop  17811456 2797056  15014400  16% /home/hadoop
Server3也进行挂载
[root@server3 ~]# mount 172.25.80.1:/home/hadoop/ /home/hadoop/
[root@server3 ~]# df
Filesystem               1K-blocks    Used Available Use% Mounted on
/dev/mapper/rhel-root     17811456 1099052  16712404   7% /
devtmpfs                    497292       0    497292   0% /dev
tmpfs                       508264       0    508264   0% /dev/shm
tmpfs                       508264   13072    495192   3% /run
tmpfs                       508264       0    508264   0% /sys/fs/cgroup
/dev/sda1                  1038336  141504    896832  14% /boot
tmpfs                       101656       0    101656   0% /run/user/0
172.25.80.1:/home/hadoop  17811456 2797056  15014400  16% /home/hadoop

5.此时可以实现免密登陆
在这里插入图片描述
6.重新编辑文件

[hadoop@server1 ~]$ cd hadoop/etc/hadoop/
[hadoop@server1 hadoop]$ vim core-site.xml
 19 <configuration>
 20     <property>
 21         <name>fs.defaultFS</name>
 22         <value>hdfs://172.25.80.1:9000</value>
 23     </property>
 24 </configuration>

在这里插入图片描述

[hadoop@server1 hadoop]$ vim hdfs-site.xml
 19 <configuration>
 20     <property>
 21         <name>dfs.replication</name>
 22         <value>2</value>		两个节点
 23     </property>
 24 </configuration>

在这里插入图片描述

[hadoop@server1 hadoop]$ vim workers 
  1 172.25.80.2
  2 172.25.80.3

在server1编辑,其他两个节点不用再编辑

[root@server2 ~]# su - hadoop
Last login: Thu May 23 10:44:13 CST 2019 from server1 on pts/1
[hadoop@server2 ~]$ cd hadoop/etc/hadoop/
[hadoop@server2 hadoop]$ cat workers 
172.25.80.2
172.25.80.3

[root@server3 ~]# su - hadoop
Last login: Thu May 23 10:44:25 CST 2019 from server1 on pts/1
[hadoop@server3 ~]$ cd hadoop/etc/hadoop/
[hadoop@server3 hadoop]$ cat workers 
172.25.80.2
172.25.80.3

7.格式化并启动

[hadoop@server1 hadoop]$ bin/hdfs namenode -format
[hadoop@server1 hadoop]$ sbin/start-dfs.sh 
Starting namenodes on [server1]
Starting datanodes
Starting secondary namenodes [server1]
[hadoop@server1 hadoop]$ jps
15248 SecondaryNameNode
15362 Jps
15030 NameNode

从节点也可以看到datanode的信息

[hadoop@server2 ~]$ jps
12050 Jps
11950 DataNode
[hadoop@server3 hadoop]$ jps
11940 DataNode
12041 Jps

8.测试

[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir -p /user/hadoop
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir input
[hadoop@server1 hadoop]$ bin/hdfs dfs -put etc/hadoop/*.xml input
[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar grep input output 'dfs[a-z.]+'

在网页上查看上传的数据及节点信息
在这里插入图片描述
在这里插入图片描述

上传大文件

[hadoop@server2 ~]$ cd /home/hadoop/hadoop
[hadoop@server2 hadoop]$  dd if=/dev/zero of=bigfile bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 36.5335 s, 14.4 MB/s
[hadoop@server2 hadoop]$  bin/hdfs dfs -put bigfile

在网页查看
在这里插入图片描述
添加server4作为新加节点

[root@server4 ~]# useradd hadoop
[root@server4 ~]# id hadoop
uid=1000(hadoop) gid=1000(hadoop) groups=1000(hadoop)
[root@server4 ~]# yum  install -y  nfs-utils
[root@server4 ~]# systemctl start rpcbind
[root@server4 ~]# mount 172.25.80.1:/home/hadoop/ /home/hadoop/
[root@server4 ~]# su - hadoop
[hadoop@server4 hadoop]$ vim etc/hadoop/workers
  1 172.25.80.2
  2 172.25.80.3
  3 172.25.80.4

在这里插入图片描述

[hadoop@server1 hadoop]$ vim etc/hadoop/hdfs-site.xml 
 19 <configuration>
 20     <property>
 21         <name>dfs.replication</name>
 22         <value>3</value>
 23     </property>
 24 </configuration>
[hadoop@server4 hadoop]$ sbin/hadoop-daemon.sh start datanode

在server1上:

[hadoop@server1 hadoop]$ bin/hdfs dfsadmin -report

网页查看添加成功sdffgsd
在这里插入图片描述

hadoop+zookeeper高可用

在典型的 HA 集群中,通常有两台不同的机器充当 NN。在任何时间,只有一台机器处于
Active 状态;另一台机器是处于 Standby 状态。Active NN 负责集群中所有客户端的操作;
而 Standby NN 主要用于备用,它主要维持足够的状态,如果必要,可以提供快速的故障恢
复。
为了让 Standby NN 的状态和 Active NN 保持同步,即元数据保持一致,它们都将会和
JournalNodes 守护进程通信。当 Active NN 执行任何有关命名空间的修改,它需要持久化到
一半以上的 JournalNodes 上(通过 edits log 持久化存储),而 Standby NN 负责观察 edits log
的变化,它能够读取从 JNs 中读取 edits 信息,并更新其内部的命名空间。一旦 Active NN
出现故障,Standby NN 将会保证从 JNs 中读出了全部的 Edits,然后切换成 Active 状态。
Standby NN 读取全部的 edits 可确保发生故障转移之前,是和 Active NN 拥有完全同步的命
名空间状态。
为了提供快速的故障恢复,Standby NN 也需要保存集群中各个文件块的存储位置。为
了实现这个,集群中所有的 Database 将配置好 Active NN 和 Standby NN 的位置,并向它们
发送块文件所在的位置及心跳,如下图所示:
在这里插入图片描述
在任何时候,集群中只有一个 NN 处于 Active 状态是极其重要的。否则,在两个 Active NN
的状态下 NameSpace 状态将会出现分歧,这将会导致数据的丢失及其它不正确的结果。为
了保证这种情况不会发生,在任何时间,JNs 只允许一个 NN 充当 writer。在故障恢复期
间,将要变成 Active 状态的 NN 将取得 writer 的角色,并阻止另外一个 NN 继续处于 Active
状态。
为了部署 HA 集群,你需要准备以下事项:
(1)、NameNode machines:运行 Active NN 和 Standby NN 的机器需要相同的硬件配
置;
(2)、JournalNode machines:也就是运行 JN 的机器。JN 守护进程相对来说比较轻
量,所以这些守护进程可以可其他守护线程(比如 NN,YARN ResourceManager)运行在
同一台机器上。在一个集群中,最少要运行 3 个 JN 守护进程,这将使得系统有一定的容错
能力。当然,你也可以运行 3 个以上的 JN,但是为了增加系统的容错能力,你应该运行奇
数个 JN(3、5、7 等),当运行 N 个 JN,系统将最多容忍(N-1)/2 个 JN 崩溃。
在 HA 集群中,Standby NN 也执行 namespace 状态的 checkpoints,所以不必要运行
Secondary NN、CheckpointNode 和 BackupNode;事实上,运行这些守护进程是错误的。

1.关闭之前的服务,清理环境

[hadoop@server1 hadoop]$ sbin/stop-yarn.sh
[hadoop@server1 hadoop]$ sbin/stop-dfs.sh
[hadoop@server1 hadoop]$ jps
17988 Jps
[hadoop@server2 hadoop]$ rm -fr /tmp/*
[hadoop@server3 hadoop]$ rm -fr /tmp/*
[hadoop@server4 hadoop]$ rm -fr /tmp/*

2.在server2上搭建zookeeper(任意节点都可以)

[hadoop@server2 ~]$ tar zxf zookeeper-3.4.9.tar.gz 
[hadoop@server2 ~]$  cd zookeeper-3.4.9/
[hadoop@server2 zookeeper-3.4.9]$ cd conf/

3.添加从节点信息

[hadoop@server2 conf]$ cp zoo_sample.cfg zoo.cfg 
[hadoop@server2 conf]$ vim zoo.cfg
 29 server.1=172.25.80.2:2888:3888
 30 server.2=172.25.80.3:2888:3888
 31 server.3=172.25.80.4:2888:3888

在这里插入图片描述

4.各节点配置文件相同,并且需要在/tmp/zookeeper 目录中创建 myid 文件,写入一个唯一的数字,取值范围在 1-255

[hadoop@server2 conf]$ mkdir /tmp/zookeeper
[hadoop@server2 conf]$ echo 1 > /tmp/zookeeper/myid
[hadoop@server3 hadoop]$ mkdir /tmp/zookeeper
[hadoop@server3 hadoop]$ echo 2 > /tmp/zookeeper/myid
[hadoop@server4 hadoop]$ mkdir /tmp/zookeeper
[hadoop@server4 hadoop]$ echo 3 > /tmp/zookeeper/myid

5.开启服务

[hadoop@server2 zookeeper-3.4.9]$ bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@server2 zookeeper-3.4.9]$ bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: follower		##从
[hadoop@server3 ~]$ cd zookeeper-3.4.9/
[hadoop@server3 zookeeper-3.4.9]$ bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@server3 zookeeper-3.4.9]$ bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: leader		##主
[hadoop@server4 ~]$ cd zookeeper-3.4.9/
[hadoop@server4 zookeeper-3.4.9]$ bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@server4 zookeeper-3.4.9]$ bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: follower		##从
6.在server2进入命令行
[hadoop@server2 bin]$ ./zkCli.sh 
WatchedEvent state:SyncConnected type:None path:null
y           
ZooKeeper -server host:port cmd args
[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 3] ls /zookeeper
[quota]
[zk: localhost:2181(CONNECTED) 4] ls /zookeeper/quota
[]
[zk: localhost:2181(CONNECTED) 6] get /zookeeper/quota
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 0

7.进行hadoop的配置详解

 19 <configuration>
 20     <property>
 21         <name>fs.defaultFS</name>
 22         <value>hdfs://master</value>		##指定 hdfs 的 namenode 为 masters (名称可自定义)
 23     </property>
 24     <property>
 25         <name>ha.zookeeper.quorum</name>
 26         <value>172.25.80.2:2181,172.25.80.3:2181,172.25.80.4:2181</value>		##指定 zookeeper 集群主机地址
 27     </property>
 28 </configuration>

在这里插入图片描述

[hadoop@server1 hadoop]$ vim etc/hadoop/hdfs-site.xml
 19 <configuration>
 20     <property>
 21         <name>dfs.replication</name>
 22         <value>3</value>
 23     </property>
 24     <property>
 25         <name>dfs.nameservices</name>
 26         <value>masters</value>		##指定 hdfs 的 nameservices 为 masters,和 core-site.xml 文件中的设置保持一致
 27     </property>
 28     <property>
 29         <name>dfs.ha.namenodes.masters</name>
 30         <value>h1,h2</value>		##masters 下面有两个 namenode 节点,分别是 h1 和 h2
 31     </property>
 32     <property>
 33         <name>dfs.namenode.rpc-address.masters.h1</name>
 34         <value>172.25.80.1:9000</value>		##指定 h1 节点的 rpc 通信地址
 35     </property>
 36     <property>
 37         <name>dfs.namenode.http-address.masters.h1</name>
 38         <value>172.25.80.1:9870</value>		##指定 h1 节点的 http 通信地址
 39     </property>
 40     <property>
 41         <name>dfs.namenode.rpc-address.masters.h2</name>
 42         <value>172.25.80.5:9000</value>		##指定 h2 节点的 rpc 通信地址
 43     </property>
 44     <property>
 45         <name>dfs.namenode.http-address.masters.h2</name>
 46         <value>172.25.80.5:9870</value>		##指定 h2 节点的 http 通信地址
 47     </property>
 48     <property>
 49         <name>dfs.namenode.shared.edits.dir</name>
 50         <value>qjournal://172.25.80.2:8485;172.25.80.3:8485;172.25.80.4:8485    /masters</value>		##指定 NameNode 元数据在 JournalNode 上的存放位置
 51     </property>
 52     <property>
 53         <name>dfs.journalnode.edits.dir</name>
 54         <value>/tmp/journaldata</value>		##指定 JournalNode 在本地磁盘存放数据的位置
 55     </property>
 56     <property>
 57         <name>dfs.ha.automatic-failover.enabled</name>
 58         <value>true</value>		
##开启 NameNode 失败自动切换
 59     </property>
 60     <property>
 61         <name>dfs.client.failover.proxy.provider.masters</name>
 62        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverP    roxyProvider</value>		##配置失败自动切换实现方式
 63     </property>
 64     <property>
 65         <name>dfs.ha.fencing.methods</name>
 66         <value>		##配置隔离机制方法,每个机制占用一行
 67         sshfence
 68         shell(/bin/true)
 69         </value>
 70     </property>
 71     <property>
 72         <name>dfs.ha.fencing.ssh.private-key-files</name>
 73         <value>/home/hadoop/.ssh/id_rsa</value>		##使用 sshfence 隔离机制时需要 ssh 免密码
 74     </property>
 75     <property>
 76         <name>dfs.ha.fencing.ssh.connect-timeout</name>
 77         <value>30000</value>		##配置 sshfence 隔离机制超时时间
 78     </property>
 79 </configuration>

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

8.启动 hdfs 集群(按顺序启动)在三个 DN 上依次启动 zookeeper 集群

[hadoop@server2 ~]$ cd hadoop
[hadoop@server2 hadoop]$ bin/hdfs --daemon start journalnode
[hadoop@server2 hadoop]$ jps
13072 Jps
13033 JournalNode
12735 QuorumPeerMain
[hadoop@server3 ~]$ cd hadoop
[hadoop@server3 hadoop]$ bin/hdfs --daemon start journalnode
[hadoop@server3 hadoop]$ jps
12886 Jps
12607 QuorumPeerMain
12847 JournalNode
[hadoop@server4 ~]$ cd hadoop
[hadoop@server4 hadoop]$ bin/hdfs --daemon start journalnode
[hadoop@server4 hadoop]$ jps
12804 QuorumPeerMain
13078 Jps
13039 JournalNode

9.传递配置文件搭建高可用

打开server5
[root@server5 ~]# useradd hadoop
[root@server5 ~]# yum install -y nfs-utils
[root@server5 ~]# systemctl start rpcbind
[root@server5 ~]# mount 172.25.80.1:/home/hadoop/ /home/hadoop/
[root@server5 ~]# su - hadoop

[hadoop@server1 hadoop]$  bin/hdfs namenode -format
[hadoop@server1 hadoop]$ scp -r /tmp/hadoop-hadoop 172.25.80.5:/tmp
[root@server5 ~]# ls /tmp/
hadoop-hadoop

10.格式化 zookeeper (只需在 h1 上执行即可)

[hadoop@server1 hadoop]$ bin/hdfs zkfc -formatZK

11.启动 hdfs 集群(只需在 h1 上执行即可)

[hadoop@server1 hadoop]$ sbin/start-dfs.sh
Starting namenodes on [server1 server5]
server1: namenode is running as process 18443.  Stop it first.
Starting datanodes
172.25.80.4: datanode is running as process 13149.  Stop it first.
172.25.80.3: datanode is running as process 12958.  Stop it first.
172.25.80.2: datanode is running as process 13145.  Stop it first.
[hadoop@server1 hadoop]$ jps
18792 DFSZKFailoverController
18443 NameNode
19324 Jps

[hadoop@server5 ~]$ jps
12130 DFSZKFailoverController
12067 NameNode
12216 Jps

高可用搭建完成

12.测试

在这里插入图片描述
在这里插入图片描述
停掉server1,server5的状态就变成了active

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值