Zookeeper、Curator

1. 初识Zookeeper

1.1 Zookeeper概念

  • Zookeeper是Apache Hadoop项目下的一个子项目,是一个树形目录服务
  • Zookeeper翻译过来就是动物园管理员,它是用来管Hadoop(大象)、Hive(密封)、Pig(小猪)的管理员,简称ZK
  • Zookeeper是一个分布式的、开源的分布式应用程序的协调服务
  • Zookeeper提供的主要功能包括
    • 配置管理
    • 分布式锁
    • 集群管理
      在这里插入图片描述
      在这里插入图片描述

1.2 Zookeeper安装(linux)

  • 环境准备
    • ZooKeeper服务器是用Java创建的,它运行在JVM之上。需要安装JDK 7或更高版本。
  • 上传
    • 将下载的ZooKeeper放到/opt/ZooKeeper目录下
      #上传zookeeper alt+p
      put f:/setup/apache-zookeeper-3.5.6-bin.tar.gz
      #打开 opt目录
      cd /opt
      #创建zooKeeper目录
      mkdir  zooKeeper
      #将zookeeper安装包移动到 /opt/zooKeeper
      mv apache-zookeeper-3.5.6-bin.tar.gz /opt/zookeeper/
      
  • 解压
    • 将tar包解压到/opt/zookeeper目录下
      • tar -zxvf apache-ZooKeeper-3.5.6-bin.tar.gz

1.3 Zookeeper配置启动

  • 配置zoo.cfg
    • 进入到conf目录拷贝一个zoo_sample.cfg并完成配置
      #进入到conf目录
      cd /opt/zooKeeper/apache-zooKeeper-3.5.6-bin/conf/
      #拷贝
      cp  zoo_sample.cfg  zoo.cfg
      
    • 修改zoo.cfg
      #打开目录
      cd /opt/zooKeeper/
      #创建zooKeeper存储目录
      mkdir  zkdata
      #修改zoo.cfg
      vim /opt/zooKeeper/apache-zooKeeper-3.5.6-bin/conf/zoo.cfg
      
    • 修改存储目录:dataDir=/opt/zookeeper/zkdata
  • 启动ZooKeeper
    cd /opt/zooKeeper/apache-zooKeeper-3.5.6-bin/bin/
    #启动
     ./zkServer.sh  start
    
    • 看到下图表示成功启动
      在这里插入图片描述
  • 查看ZooKeeper状态
    • ./zkServer.sh status
    • zookeeper启动成功。standalone代表zk没有搭建集群,现在是单节点
      在这里插入图片描述
    • zookeeper没有启动

2. Zookeeper命令操作

2.1 Zookeeper数据模型

  • Zookeeper是一个树形目录服务,其数据模型和Unix的文件系统目录树很类似,拥有一个层次化结构
  • 这里面的每一个节点都被称为:ZNode,每个节点上都会保存自己的数据和节点信息
  • 节点可以拥有子节点,同时也允许少量(1MB)数据存储在该节点之下
  • 节点可以分为四大类
    • PERSISTENT持久化节点
    • EPHEMERAL临时节点
    • PERSISTENT_SEQUENTIAL持久化顺序节点:-s
    • EPHEMERAL_SEQUENTIAL临时顺序节点:-es
      在这里插入图片描述
      在这里插入图片描述

2.2 Zookeeper服务端常用命令

  • 启动Zookeeper服务
    • ./zkServer.sh start
  • 查看Zookeeper服务状态
    • ./zkServer.sh status
  • 停止Zookeeper服务
    • ./zkServer.sh stop
  • 重启Zookeeper服务
    • ./zkServer.sh restart
      在这里插入图片描述

2.3 Zookeeper客户端常用命令

  • 连接ZooKeeper服务端
    • ./zkCli.sh –server ip:port
  • 断开连接
    • quit
  • 查看命令帮助
    • help
  • 显示指定目录下节点
    • ls 目录
  • 创建节点
    • create /节点path value
  • 获取节点值
    • get /节点path
  • 设置节点值
    • set /节点path value
  • 删除单个节点
    • delete /节点path
  • 删除带有子节点的节点
    • deleteall /节点path
      在这里插入图片描述
      在这里插入图片描述

2.4 创建临时有序节点

  • 创建临时节点
    • create -e /节点path value
  • 创建顺序节点
    • create -s /节点path value
  • 查询节点详细信息
    • ls –s /节点path
  • 常用节点介绍
    • czxid:节点被创建的事务ID
    • ctime: 创建时间
    • mzxid: 最后一次被更新的事务ID
    • mtime: 修改时间
    • pzxid:子节点列表最后一次被更新的事务ID
    • cversion:子节点的版本号
    • dataversion:数据版本号
    • aclversion:权限版本号
    • ephemeralOwner:用于临时节点,代表临时节点的事务ID,如果为持久节点则为0
    • dataLength:节点存储的数据的长度
    • numChildren:当前节点的子节点个数
      在这里插入图片描述

3. Zookeeper JavaAPI操作

3.1 Curator介绍

  • Curator是Apache ZooKeeper的Java客户端库
  • 常见的Zookeeper Java API
    • 原生Java API
    • ZKClient
    • Curator
  • Curator项目的目标是简化Zookeeper客户端的使用
  • Curator最初是Netfix研发的,后来捐献给了Apache基金会,目前是Apache的顶级项目
  • 网址:http://curator.apache.org/

3.2 Curator API 常用操作

  • 建立连接
    • 搭建项目
      • 创建项目curator-zk
      • 引入pom和日志文件
      • 资料文件夹下pom.xml和log4j.properties
    • 创建测试类,使用curator连接zookeeper
      @Before
      public void testConnect() {
             
          //重试策略
          RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 10);
          //2.第二种方式
          //CuratorFrameworkFactory.builder();
          client = CuratorFrameworkFactory.builder()
              .connectString("192.168.200.130:2181")
              .sessionTimeoutMs(60 * 1000)
              .connectionTimeoutMs(15 * 1000)
              .retryPolicy(retryPolicy)
              .namespace("itheima")
              .build();
          //开启连接
          client.start();
      }
      
  • 添加节点
    /**
    * 创建节点:create 持久 临时 顺序 数据
    * 1. 基本创建 :create().forPath("")
    * 2. 创建节点 带有数据:create().forPath("",data)
    * 3. 设置节点的类型:create().withMode().forPath("",data)
    * 4. 创建多级节点  /app1/p1 :create().creatingParentsIfNeeded().forPath("",data)
    */
    @Test
    public void testCreate() throws Exception {
         
        //2. 创建节点 带有数据
        //如果创建节点,没有指定数据,则默认将当前客户端的ip作为数据存储
        String path = client.create().forPath("/app2", "hehe".getBytes()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值