学习 zookeeper
1.zookeeper是什么
zookeeper是hadoop的分布式协调服务。主要作用是对hadoop的集群节点进行监控。但是由于其功能的单一而去不依赖hadoop其他框架,所以不局限在hadoop集群使用。比如淘宝的dubbo就用zookeeper集群来保证接口注册信息的高可靠性。
2.zookeeper有什么
zookeeper本质是个简单的文件系统。zookeeper本身可以搭建一个集群,整个集群维护一个文件系统,并保证这个文件系统的高可靠性。文件系统上的每个节点对应一个znode。每个znode维护着一个属性结构,里面存放着这个节点的版本号、时间戳、一些自定义信息。但是这些信息总体不能超过1M,也就是说zookeeper上的节点存储的信息不能超过1M。
zookeeper上的节点都是有类型的,一种是持久节点,一种是瞬时节点。瞬时节点下不能再有节点。
zookeeper的节点创建时可以设置顺序号,就变成了顺序节点。顺序节点和普通节点不同的主要是名称后面会有一个单调递增的顺序号。在处理事件时,这个顺序号可以控制事件的传播顺序和次数。
znode以某种方式变化时,可以通过观察(watch)机制让客户端得到通知。本质就是一个观察者模式。客户端注册观察在节点上,当节点发生变化后,通知观察,从而让客户端感知并作相应处理。
3.zookeeper能干什么
zookeeper可以和hadoop中的hdfs整合,用于监控存储集群,并且在namenode发生异常后,可以实现namenode的自动切换。
zookeeper可以喝hadoop中的hbase整合 ,用于客户端了解hbase集群的属性。
zookeeper可以和dubbo整合,用于对接口注册信息的存储。
zookeeper集群的高可靠性、节点的特性、与客户端的长链接监听机制等,实现了分布式集群的监控协调控制,让zookeeper成为了现在很流行的开源产品。
4.zookeeper单机部署
4.1.准备
项目首页:http://zookeeper.apache.org/
最新版本下载页:http://apache.fayea.com/apache-mirror/zookeeper/
我用的是 zookeeper-3.4.6.tar.gz
减压到一个运行目录。
zookeeper需要jdk1.6以上版本运行,所以需要确定环境变量中的jdk符合要求。
4.2.修改配置文件
找到 /zookeeper-3.4.6/conf/zoo_sample.cfg 文件,复制一份并将文件名字修改成zoo.cfg。
修改zoo.cfg文件,内容如下:
tickTime= initLimit= syncLimit= dataDir=/tmp/zookeeper clientPort=
主要是修改dataDir,将其指定到你的zookeeper的工作目录。
修改环境变量
export ZOOKEEPER_HOME=/Users/qyfmac/Documents/develop/zookeeper-3.4. export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1..0_51.jdk/Contents/Home export PATH=$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH
4.3.启动
- 使用命令zkServer.sh start 来启动zookeeper。启动日志如下:
qyfMacdeMacBook-Pro:conf qyfmac$ zkServer.sh start
JMX enabled by default
Using config: /Users/qyfmac/Documents/develop/zookeeper-3.4./bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
- 可以查看进程中是否有QuorumPeerMain来判断zookeeper是否启动成功。
qyfMacdeMacBook-Pro:conf qyfmac$ jps
QuorumPeerMain
我们还可以通过查看状态命令 zkServer.sh status 来验证单机部署是否成功。最后面的Mode:standalone表示这是一个单机启动的zookeeper。
qyfMacdeMacBook-Pro:bin qyfmac$ zkServer.sh status
JMX enabled by default
Using config: /Users/qyfmac/Documents/develop/zookeeper-3.4./bin/../conf/zoo.cfg
Mode: standalone
- 我们还可以使用另一台机器,通过nc或telnet命令传递一个ruok命令来检查zookeeper是否启动。
qyfMacdeMacBook-Pro:bin qyfmac$ echo ruok | nc localhost
imok
qyfMacdeMacBook-Pro:bin qyfmac$ telnet localhost
Trying ::...
Connected to localhost.
Escape character is '^]'.
ruok
imok
Connection closed by foreign host.
传递的ruok表示 Are you OK?
服务器响应的imok表示 I'm OK.
- 最后说一下停止服务命令 zkServer.sh stop
qyfMacdeMacBook-Pro:bin qyfmac$ zkServer.sh stop
JMX enabled by default
Using config: /Users/qyfmac/Documents/develop/zookeeper-3.4./bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
5.zookeeper客户端的实现
6.zookeeper的命令详解
6.1.服务器端命令
在zookeeper的安装目录/zookeeper-3.4.6/bin我们能看到这几个sh脚本命令。
qyfMacdeMacBook-Pro:bin qyfmac$ ls -al
total
drwxr-xr-x@ qyfmac staff : .
drwxr-xr-x@ qyfmac staff : ..
-rwxr-xr-x@ qyfmac staff README.txt
-rwxr-xr-x@ qyfmac staff zkCleanup.sh
-rwxr-xr-x@ qyfmac staff zkCli.cmd
-rwxr-xr-x@ qyfmac staff zkCli.sh
-rwxr-xr-x@ qyfmac staff zkEnv.cmd
-rwxr-xr-x@ qyfmac staff zkEnv.sh
-rwxr-xr-x@ qyfmac staff zkServer.cmd
-rwxr-xr-x@ qyfmac staff zkServer.sh
下面就让我们来看看这几个命令是干什么用的了。
- zkServer.sh
这个主要是控制服务的启停等管理命令。在命令行直接敲zkServer.sh 能够看到他的所有命令。
qyfMacdeMacBook-Pro:bin qyfmac$ zkServer.sh
JMX enabled by default
Using config: /Users/qyfmac/Documents/develop/zookeeper-3.4./bin/../conf/zoo.cfg
Usage: /Users/qyfmac/Documents/develop/zookeeper-3.4./bin/zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
最后一行就能看到zkServer.sh后面能够跟的命令。下面挨个说明
- zkServer.sh start 启动zookeeper服务。
- zkServer.sh start-foreground 启动zookeeper服务,并且查看运行过程中的异常。检查zookeeper运行异常时使用。
- zkServer.sh stop 停止zookeeper服务。
- zkServer.sh restart 重启zookeeper服务。
- zkServer.sh status 查看zookeeper服务的运行状态。
- zkServer.sh upgrade 升级zookeeper。
- zkServer.sh print-cmd 查看zookeeper的启动命令及参数。
zookeeper集群部署
zookeeper伪分布式部署
zookeeper集群的工作原理
zookeeper配置文件详解
参考资料
- 官方文档 http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
- 《hadoop权威指南》
- 《hadoop实战》
学习 zookeeper的更多相关文章
- 一脸懵逼学习Zookeeper(动物园管理员)---》高度可靠的分布式协调服务
1:Zookeeper是一个分布式协调服务:就是为用户的分布式应用程序提供协调服务 A.zookeeper是为别的分布式程序服务的 B.Zookeeper本身就是一个分布式程序(只要有半数以上节点存活 ...
- zookeeper 学习 zookeeper下载部署
下载 http://mirror.bit.edu.cn/apache/zookeeper/ 校验 解压后得到zookeeper-3.4.10.jar,使用md5sum zookeeper-3.4.10 ...
- 【转】Zookeeper学习---zookeeper 选举机制介绍
[原文]https://www.toutiao.com/i6593162565872779784/ zookeeper集群 配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每个服务器上的 ...
- 学习Zookeeper之第3章Zookeeper内部原理
第 3 章 Zookeeper 内部原理 3.1 选举机制 3.2 节点类型 3.3 stat 结构体 3.4 监听器原理 1)监听原理详解 2)常见的监听 3.5 写数据流程 第 3 章 Z ...
- 学习Zookeeper之第2章Zookeeper安装
第 2 章 Zookeeper安装 2.1 本地模式安装部署 2.2 配置参数解读 第 2 章 Zookeeper安装 2.1 本地模式安装部署 1)安装前准备: (1)安装 jdk (2)通过 fi ...
- 学习Zookeeper之第1章Zookeeper入门
第 1 章 Zookeeper入门 1.1 概述 1.2 特点 1.3 数据结构 1.4 应用场景 统一命名服务 统一配置管理 统一集群管理 服务器动态上下线 软负载均衡 1.5 下载地址 第 1 章 ...
- 学习Zookeeper需要了解的专业名词
一.Zookeeper的集群角色 Leader:该角色是整个zookeeper集群工作机制中的核心 Follower:该角色是zookeeper集群状态的跟随者 Observer:在集群中充当观察者的 ...
- Hadoop学习---Zookeeper+Hbase配置学习
软件版本号: JDK:jdk-8u45-linux-i586.tar.gz Zookeeper:zookeeper-3.4.6 Hbase:hbase-1.0.0-bin 一.JDK版本更换 由于之前 ...
- 这样学习ZooKeeper离大厂所需技能要求还远吗
概述 定义 Apache ZooKeeper是一种用于构建分布式应用的高性能.高度可靠.开源的分布式协调服务,提供如配置信息维护.命名.分布式同步.组服务等功能,可以实现如分布式共识.组管理.领导选举 ...
随机推荐
- iis 不能访问json文件
我从网上查的资料,解决方案都是设置MIME 映射和“处理脚本映射”. 我按照网上的解决方案执行之后还没有解决我的这个问题,所以我想会不会是其他的原因. 在那么一瞬间,灵光一闪,我把json文件放到新建 ...
- jquery列表顺序倒转排序效果
html文件代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&quo ...
- Firemonkey 指定 StringGrid 只能上下滾动,不要左右滚动
要使 StringGrid 只能上下滚动,不要左右滚动,只要加入下面代码即可: StringGrid1.AniCalculations.TouchTracking := [ttVertical]; p ...
- x8086汇编实现dos清屏(clear screen)
题目要求:x8086汇编实现dos下的清屏功能 80X25彩色字符模式显示缓冲区的结构: 在内存地址结构中,B8000H~BFFFFH共32KB的空间,为80x25彩色字符模式的显示缓冲区.向这个地址 ...
- 三层架构与MVC之间的区别
文章转发自:http://www.admin10000.com/document/535.html 我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真 ...
- mysql易混淆知识点
1,join 和 union join连接属于表之间的水平操作,而union 是表之间的垂直操作.简单讲就是水平操作主要是为了获得列数据,垂直操作是为了获得行数据 cross join ...
- 我们的相识,总是那么巧。-------eclipse中搭建maven项目
一.我们就来谈下eclipse中搭建maven web工程的步骤!虽然就是一个简单的例子,但是过程是很艰辛的. 首先我们看一下eclipse的封面,下面就是刚打开的华丽封面哦 其次我安装了eclips ...
- FHS定义的Linux目录树
根目录/: 最重要的一个目录,与开机/修复/还原有关.该目录所在的分区越小越好,安装的程序也最好不要放在该分区内. 根目录下必须存在的子目录: 目录 说明 /bin 存放了很多常用命令,能被root和 ...
- 正确的前端传后台json方式
DEMO: var data=JSON.stringify({"page": {"pagenow": 1,"pagesize": 20},& ...
- css3中的前缀
css3中: -o-:opera -moz:firefox -webkit:safari chrome -ms:IE9