1. Hadoop的HA机制
ASP站长网前言:正式引入HA机制是从hadoop2.0开始,之前的版本中没有HA机制
1.1. HA的运作机制
(1)hadoop-HA集群运作机制介绍
所谓HA,即高可用(7*24小时不中断服务)
实现高可用最关键的是消除单点故障
hadoop-ha严格来说应该分成各个组件的HA机制——HDFS的HA、YARN的HA
(2)HDFS的HA机制详解
通过双namenode消除单点故障
双namenode协调工作的要点:
A、元数据管理方式需要改变:
内存中各自保存一份元数据
Edits日志只能有一份,只有Active状态的namenode节点可以做写操作
两个namenode都可以读取edits
共享的edits放在一个共享存储中管理(qjournal和NFS两个主流实现)
B、需要一个状态管理功能模块
实现了一个zkfailover,常驻在每一个namenode所在的节点
每一个zkfailover负责监控自己所在namenode节点,利用zk进行状态标识
当需要进行状态切换时,由zkfailover来负责切换
切换时需要防止brain split现象的发生
1.2. HDFS-HA图解
2. 主机规划
主机名称
外网IP
内网IP
操作系统
备注
安装软件
运行进程
mini01
10.0.0.111
172.16.1.111
CentOS 7.4
ssh port:22
jdk、hadoop
NameNode、DFSZKFailoverController(zkfc)
mini02
10.0.0.112
172.16.1.112
CentOS 7.4
ssh port:22
jdk、hadoop
NameNode、DFSZKFailoverController(zkfc)
mini03
10.0.0.113
172.16.1.113
CentOS 7.4
ssh port:22
jdk、hadoop、zookeeper
ResourceManager
mini04
10.0.0.114
172.16.1.114
CentOS 7.4
ssh port:22
jdk、hadoop、zookeeper
ResourceManager
mini05
10.0.0.115
172.16.1.115
CentOS 7.4
ssh port:22
jdk、hadoop、zookeeper
DataNode、NodeManager、JournalNode、QuorumPeerMain
mini06
10.0.0.116
172.16.1.116
CentOS 7.4
ssh port:22
jdk、hadoop、zookeeper
DataNode、NodeManager、JournalNode、QuorumPeerMain
mini07
10.0.0.117
172.16.1.117
CentOS 7.4
ssh port:22
jdk、hadoop、zookeeper
DataNode、NodeManager、JournalNode、QuorumPeerMain
注意:针对HA模式,就不需要SecondaryNameNode了,因为STANDBY状态的namenode会负责做checkpoint
Linux添加hosts信息,保证每台都可以相互ping通
[root@mini01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.111 mini01
10.0.0.112 mini02
10.0.0.113 mini03
10.0.0.114 mini04
10.0.0.115 mini05
10.0.0.116 mini06
10.0.0.117 mini07
Windows的hosts文件修改
# 文件位置C:\Windows\System32\drivers\etc 在hosts中追加如下内容
…………………………………………
10.0.0.111 mini01
10.0.0.112 mini02
10.0.0.113 mini03
10.0.0.114 mini04
10.0.0.115 mini05
10.0.0.116 mini06
10.0.0.117 mini07
3. 添加用户账号
# 使用一个专门的用户,避免直接使用root用户
# 添加用户、指定家目录并指定用户密码
useradd -d /app yun && echo '123456' | /usr/bin/passwd --stdin yun
# sudo提权
echo "yun ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
# 让其它普通用户可以进入该目录查看信息
chmod 755 /app/
4. 实现yun用户免秘钥登录
要求:根据规划实现 mini01 到 mini01、mini02、mini03、mini04、mini05、mini06、mini07 免秘钥登录
实现 mini02 到 mini01、mini02、mini03、mini04、mini05、mini06、mini07 免秘钥登录
实现 mini03 到 mini01、mini02、mini03、mini04、mini05、mini06、mini07 免秘钥登录
实现 mini04 到 mini01、mini02、mini03、mini04、mini05、mini06、mini07 免秘钥登录
实现 mini05 到 mini01、mini02、mini03、mini04、mini05、mini06、mini07 免秘钥登录
实现 mini06 到 mini01、mini02、mini03、mini04、mini05、mini06、mini07 免秘钥登录
实现 mini07 到 mini01、mini02、mini03、mini04、mini05、mini06、mini07 免秘钥登录
# 可以使用ip也可以是hostname 但是由于我们计划使用的是 hostname 方式交互,所以使用hostname
# 同时hostname方式分发,可以通过hostname远程登录,也可以IP远程登录
具体过程就不多说了,请参见 https://www.linuxidc.com/Linux/2018-08/153353.htm
5. Jdk【java8】
具体过程就不多说了,请参见 https://www.linuxidc.com/Linux/2018-08/153353.htm
6. Zookeeper部署
根据规划zookeeper部署在mini03、mini04、mini05、mini06、mini07上
6.1. 配置信息
[yun@mini03 conf]$ pwd
/app/zookeeper/conf
[yun@mini03 conf]$ vim zoo.cfg
#单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不作任何限制。
maxClientCnxns=1500
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
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.
# dataDir=/tmp/zookeeper
dataDir=/app/bigdata/zookeeper/data
# the port at which the clients will connect
clientPort=2181
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
# leader和follow通信端口和投票选举端口
server.3=mini03:2888:3888
server.4=mini04:2888:3888
server.5=mini05:2888:3888
server.6=mini06:2888:3888
server.7=mini07:2888:3888
6.2. 添加myid文件
[yun@mini03 data]$ pwd
/app/bigdata/zookeeper/data
[yun@mini03 data]$ vim myid # 其中mini03的myid 为3;mini04的myid 为4;mini05的myid 为5;mini06的myid 为6;mini07的myid 为7
3
6.3. 启动zk服务
# 依次在启动mini03、mini04、mini05、mini06、mini07 zk服务
[yun@mini03 ~]$ cd zookeeper/bin/
[yun@mini03 bin]$ pwd
/app/zookeeper/bin
[yun@mini03 bin]$ ll
total 56
-rwxr-xr-x 1 yun yun 238 Oct 1 2012 README.txt
-rwxr-xr-x 1 yun yun 1909 Oct 1 2012 zkCleanup.sh
-rwxr-xr-x 1 yun yun 1049 Oct 1 2012 zkCli.cmd
-rwxr-xr-x 1 yun yun 1512 Oct 1 2012 zkCli.sh
-rwxr-xr-x 1 yun yun 1333 Oct 1 2012 zkEnv.cmd
-rwxr-xr-x 1 yun yun 2599 Oct 1 2012 zkEnv.sh
-rwxr-xr-x 1 yun yun 1084 Oct 1 2012 zkServer.cmd
-rwxr-xr-x 1 yun yun 5467 Oct 1 2012 zkServer.sh
-rw-rw-r-- 1 yun yun 17522 Jun 28 21:01 zookeeper.out
[yun@mini03 bin]$ ./zkServer.sh start
JMX enabled by default
Using config: /app/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
6.4. 查询运行状态
# 其中mini03、mini04、mini06、mini07状态如下
[yun@mini03 bin]$ ./zkServer.sh status
JMX enabled by default
Using config: /app/zookeeper/bin/../conf/zoo.cfg
Mode: follower
# 其中mini05 状态如下
[yun@mini05 bin]$ ./zkServer.sh status
JMX enabled by default
Using config: /app/zookeeper/bin/../conf/zoo.cfg
Mode: leader
PS:4个follower 1个leader
7. Hadoop部署与配置修改
注意:每台机器的Hadoop以及配置相同
大型站长资讯类网站! https://www.0792zz.cn