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

[经验分享] Hadoop学习笔记 ZooKeeper

[复制链接]

尚未签到

发表于 2015-7-13 09:10:48 | 显示全部楼层 |阅读模式
  Zookeeper是Hadoop的分布式协调服务。
  
  Zookeeper是简单的,它的核心是一个精简的文件系统,它提供一些简单的操作和额外的抽象操作,如排序和通知。
  Zookeeper表现力足够强,它的原语操作是一组丰富的构件,可用于实现很多协调数据结构和协议。如分布式队列,分布式锁和一组同级别的领导者选举等。
  Zookeeper具有高可用性,它运行在一组机器之上,并且在设计上具有高可用性,可以帮助系统避免单点故障。
  Zookeeper采用松耦合交互方式,参与者不需要彼此了解。
  Zookeeper是一个资源库,它提供了一个关于通用协调模式实现和方法的开源共享存储库,能使程序员免于编写这类通用的协议。
  Zookeeper也是高性能的,对于以写为主的基准吞吐量,已经超过 10000 ops,以读为主的话还要高好几倍。
  
  
  Zookeeper可以被看成高可用的文件系统,但它没有文件和目录,因此可以看成一个由节点组成的目录树,节点统一称为znode,最多可以存储1M的内容。Znode的读写操作都是原语操作,即读写都是全部读或全部写,不存在读一部分和写一部分的操作,当然,也不能追加内容。因此,Zookeeper还有个组的概念,可以以组名命名父节点,成员作为子节点。
  
  一个简单的例子:
  
  public class CreateGroup implements Watcher {
  private static final int SESSION_TIMEOUT = 5000;
  private ZooKeeper zk;
  private CountDownLatch connectedSignal = new CountDownLatch(1);
  public void connect(String hosts) throws IOException, InterruptedException {
  zk = new ZooKeeper(hosts, SESSION_TIMEOUT, this);
  connectedSignal.await();
  }
  @Override
  public void process(WatchedEvent event) { // Watcher interface
  if (event.getState() == KeeperState.SyncConnected) {
  connectedSignal.countDown();
  }
  }
  public void create(String groupName) throws KeeperException,
  InterruptedException {
  String path = "/" + groupName;
  String createdPath = zk.create(path, null/*data*/, Ids.OPEN_ACL_UNSAFE,
  CreateMode.PERSISTENT);
  System.out.println("Created " + createdPath);
  }
  public void close() throws InterruptedException {
  zk.close();
  }
  public static void main(String[] args) throws Exception {
  CreateGroup createGroup = new CreateGroup();
  createGroup.connect(args[0]);
  createGroup.create(args[1]);
  createGroup.close();
  }
  }
  
  主要需要理解的一个是 Watcher接口,一个是connectedSignal。
  Watcher对象主要接收Zookeeper的回调,以 获得各种事件的通知。它接口中只有一个方法,process(WatchedEvent event),根据event的可以做处理。
  当一个Zookeeper实例被创建时,会启动一个线程连接到Zookeeper服务。由于构造函数是立即返回,因此使用新建的实例之前,要确保Zookeeper之间的连接已经建立。这时需要使用一个CountDownLatch类来完成这个工作。关于CountDownLatch的使用,可以参考这篇文章:浅析Java中CountDownLatch用法
  Znode以某种方式变化时,观察机制可以让客户端得到通知。因此,可以在读操作如 exists/getChildren/getData上设置观察,写操作create/delete和setData会触发观察器,产生一个观察事件。
  Zookeeper客户端API
  Zookeeper提供两种API:同步执行的和异步执行的。
  同步的直接返回Stat
  public Stat exists(String path, Watcher watcher) throws KeeperException, InterruptedException
  Stat是包含该znode元数据的对象。
  异步接口使用回调实现:
  public void exists(String path, Watcher watcher, StatCallback cb, Object ctx)
  
  StatCallback接口有以下方法:
  public void processResult(int rc, String path, Object ctx, Stat stat);
  其中,rc参数是返回代码,对应KeeperException的代码,每个非零代码都代表一个异常。
  异步API允许你一流线方式处理请求,这在某些情况下可以提供更好的吞吐量。对于以事件驱动模型编程来说,异步也更适合。
  
  ACL
  每个znode被创建时,都会带一个ACL列表,用于决定谁可以对他执行何种操作。ACL依赖于客户端的身份验证机制。Zookeeper提供三种身份验证模式:
  Digest:用户名和密码
  Host:主机名
  IP:ip地址
  
  每个ACL都是身份验证模式,符合该模式的身份和一组权限的组合。

运维网声明 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-86045-1-1.html 上篇帖子: 超人学院二期学员分享hadoop工作经验 下篇帖子: 基于Eclipse搭建Hadoop源码环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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