学习 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是一种用于构建分布式应用的高性能.高度可靠.开源的分布式协调服务,提供如配置信息维护.命名.分布式同步.组服务等功能,可以实现如分布式共识.组管理.领导选举 ...
随机推荐
- 递归查询树形结构的SQL
最近项目中要递归树形,案例如下: 测试数据: ),PID ),Name )) ',NULL ,'山东省' ','烟台市' ','招远市' ','青岛市' ',NULL ,'四会市' ','清远市' ' ...
- Web API接口设计经验总结
在Web API接口的开发过程中,我们可能会碰到各种各样的问题,我在前面两篇随笔<Web API应用架构在Winform混合框架中的应用(1)>.<Web API应用架构在Winfo ...
- 关于C#基础
前几天帮人做个社交网站,还是用的控件方式,不过学习了ajax和一般处理程序ashx后,也用在了里面一些,今天回来继续写博客.继续上次总结下基础知识,学的内容多,总结的可能比较杂乱,分条总结为平时能自己 ...
- 有关微信开发中errorcode:-1 errmsg:system error 错误的一点原因
如果你在微信开发中遇到{"errcode":-1,"errmsg":"system error,hints:[req_id:]"}这样的错误 ...
- ms sql 2005和2008收缩日志的方法
步骤1: 2005的sql 语句为:back up log 数据库名称 with no_log 目的:截断数据库日志 2008的sql 语句为:alter database 数据库名称 set rec ...
- C#DbHelperOleDb,Access数据库帮助类
/// <summary> /// 编 码 人:苏飞 /// 联系方式:361983679 /// 更新网站:[url=http://www.sufeinet.com/thread-655 ...
- .NET 中获取调用方法名
在写记录日志功能时,需要记录日志调用方所在的模块名.命名空间名.类名以及方法名,想到使用的是反射(涉及到反射请注意性能),但具体是哪一块儿还不了解,于是搜索,整理如下: 需要添加相应的命名空间: us ...
- 孙鑫MFC学习笔记19:动态链接库
1.动态链接库 2.静态库和动态库 3.使用动态链接库的好处 4.动态链接库编译需要导出,使用需要导入 __declspec(dllexport),__declspec(dllimport) 5.动态 ...
- 两台Linux主机之间文件的复制
使用scp命令可以实现两台Linux主机之间的文件复制,基本格式是: scp [可选参数] file_source file_target 1. 复制文件 命令格式: scp local_file r ...
- 查看Eclipse版本
点击Help->About Eclipse,在弹出的对话框下部有很多logo. 鼠标在logo上停留,会有提示,找出提示为Eclipse.org的那个logo,即为Eclipse的logo,点击 ...