1. 集群规划
机器IP | 服务 |
---|---|
master:192.168.159.100 | zookeeper、namenode、datanode、ResourceManager、JournalNode |
slave1:192.168.159.101 | zookeeper、namenode、datanode、ResourceManager、JournalNode |
slave2:192.168.159.102 | zookeeper、datanode、JournalNode |
2. 安装zookeeper
2.1 zookeeper下载
推荐清华镜像站:https://mirrors.tuna.tsinghua.edu.cn/
找到Apache 找到zookeeper 下载相应版本,注意不要踩坑,现在是19.08.29日,我想尝试最新版的zookeeper3.5.5,但是搭建好后根本没有反应,于是换了3.4.14,可能是和我的hadoop版本不兼容???我本人是hadoop2.8.5 centos7.4 ,总之不要总是追求最新的版本,最新的不一定是最好的
2.2 zookeeper的安装
下载好后解压到目录,我的是/usr/zookeeper(注意,下载过来的东西尽量不要总安装在home下,可以自己开一个专用的目录)
tar zxvf zookeeper-3.4.14.tar.gz -C /usr/zookeeper --strip-components 1
进入到conf文件夹,将里面的zoo_sample.cfg重命名zoo.cfg,修改其中的内容:
cp zoo_sample.cfg zoo.cfg
修改:
# The number of milliseconds of each tick
# 服务器与客户端之间交互的基本时间单元(ms)
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
# zookeeper所能接受的客户端数量
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
# 服务器和客户端之间请求和应答之间的时间间隔
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
# 保存zookeeper数据,日志的路径
dataDir=/usr/zookeeper/data
# the port at which the clients will connect
# 客户端与zookeeper相互交互的端口
clientPort=2181
server.1= dn1:2888:3888
server.2= dn2:2888:3888
server.3= dn3:2888:3888
#server.A=B:C:D 其中A是一个数字,代表这是第几号服务器;B是服务器的IP地址;
C表示服务器与群集中的“领导者”交换信息的端口;当领导者失效后,D表示用来执行选举时服务器相互通
信的端口。
我们紧接着在文件中追加这个路径:
mkdir /usr/zookeeper/data
然后再这个data文件夹中创建一个名为myid的文件,注意这个文件没有后缀,且名为myid不可变
这个文件用来装当前节点的id,用来在选举leader的时候进行投票,一般我们在第一个节点写1,第二个写2,第三个写3(zookeeper选举leader的过程有蛮多帖子的)
2.3 分别在各个dn节点启动zk进程,命令如下:
bin/zkServer.sh start
输入jps
后会出现如下进程:
QuorumPeerMain
再执行:
bin/zkServer.sh status
会出现一个leader和两个follower。
2.4 HDFS+HA的结构图
HDFS配置HA的结构图如下所示:
1. 利用共享存储来在两个NN间同步edits信息。以前的HDFS是share nothing but NN,现在NN又share storage,这样其实是转移了单点故障的位置,但中高端的存储设备内部都有各种RAID以及冗余硬件,包括电源以及网卡等,比服务器的可靠性还是略有提高。通过NN内部每次元数据变动后的flush操作,加上NFS的close-to-open,数据的一致性得到了保证。
2. DN同时向两个NN汇报块信息。这是让Standby NN保持集群的最新状态的必须步骤。
3. 用于监视和控制NN进程的FailoverController进程。显然,我们不能在NN进程内部进行心跳等信息同步,最简单的原因,一次FullGC就可以让NN挂起十几分钟,所以,必须要有一个独立的短小精悍的watchdog来专门负责监控。这也是一个松耦合的设计,便于扩展或更改,目前版本里是用ZooKeeper(简称ZK)来做同步锁,但用户可以方便的把这个Zookeeper FailoverController(简称ZKFC)替换为其他的HA方案或leader选举方案。
4. 隔离(Fencing),防止脑裂,就是保证在任何时候只有一个主NN,包括三个方面:
- 共享存储fencing,确保只有一个NN可以写入edits。
- 客户端fencing,确保只有一个NN可以响应客户端的请求。
- DN fencing,确保只有一个NN向DN下发命令,譬如删除块,复制块等等。
3. 搭建HAHadoop
3.1 安装hadoop
参考:https://blog.csdn.net/qq_36525906/article/details/100120144
到配置文件步骤时要回来看这里的配