文章目录
Hadoop框架Zookeeper简介、搭建及简单使用
Zookeeper简介
Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理、命名、分布式同步、集群管理、数据库切换等服务。它不适合用来存储大量信息,可以用来存储一些配置、发布与订阅等少量信息。Hadoop、Storm、消息中间件、RPC服务框架、分布式数据库同步系统,这些都是Zookeeper的应用场景。
Zookeeper集群中节点个数一般为奇数个(>=3),若集群中Master挂掉,剩余节点个数在半数以上时,就可以推举新的主节点,继续对外提供服务。
Paxos 算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。一个通用的一致性算法可以应用在许多场景中,是分布式计算中的重要问题。因此从20世纪80年代起对于一致性算法的研究就没有停止过。节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。Paxos 算法就是一种基于消息传递模型的一致性算法。
不仅仅是分布式系统中,凡是多个过程需要达成某种一致的场合都可以使用Paxos 算法。一致性算法可以通过共享内存(需要锁)或者消息传递实现,Paxos 算法采用的是后者。Paxos 算法适用的几种情况:一台机器中多个进程/线程达成数据一致;分布式文件系统或者分布式数据库中多客户端并发读写数据;分布式存储中多个副本响应读写请求的一致性。
Zookeeper集群搭建
在本文中Zookeeper节点个数(奇数)为3个。Zookeeper默认对外提供服务的端口号2181 。Zookeeper集群内部3个节点之间通信默认使用2888:3888
192.168.100.101
192.168.100.102
192.168.100.103
下载zookeeper对应的tar包
1、上传安装包到master并解压
#切换到moudle目录下用xftp上传
cd/usr/local/moudle
#解压
tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/soft/
2、配置环境变量
#切换到zookeeper-3.4.6目录
cd /usr/local/soft/zookeeper-3.4.6
#为了方便配置环境变量先pwd复制一下路径
pwd
/usr/local/soft/zookeeper-3.4.6
#配置环境变量
vim /etc/profile
ZOOKEEPER_HOME=/usr/local/soft/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin
#刷新环境变量
source /etc/profile
3、修改配置文件
#切换到conf目录
cd conf/
#复制并重命名
cp zoo_sample.cfg zoo.cfg
#编辑配置文件
vim zoo.cfg
#修改
dataDir=/usr/local/soft/zookeeper-3.4.6/data
#增加
server.0=master:2888:3888
server.1=node1:2888:3888
server.2=node2:2888:3888
4、新建data目录
#切回zookeeper-3.4.6目录
cd /usr/local/soft/zookeeper-3.4.6
#新建data目录
mkdir data
#切换到data目录
cd data
#创建一个myid文件
touch myid
5、同步到其它节点
#切回到soft目录
cd /usr/local/soft
#同步
[root@master soft]# scp -r zookeeper-3.4.6/ node1:`pwd`
[root@master soft]# scp -r zookeeper-3.4.6/ node2:`pwd`
6、配置node1和node2的环境变量
- 配置node1
#切换目录
[root@node1 ~]# cd /usr/local/soft/zookeeper-3.4.6/
pwd
/usr/local/soft/zookeeper-3.4.6
#配置node1环境变量
vim /etc/profile
ZOOKEEPER_HOME=/usr/local/soft/zookeeper-3.4.6
export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
source /etc/profile
- 同理配置node2
#切换目录
[root@node2 ~]# cd /usr/local/soft/zookeeper-3.4.6/
pwd
/usr/local/soft/zookeeper-3.4.6
#配置node1环境变量
vim /etc/profile
ZOOKEEPER_HOME=/usr/local/soft/zookeeper-3.4.6
export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
source /etc/profile
#在所有节点执行
source /etc/profile
7、编辑/usr/local/soft/zookeeper-3.4.6/data/myid
#切换所有节点的data目录
cd /usr/local/soft/zookeeper-3.4.6/data/
master,node1,node2分别加上0,1,2
- master
- node1
- node2
8、启动zk
#三台都需要执行
zkServer.sh start
#查看状态
zkServer.sh status
通过jps可以查看zk的进程:QuorumPeerMain
当有一个leader的时候启动成功
9、停止zk
#三台都需要执行
zkServer.sh stop
10、连接zk
zkCli.sh
zk 是一个目录结构 ,每个节点可以存数据,同时可以有子节点
默认连接localhost
#退出
quit
- 连接node1
zkCli.sh -server node1:2181
- help查看所有命令
随便敲也行
help
zk Shell
- 创建目录
create /test testData
create /test/a aData
- 获取数据
get /test
ls /test
- 删除数据
delete 只能删除没有子节点的节点
rmr /test 删除节点
- 修改数据
set /test/a aData
连接node2跟node1的数据是一样的(数据同步)去中心化架构
11、重置zk
1、杀掉所有zk进程
kiil -9 pid
2、删除data目录下的version文件, 所有节点都要删除
rm -rf /usr/local/soft/zookeeper-3.4.6/data/version-2
2、启动zk
zkServer.sh start
到底啦!觉得靓仔的文章对你学习Hadoop有所帮助的话,一波三连吧!q(≧▽≦q)