[TOC]


为了方便知识的管理,把zk归到hadoop知识中来进行整理。

zookeeper基础知识

zookeeper概述

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。一言以蔽之,ZooKeeper是分布式系统中的协调系统。有如下特点:简单ZooKeeper的核心是一个精简的文件系统,它支持一些简单的操作和一些抽象操作,例如,排序和通知。丰富ZooKeeper的操作是很丰富的,可实现一些协调数据结构和协议。例如,分布式队列、分布式锁和一组同级别节点中的“领导者选举”。高可靠ZooKeeper支持集群模式,可以很容易的解决单点故障问题。松耦合交互不同进程间的交互不需要了解彼此,甚至可以不必同时存在,某进程在ZooKeeper中留下消息后,该进程结束后其它进程还可以读这条消息。资源库ZooKeeper实现了一个关于通用协调模式的开源共享存储库,能使开发者免于编写这类通用协议。

zookeeper的角色

    领导者(leader):负责进行投票的发起和决议,更新系统状态。学习者(learner):包括跟随者(follower)和观察者(observer)follower:用于接受客户端请求并向客户端返回结果,在选举过程中参与投票。Observer:可以接受客户端连接,将写请求转发给leader,但observer不参与投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。客户端(client):请求发起方。

zookeeper的数据模型

    层次化的目录结构,命名符合常规文件系统规范每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识节点znode可以包含数据和子节点,但是EPHEMERAL类型的节点不能有子节点znode中的数据可以有多个版本,比如某一个路径下存有多个数据版本,那么查询这个路径下的数据就需要带上版本客户端应用可以在节点上设置监视器节点不支持部分读写,而是一次性完整读写

zookeeper的节点类型

        ZooKeeper节点znode有两种类型,临时节点(ephemeral)和持久节(persistent)。znode的类型在创建时确定并且之后不能再修改。ephemeral节点在客户端会话结束时,将会被zookeeper删除,并且ephemeral节点不可以有子节点。persistent节点不依赖与客户端会话,只有当客户端明确要删除该persistent节点时才会被删除。目前znode有四种形式的目录节点,PERSISTENT、PERSISTENT_SEQUENTIAL、EPHEMERAL、EPHEMERAL_SEQUENTIALznode可以是临时节点,一旦创建这个znode的客户端与服务器失去联系,这个znode也将自动删除,ZooKeeper的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称之为session,如果znode是临时节点,这个seesion失效,znode也就删除了;持久化目录节点,这个目录节点存储的数据不会丢失;顺序自动编号的目录节点,这种目录节点会更具当前已经存放在的节点数自动加1,然后返回给客户端已经成功创建的目录节点名;临时目录节点,一旦创建这个节点的客户端和服务器端口也就是session超时,这种节点会被自动删除。33

zookeeper的安装与操作

    约定:安装在/opt目录下面http://zookeeper.apache.org/releases.html单节点安装解压:tar -zxvf /opt/soft/zookeeper-3.4.6.jar -C /opt/重命名:mv  /opt/soft/zookeeper-3.4.6  /opt/soft/zookeeper添加到环境变量中vim /etc/profile.d/hadoop-eco.sh,添加一下内容:export ZOOKEEPER_HOME=/opt/zookeeperexport PATH=$PATH:$ZOOKEEPER_HOME/bin让配置生效source /etc/profile.d/hadoop-eco.sh配置zookeeper$ZOOKEEPER_HOME/confcp zoo_sample.cfg zoo.cfgvim zoo.cfg只需要修改一个地方dataDir=/opt/zookeeper/data在$ZOOOKEEPER创建一个目录data即可启动:$ZOOKEEPER_HOME/bin/zkServer.sh start关于zk的日志文件存储修改$ZOOKEEPER_HOME/bin/zkServer.sh,94行添加ZOO_LOG_DIR=$ZOOKEEPER_HOME/log客户端连接:$ZOOKEEPER_HOME/bin/zkCli.sh基本的命令行操作:[zk: localhost:2181(CONNECTED) 10] helpZooKeeper -server host:port cmd argsstat path [watch]set path data [version]ls path [watch]delquota [-n|-b] pathls2 path [watch]setAcl path aclsetquota -n|-b val pathhistory redo cmdnoprintwatches on|offdelete path [version]sync pathlistquota pathrmr pathget path [watch]create [-s] [-e] path data acladdauth scheme authquit getAcl pathclose connect host:portJava API的方式来访问ZooKeeper// 创建一个目录节点String path = "/zk";byte data[] = "this is my first zk node".getBytes();
//        String ret = zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
//        System.out.println("创建临时节点返回值:" + ret);String zk = zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);System.out.println("创建持久节点返回值:" + zk);// 创建一个子目录节点path = "/zk/childone";data = "child one node".getBytes();zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);// 取出子目录节点列表List<String> cList = zooKeeper.getChildren("/zk", true);for (String child : cList) {System.out.println(child);}// 修改子目录节点数据data = "child one node last information".getBytes();zooKeeper.setData(path, data, -1);// 创建另外一个子目录节点path = "/zk/childtwo";data = "child two node".getBytes();zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);List<String> cList = zooKeeper.getChildren("/zk", true);for (String child : cList) {System.out.println(child);}// 删除子目录节点zooKeeper.delete("/zk/childtwo", -1);zooKeeper.delete("/zk/childone", -1);// 删除父目录节点/*** 这里没有提供一个递归删除的API*/zooKeeper.delete("/zk", -1);        分布式安装uplooking01 zkuplooking02 zkuplooking03 zk解压:tar -zxvf /opt/soft/zookeeper-3.4.6.tar.gz -C /opt/重命名:mv  /opt/soft/zookeeper-3.4.6  /opt/soft/zookeeper添加到环境变量中vim /etc/profile.d/hadoop-etc.sh,添加一下内容:export ZOOKEEPER_HOME=/opt/zookeeperexport PATH=$PATH:$ZOOKEEPER_HOME/binexport ZOO_LOG_DIR=/opt/zookeeper/logs  ##zookeeper的日志目录让配置生效source /etc/profile.d/hadoop-eco.sh配置zookeeper$ZOOOKEEPER/confcp zoo_sample.cfg zoo.cfgvim zoo.cfgdataDir=/opt/zookeeper/data在$ZOOOKEEPER创建一个目录data即可添加集群中的三台机器server.100=uplooking01:2888:3888server.101=uplooking02:2888:3888server.102=uplooking03:2888:3888                端口2181--->zookeeper服务器开放给client连接的端口2888--->zookeeper服务器之间进行通信的端口3888--->zookeeper和外部进程进行通信的端口拷贝zookeeper安装目录和环境变量文件到其它两台机器上scp -r /opt/zookeeper root@uplooking02:/opt/scp -r /opt/zookeeper root@uplooking03:/opt/scp /etc/profile.d/hadoop-eco.sh root@uplooking02:/etc/profile.d/scp /etc/profile.d/hadoop-eco.sh root@uplooking03:/etc/profile.d/启动:到每一台机器上执行脚本zkServer.sh start查看zk的角色:zkServer.sh status其中有一台是leader,另外两台是follower为了保障zookeeper在为其它进程服务的时候,能够做出决策,进行投票,有结果,所以需要配置zookeeper机器的个数,一般都要是2N+1(N是正整数)

转载于:https://blog.51cto.com/xpleaf/2145101

Hadoop笔记整理(三):Zookeeper相关推荐

  1. Hadoop笔记整理(二):HDFS

    [TOC] HDFS(Hadoop Distributed File System):分布式存储 NameNode 是整个文件系统的管理节点.它维护着整个文件系统的文件目录树,文件/目录的元信息和每个 ...

  2. Python学习笔记整理(三)Python中的动态类型简介

    Python中只有一个赋值模型 一.缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明.这意味着没有必要事声明变量.只要记住,这个概念实质上对变量,对象和它们之 ...

  3. latex教程——读书笔记整理(三)——数学公式

    综述 目录 综述 数学模式的群组 数学公式的基本元素 数学空格 垂直取齐 虚位 数学字体尺寸 定理.定律 粗体符号 数学符号表 LATEX 使用一种特有的模式来排版数学(mathematics) 公式 ...

  4. Deep Learning(深度学习)学习笔记整理系列三

    Deep Learning(深度学习)学习笔记整理系列 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明 ...

  5. SpringBoot笔记整理(三)

    SpringBoot笔记整理(一) SpringBoot笔记整理(二) SpringBoot笔记整理(三) SpringBoot笔记整理(四) Web开发 1.使用SpringBoot: 1)创建Sp ...

  6. Hadoop 学习笔记(三)常用命令

    Hadoop 学习笔记(三)常用命令 进入HADOOP_HOME目录. 执行sh bin/start-all.sh 进入HADOOP_HOME目录. 执行sh bin/stop-all.sh Usag ...

  7. hadoop大数据开发技术学习笔记第三天:(前序)MySQL数据库进阶

    hadoop大数据开发技术学习笔记第三天:(前序)MySQL数据库进阶 一.回顾知识 1.myschool数据库和数据表的创建 (1)创建数据库 (2)数据库模型图 (3)创建数据表grand (4) ...

  8. Deep Learning(深度学习)学习笔记整理系列之(三)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  9. HBase笔记整理(二)

    [TOC] HBase笔记整理(二) 逻辑结构 RowKey第一位ColumnFamilyColumnQuiauervalue(TimeStamps)Cell 物理结构 HMaster -----&g ...

最新文章

  1. maven项目下tomcat直接启动不了(LifecycleException)。报错如下截图
  2. nginx总结二(nginx的启动停止以及版本平滑升级)
  3. 恢复SQLSERVER被误删除的数据
  4. from mysql partition select_玩转select条件查询,避免踩坑
  5. flex与flash元件交互
  6. 02 Nginx和Keepalived高可用
  7. 银行卡四要素认证api接口_银行卡实名认证查询-银行卡四要素鉴权
  8. pandas按照多列排序-ascending
  9. 去国外超市如何用英文表达你想要的东西?
  10. 杨华杰 清华大学计算机,软件工程课程设计机票预订系统【参考】.doc
  11. 使用sphinx+markdown来编写文档,生成html和pdf
  12. Win10屏保设置位置在哪里可以找到
  13. 【读书笔记】《互联网企业安全高级指南(赵彦等)》
  14. 回归初心才是智能家居APP掘金市场的制胜关键
  15. 用计算机写文章 单元备课,备课写教案
  16. 可用内存不够异常问题的处理
  17. jvm 之 国际酒店 8 月 19 一次full GC 导致的事故
  18. 傅里叶级数FS,连续时间傅里叶变换CTFT,离散时间傅里叶变换DTFT,离散傅里叶变换DFT,推导与联系(二)
  19. 深度学习中EMA的使用场景
  20. python语言能做游戏吗_python语言能做什么

热门文章

  1. 基于visual Studio2013解决C语言竞赛题之1026判断排序
  2. 简单介绍工厂模式和单例模式
  3. 从天地图下载瓦片构建本地瓦片地图
  4. Xcode字体新宠 Monoid
  5. bzoj 3190 赛车 半平面交
  6. mysql NOW,CURRENT_TIMESTAMP,SYSDATE 之间的区别
  7. WIN7下访问ftp的方法
  8. 教你如何防止网站被挂马!
  9. 微信公众号使用LocalStorage解决返回缓存问题
  10. 【报告分享】2020快手电商生态报告.pdf(附下载链接)