学习 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是一种用于构建分布式应用的高性能.高度可靠.开源的分布式协调服务,提供如配置信息维护.命名.分布式同步.组服务等功能,可以实现如分布式共识.组管理.领导选举 ...
随机推荐
- 解决在IE中获取数据的缓存问题,运行环境为node.js
IE下默认会开启缓存策略,不管是页面还是通过ajax请求的数据都会议一个url,url是uri(统一资源定位符)的实例,url就是资源的标识符. 写一个demo进行验证,测试环境:IE8,node.j ...
- LINQ的ElementAt与ElementAtOrDefault方法
2个方法,均返回集合中指定索引的元素.区别在于前者当没有结果返回时,抛出异常,而后者如果没有结果则返回默认值. 参考例子: 上图示例中,红色数字是集合的索引,它是从0开始.只要知道它是从0开始,那下面 ...
- 在Gridview如何进行每行单元格比较
有在论坛上看到一个问题,就是在Gridview控件中,需要对几个列的数值进行比较,原问题如下: 先在数据库中准备数据: CREATE TABLE [dbo].[RecordTime] ( Id ,) ...
- Bootstrap学习笔记系列5------Bootstrap图片显示
通过添加一下的class来实现bootstrap对图片的支持 img-round 通过border-radius:6px 来获得图片圆角 img-circle 通过border-radius:50%来 ...
- ASP.NET里的Session详细解释
Session模型简介 Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每个用户首次与这台WWW服务器建立连 ...
- Microsoft Visual Studio 2012常用快捷键
注释:Ctrl+K+C反注释:Ctrl+K+U生成解决方案:CTRL + SHIFT + B生成编译:CTRL +F7打开文件:CTRL +O打开项目:CTRL +SHIFT+O显示类视图窗口:CTR ...
- ASP.NET MVC 模块与组件(二)——定制图片验证码
本着简洁直接,我们就直奔主题吧! 下面是一个生成数字和字母随机组合的验证码类源代码: using System; using System.Drawing; using System.Drawing ...
- 孙鑫MFC学习笔记20:Hook编程
1.HOOK拦截消息,设置越后的钩子优先级越高(钩子队列)2.SetWindowHookEx设置钩子 如果thread identifier为0或其他进程创建的线程,回调函数需要在动态链接库中声 ...
- iOS取得AddressBook联系人信息
新建一个CContact类用于存放联系人信息,下面是该类的代码: CContact.h代码: 01 #import <Foundation/Foundation.h> 02 03 ...
- Jpa实体VO使用继承的实体的做法@MappedSuperclass注解的使用
在我们开发一个项目的时候,同城定义实体的时候,都会进行一些抽象,也就是面向对象的一些思想.1比如无论是数据实体还是其他类型的实体都会有id字段2.对于数据实体一般都会有创建人,创建时间,更新人,更新时 ...