Zookeeper +Hadoop HA

本文介绍了Zookeeper在Hadoop HA中的作用,包括Zookeeper集群的安装步骤,HDFS和YARN的高可用配置,以及Zookeeper的数据读写流程和选举主节点的机制。通过Zookeeper实现Hadoop集群的高可用性和数据一致性。
摘要由CSDN通过智能技术生成

1. zookeeper引言

  • 简介

Apache ZooKeeper是Apache软件基金会的一个软件项目,大数据集群服务器的管理者协调者。

简言:ZK就是一个管理多个服务(集群分布式环境下)的通知机制 Watcher+文件系统

ZNode 文件系统:保存少量,服务器相关的配置文件信息。

Watcher 监听通知机制:注册监听服务器的上下线。

  • 特点
  1. zk集群中的数据内容,完全一致。
  2. zk作为集群管理者,天生不存在单点问题。
  3. zk的主机是动态选举出来的。
  • 应用场景

在这里插入图片描述

2. 集群安装

在这里插入图片描述

1.准备三台服务器
(hadoop11/hadoop12/hadoop13)
0. 设置ip
1. 安装jdk
2. 配置java环境变量
3. 关闭防火墙
4. 设置hostname
5. 设置hosts(3台彼此之间集群互通)
2.安装
# 1. 解压
[root@hadoop11 modules]# tar zxvf zookeeper-3.4.6.tar.gz -C /opt/installs/
# 2. 修改文件名
[root@hadoop11 installs]# mv zookeeper-3.4.6/ zookeeper3.4.6
# 3. 编辑环境变量配置文件
[root@hadoop11 zookeeper3.4.6]# vi /etc/profile


# ------------------下面是添加的内容------
# zookeeper
export PATH=$PATH:/opt/installs/zookeeper3.4.6/bin/


# 4. 重新加载profile配置
source /etc/profile 
3.标记主机号
# 1. zk目录下新建一个data目录
  作为后续zk的数据存放位置
  [root@hadoop11 zookeeper3.4.6]# mkdir data
# 2. 在data下,新建一个myid文件。
  [root@hadoop11 zookeeper3.4.6]# cd data
# 3. 里面内容填写当前zk节点的编号
  [root@hadoop11 data]# echo 11 > myid 
4.初始化配置文件
# 1. 拷贝zoo.cfg文件
  [root@hadoop11 conf]# cp zoo_sample.cfg zoo.cfg
# 2. 配置zoo.cfg
-------------以下是内容-------------- 
#Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。
tickTime=2000 #心跳时间周期(单位: 毫秒)
#集群中的Follower跟随者服务器与Leader领导者服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
initLimit=10 #启动zk时候的时间延迟最大值(10倍心跳)
##Leader发送心跳包给集群中所有Follower,若Follower在syncLimit时间内没有响应,那么Leader就认为该follower已经挂掉了,单位:tickTime
syncLimit=5 # zk的主机和从机之间的通信访问的最大延迟(5倍心跳)
dataDir=/opt/installs/zookeeper3.4.6/data/ #zk的数据存储位置
clientPort=2181 # zk的客户端访问zk的端口号

# server.myid=zk的ip:2888:3888
server.11=hadoop11:2888:3888
server.12=hadoop12:2888:3888
server.13=hadoop13:2888:3888
# 2888(内部数据通信的端口)  #3888(选举投票使用的端口)
5.同步配置文件
# 1. 同步zookeeper的软件及其内部配置文件信息
  scp -r zookeeper3.4.6 root@hadoop12:/opt/installs/
  scp -r zookeeper3.4.6 root@hadoop13:/opt/installs/
# 2. 同步zookeeper的环境变量文件/etc/profile
  scp -r /etc/profile root@hadoop12:/etc
  scp -r /etc/profile root@hadoop13:/etc
# 3. 重新加载其他节点上的zk的环境变量
  source /etc/profile
# 4. 修改其他节点上的myid的zk编号。
6.zk服务器管理命令
# 1. 启动
    zkServer.sh start
    [root@hadoop11 data]# jps
    2610 QuorumPeerMain # zk节点的进程。
    3500 Jps
# 2. 查看状态
    zkServer.sh status

# 3. 停止
 	 zkServer.sh stop

# 4. 客户端
  	zkCli.sh 登录本机的zk
  	zkCli.sh -server ip:2181 登录指定ip的zk主机

日志 zk启动异常,查看日志文件:zookeeper.out

​ 默认位置: 启动zkServer的命令所在的目录,

​ 可以通过conf/zkEnv.sh修改 ZOO_LOG_DIR = “/opt/installs/zookeeper3.4.6/logs”

3. HadoopHA(高可用)

HAHadoop(High Available Hadoop) 高可用Hadoop集群。

1.HDFS分布式集群的问题
1. NameNode单点故障
2. NameNode备机空闲
3. NameNode仍然存在少量数据丢失的问题
4. NameNode假死和双主问题
5. NameNode主备自动切换,客户端无法知晓入口地址
2.问题解决思路分析
# 1. NameNode单点故障
思路:提供NameNode备机
在两个NameNode机器上,各自提供一个zkclient。负责注册节点,并监控节点变化
方案:ZKFC--基于zookeeper实现的故障转移程序(基于zk实现的客户端程序) 
# 2. NameNode假死和双主问题
思路:
只要NN备机切换,无论NN主机是否死机,都强制杀死。
① 远程登录NN主机节点:ssh 
② 执行杀死NameNode进程命令:killall namenode
方案: ZKFC自带该效果,当NN主机宕机,切换备机的同时,会远程登陆NN主机,使用psmisc的命令killall杀死NameNode。防止出现双主。 
# 3. NameNode备机空闲
思路:承担SNN的职责
好处:
① NameNode备机资源不闲置,同时替换SNN
② NameNode备机转正,则可以直接从本地读取fsimage恢复数据,方便快捷。
# 4. NameNode仍然存在少量数据丢失的问题
思路:
提供一个分布式存储空间,并可以数据同步共享,用来存储editslog_inprogress文件。
方案:
  QJN:基于zookeeper实现的分布式存储系统,还有数据共享同步机制。
  QJN之间通过网络进行数据同步--RPC技术
好处:
NameNode备机节点,也存在一个QJN,存储了editslog,这边可以避免从NameNode主机远程拷贝editslog,提升ckeckpoint性能。
NameNode备机转正,除了恢复本地fsimage,还能恢复本地的editslog数据文件,恢复完整数据。
# 5. NameNode主备自动切换,客户端无法知晓入口地址
思路:
  ① 不能写死ip,将NN主机ip注册再Zk集群中,zk负责主备切换,并更新该节点的值。
  ② Java客户端通过读取zk节点中的节点之,动态读取HDFS的入口地址(NameNode现主机ip)
方案:
  HDFS的NameNode入口地址,配置虚拟ip。
3.架构图

在这里插入图片描述

4 HDFS-HA安装

在这里插入图片描述

1.配置NN主机和NN备机所在节点的免密登录
# 1. NameNode主节点执行
# 生成密钥(在namenode主和namenode备生成,将公钥发布其他节点)
[root@hadoop11 ~]# ssh-keygen
# 发送公钥(所有NameNode节点都要发送)
[root@hadoop11 ~]# ssh-copy-id hadoop11
[root@hadoop11 ~]# ssh-copy-id hadoop12
[root@hadoop11 ~]# ssh-copy-id hadoop13


# 2. NameNode备机节点执行
# 生成密钥(在namenode主和namenode备生成,将公钥发布其他节点)
[root@hadoop12 ~]# ssh-keygen
# 发送公钥(所有NameNode节点都要发送)
[root@hadoop12 ~]# ssh-copy-id hadoop11
[root@hadoop12 ~]# ssh-copy-id hadoop12
[root@hadoop12 ~]# ssh-copy-id hadoop13
2.安装psmisc
# ZKFC远程杀死假死NN使用的killall namenode命令属于该软件中的。
# 建议所有节点都安装psmisc
[root@hadoop11 ~]# yum install -y psmisc
[root@hadoop12 ~]# yum install -y psmisc
3.安装配置jdk
# 1. 解压jdk
  [root@hadoop11 modules]# tar zxvf jdk-8u221-linux-x64.tar.gz -C /opt/installs/

# 2. 改jdk的目录名

# 3. 配置profile环境变量
  export JAVA_HOME=/opt/installs/jdk1.8
  export PATH=$PATH:$JAVA_HOME/bin 
  
# 4. 同步集群环境:
  1. 其他节点同步JDK的安装
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值