hadoop大数据平台,Zookeeper组件详解及部署
hadoop大数据平台,Zookeeper组件详解及部署,附源码,看不懂找我。
目录
前言
在专栏的第一篇,我们学习了如何搭建一个基本的hadoop集群,在本篇中,我们接着学习hadoop平台的Zookeeper组件。
一,Zookeeper
1,zookeeper简介
Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应,从而实现集群中类似Master/Slave管理模式
Zookeeper=文件系统+通知机制
2,Zookeeper特点
Zookeeper:一个领导者(leader),多个跟随者(follower)组成的集群。
Leader负责进行投票的发起和决议,更新系统状态
Follower用于接收客户请求并向客户端返回结果,在选举Leader过程中参与投票
集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。
全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都
是一致的。
更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行。
数据更新原子性,一次数据更新要么成功,要么失败。
实时性,在一定时间范围内,client能读到最新数据。
3,Zookeeper结构
ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。
很显然zookeeper集群自身维护了一套数据结构。这个存储结构是一个树形结构,其上的每一个节点,我们称之为"znode",每一个znode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识,如图所示
4,Zookeeper应用场景
提供的服务包括:分布式消息同步和协调机制、服务器节点动态上下线、统一配置管理、负载均衡、集群管理等。
二,Zookeeper集群模式的部署
1,上传解压
tar -zxvf /opt/software/zookeeper-3.4.8.tar.gz -C /opt/local/src/
改名
mv /opt/local/src/zookeeper-3.4.8/ /opt/local/src/zookeeper
2, 修改配置文件
Zookeeper的配置文件放置在conf下,提供zoo_sample.cfg样例,可重命名zoo.cfg后在此基础上修改。
cd /opt/local/src/zookeeper/conf/
copy zoo_sample.cfg /opt/local/src/zookeeper/conf/zoo.cfg
vi /opt/local/src/zookeeper/conf/zoo.cfg
完整配置内容如下:
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181
dataDir=/opt/local/src/zookeeper/data
dataLogDir=/opt/local/src/zookeeper/logs
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
tickTime:心跳时间,单位为毫秒,Leader服务器与Follower服务器连接超时时长。
initLimit:Leader服务器与Follower服务器连接初始化的心跳数。即超过10个心跳后Follower服务器没有接收到Leader服务器,则认为连接失败。与tickTime共同使用,每次心跳时间为2000毫秒,10*2000=20秒为连接超时时长。
syncLimit:Leader服务器与Follower服务器相互之间传输信息时能够等待的最大心跳时间,与tickTime共同使用。
clientPort:连接ZooKeeper的访问端口。
dataDir,dataLogDir:ZooKeeper的数据存储与日志存储目录。
3,创建所需目录
mkdir -p /opt/local/src/zookeeper/data
mkdir -p /opt/local/src/zookeeper/logs
除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下。
vi /opt/local/src/zookeeper/data/myid
vi新建文件,并写入数据。以master节点为例,文件中只写入一个数字:1。ZooKeeper读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。即为server.1=master:2888:3888中的server.X。本实验在master节点下配置,则为:1。
4,配置环境变量
vi /etc/profile
添加如下配置:
#zookeeper environment
export ZK_HOME=/opt/local/src/zookeeper
export PATH=$PATH:$ZK_HOME/bin
保存并退出
5,分发环境
将master主节点已经配置好ZooKeepr文件分发给集群从节点。
scp -r /opt/local/src/zookeeper root@slave1:/opt/local/src/
scp -r /opt/local/src/zookeeper root@slave2:/opt/local/src/
scp /etc/profile root@slave1:/etc/
scp /etc/profile root@slave2:/etc/
此时需要注意的是,在分发的从节点上需要对每一个myid文件进行修改,如slave1从节点修改为:2。与zoo.cfg配置文件相对应。
vi /opt/local/src/zookeeper/data/myid
vi /opt/local/src/zookeeper/data/myid
5,修改所属用户组
[root@master ~]# chown -R hadoop:hadoop /opt/local/src/zookeeper
[root@slave1 ~] # chown -R hadoop:hadoop /opt/local/src/zookeeper
[root@slave2 ~] # chown -R hadoop:hadoop /opt/local/src/zookeeper
6,启动
关闭防火墙
[root@master ~]# systemctl stop firewalld.service
[root@slave1 ~]# systemctl stop firewalld.service
[root@slave2 ~]# systemctl stop firewalld.service
关闭防火墙自启
[root@master ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@slave1 ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@slave2 ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
加载环境变量
su - hadoop
source /etc/profile
启动
./zkServer.sh start
启动完毕后可通过以下命令查询Leader节点与Follower节点。本实验经过内部选举slave1为Leader节点。
[hadoop@master ~]$ ./zkServer.sh status
[root@slave1 ~]# su - hadoop
[hadoop@slave1 ~]$ source /etc/profile
[hadoop@slave1 ~]$ ./zkServer.sh start
[hadoop@slave1 ~]$ ./zkServer.sh status
[root@slave2 ~]# su - hadoop
[hadoop@slave2 ~]$ source /etc/profile
[hadoop@slave2 ~]$ ./zkServer.sh start
[hadoop@slave2 ~]$ ./zkServer.sh status
更多推荐
所有评论(0)