设为首页 收藏本站
查看: 801|回复: 0

[经验分享] hadoop学习之ZooKeeper

[复制链接]

尚未签到

发表于 2015-9-7 07:58:22 | 显示全部楼层 |阅读模式
1. 什么是ZooKeeper?
  ZooKeeper是一组工具,用来配置和支持分布式调度。
  它能处理分布式应用的“部分失败”问题。
  

  什么是部分失败?
  部分失败是分布式处理系统的固有特征,即发送者无法知道接收者是否收到消息,它出现的可能性有 网络传输出现问题、接收进程已经死掉等。
  

  ZooKeeper是Hadoop的分布式协调服务,ZooKeeper是Hadoop生态系统的一部分,但又远不止如此,它能支持更多类似的分布式平台和系统,如Jubatus,Cassender等等。
  而且HBase明确指出至少需要一个ZooKeeper实例的支持。
  

2. ZooKeeper有什么特征?
  其核心是一个精简的文件系统;
  其原语是一组丰富的“构件”,可用于实现很多数据结构和协议,如分布式队列,分布式锁,同一级中的领导者选举;
  能避免单点故障,高可用性;
  松耦合交互方式:各进程间不必相互了解,同步等;
  是一个资源库,对通用协议提供一个开源的共享存储库。
  

3. ZooKeeper有哪些需要配置的属性?
  tickTime:  ZooKeeper运行的基本时间单元
  dataDir:    存储持久数据的本地文件系统位置
  clientPort: 监听客户端连接的端口(常用的端口是2181)
  

4. ZooKeeper的结构,及其相关的一些基本操作
  ZooKeeper需要一组服务器来部署,为客户端提供服务。每个客户端会找到其中的一台服务器。问题:如何维护这组服务器?
  首先,需要高可靠性。不能使用一个单节点来维护这个服务器列表,这是因为这个节点坏了,整个系统就坏了,可靠性差;而且故障的服务器自身无法将其从列表中删除。
  所以,ZooKeeper需要一个具有主动修改能力的、高可靠性的服务来维护这个列表。
  

DSC0000.jpg

  

  ZooKeeper是一个层次结构。类似一个文件系统的结构,有目录和文件的包含关系。
  有一个父节点,包含一系列子节点。
  父节点的命名是组名,子节点的命名就是组成员名了。
  树形结构:树中的节点被称为znode,znode
  

  ZooKeeper的操作,提供的方法、接口:
  create():创建一个znode节点,其必须要有父节点,加入一个组:只需要指定/+groupname + / + membername,然后创建即可
  delete():删除一个znode,其必须无子节点。需要提供路径和版本号参数。
  exists():测试一个znode是否存在
  sync():将客户端的znode视图与ZooKeeper同步
  getACL, setACL: ACL:access control list
  getChild(): 获取一个znode的子节点列表,如:zk.getChildren(path, false)
  getData, setData:获取或者设置一个znode的数据
  其中更改操作,需要更新znode的版本号才能完成。
  

5. 有哪些客户端可用的 ZooKeeper的API?
  针对以上ZooKeeper的操作,Zookeeper也为客户端提供了对应的API。有两种绑定的语言Java和C,并提供同步和异步两种方式,功能都相同。
  

6. ZooKeeper的数据模型
  1) 树形结构、每个znode节点可以存储数据、并有一个关联的ACL。但znode存储的数据被限制在1MB内。
  2)数据访问具有原子性,要么成功,要么全部失败。
  3)znode通过路径被引用。类似于linux的文件路径。
  4)znode有两种,短暂性的和持久性的。短暂性的会在客户端结束后删除
  5)顺序号:命名时,zookeeper在名字中指定了顺序号,这个在创建znode时,设置顺序标识就会产生,顺序号,可用于全局排序
  6)观察:是一种机制,znode发生变化时,观察机制可以通知客户端(类似于观察者模式),观察注册后只触发一次
  一般在读操作exists、getChildren和getData上设置观察,然后这些观察在create、delete、setData时触发。
  7)ACL
  每个znode被创建都会带有一个ACL列表,用于检验权限:谁,可以对它自己执行,何种操作
  ACL依赖于ZooKeeper的身份依赖机制。
  digest : 利用用户名和密码来识别客户端
  host: 通过主机名 hostname 来识别客户端
  ip : 利用ip来识别客户端
  

7. ZooKeeper的实现方式
  两种模式:
  独立模式:适用于测试环境,甚至单元测试。只有一个ZooKeeper服务器,但是不保证高可用性和恢复性。
  复制模式:适用于生产环境,通过复制来保证高可用性和恢复性,保证半数以上的机器处于可用状态。
  其实现使用Zab协议,包括两个阶段:
  阶段一:领导者选举: 一台机器选为leader,其他为follower,一旦半数以上的机器与leader的同步状态相同,此阶段完成。
  阶段二:原子广播:所有写请求给leader,然后再由leader广播给follower,且当半数以上follower完成同步后,leader才提交这个更新,然后客户端才收到完成的响应。
  若领导者故障,则由follower中选出新的leader。
  以上两个过程可以无限循环执行。
  

8. ZooKeeper如何提供一致性保证?
  问题:一个跟随者可能滞后领导者几个更新。
  若一个修改/更新需要提交,那么就需要半数以上的机器已将其持久化。每一个对znode树的更新,都会有个全局唯一ID号:zxid,这个ID号用于查询更新的位置。因为ZooKeeper会对所有更新进行排序。
  ZooKeeper的更新具有原子性,要么成功,要么失败,不存在部分成功。一旦成功,更新便具有持久性。
  但是不同的客户端在读取数据时,由于ZooKeeper外部通信机制的原因,其客户端的ZooKeeper状态可能是不一致的,但这种现象与ZooKeeper的一致性是兼容的。
  

9. 什么是会话?
  一个客户端与一台ZooKeeper服务器建立一个连接,就是会话,每个会话就有一个时间限制,超时就需要重新连接。
  客户端尝试链接ZooKeeper服务器失败时,会依次尝试其他服务器,直到成功或者全部失败。
  心跳(ping请求):会话空闲时,发送心跳来保证会话不过期,并能检测出服务器故障。
  自动故障切换:客户端在连接的服务器发生故障后,能自动切换到另外一台服务器,并且会话继续有效。
  

10. ZooKeeper有哪些状态?
  ZooKeeper对象在一个生命周期内,有好几个状态。
  getStates()方法能查询出ZooKeeper的状态。
  Connecting : 新建ZooKeeper实例时
  Connected : 建立连接后
  SyncConnected: 使用“观察”机制,状态转换时
  Disconnected: 断开后,状态。一般连接丢失后,它会自动尝试重新连接。
  Closed : ZooKeeper被认为不是活跃的,不可用了。
  

  以上这些概念仅仅是ZooKeeper学习的基本东西,还需要构建真正的应用、编写程序去实践。
  使用ZooKeeper可以实现很多分布式的数据结构和协议,如barrier, 队列,和两阶段交换协议。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-110299-1-1.html 上篇帖子: Ubuntu 14.10 下ZooKeeper+Hadoop2.6.0+HBase1.0.0 的HA机群高可用配置 下篇帖子: 搭建ZooKeeper
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表