| 
 | |
| 
 | 
| 开发:
C++知识库 
Java知识库 
JavaScript 
Python 
PHP知识库 
人工智能 
区块链 
大数据 
移动开发 
嵌入式 
开发工具 
数据结构与算法 
开发测试 
游戏开发 
网络协议 
系统运维 教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 | 
| -> 大数据 -> zookeeper 学习 -> 正文阅读 | 
|  | 
| [大数据]zookeeper 学习 | 
| 1: zookeeper? 集群搭建这里使用三台虚拟机器完成zookeeper 集群的搭建 192.168.217.128? ?2181? 2888 3888? 192.168.217.135? 2181? 2888 3888? 192.168.217.136? ?2181? 2888 3888? 其中 2181 是 zookeeper 默认的服务通信端口, 2888? 和3888 是集群之间 节点通信的算口 和 节点选举使用的端口? 分别上传 zk 的 压缩包 到zookeeper 用户的家目录下 解压 重命名 
 ?然后 分别在三台机器在 zk 的安装目录下 新建 data 目录? mkdir data 然后 data 中分别 添加 myid 文件 并在其中分别追加值 1 ,2, 3? 这三个值对应下面将要配置集群信息的 server.x?? ? ?然后修改 conf 文件下的 配置? cp? zoo_sample.cfg zoo.cfg vim?zoo.cfg 然后 在三个机器都添加 如下配置 server.1=192.168.217.128:2888:3888 并且修改 默认的dataDir=/temp/data 为 dataDir=/home/zookeeper/zk3.6/data 
 分别启动 三个机器的 zk 服务 cd /home/zookeeper/zk3.6/bin ./zkServer.sh start? 启动服务 
 
 创建节点进行实验? 在 128 上进行节点创建 ,在 135 和136上获取系欸但数据 
 ? ??自此集群搭建完成 ./zkServer.sh stop 关闭集群 
 2:给普通linux用户 添加su 切换权限?使用root 用户登录 为 新建的 zookeeper 用户添加 su 权限 执行如下命令: cd root visudo 切换到root用户下, 找到如下图所示,标出红线的一行 并在这一行下添加? root ALL=(ALL) ALL zookeeper ALL=(ALL) ? ? ALL 
 ?此时就可以切换了 
 ?如果想以后每次使用sudo的时候不再验证密码,可以在刚刚的sudoers文件做如下操作:? 
 ? 3:安装zk 4字命令需要配合使用的nc命令服务?yum install nc.x86_64 使用这个安装如果找不到 可以执行如下命令 yum erase nc wget http://vault.centos.org/6.6/os/x86_64/Packages/nc-1.84-22.el6.x86_64.rpm rpm -iUv nc-1.84-22.el6.x86_64.rpm 安装完成之后 使用nc --help 查看是否安装成功 
 4:基础命令学习基本的增删改查 请自行查阅官网:?ZooKeeper: Because Coordinating Distributed Systems is a Zoo 主要将一些 操作多一点的命令: 注册事件监听命令 ,老的版本 使用 在命令末尾 添加 watch 命令 ?在 3.5.9 版本之后 使用 -w 参数 来表示 例如注册是一个监听时间 ,然后在另外一个 会话中 修改这个节点 ,将会监听到 该事件的变化 
 修改该节点 ? ?事件监听 
 ?这种事件监听是一次性的 对于节点的权限 使用 setAcl 和getAcl 来实现 ,如 
 ACL 权限控制,使用:schema:id:permission 来标识,主要?3 个部分组成: 
 ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限 每个znode支持设置多种权限控制方案和多个权限 子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点 schema? 主要有以下几种: 
 
 permission: zookeeper目前支持下面一些权限: 
 权限相关命令 
 world方式 :? 命令语法 :?setAcl <path> world:anyone:<acl> [zk: localhost:2181(CONNECTED) 0] create /node1 1 ip 方式 : 语法?setAcl <path> ip:<ip>:<acl> [zk: localhost:2181(CONNECTED) 0] create /node2 1 Auth 方式: addauth digest <user>:<password> #添加认证用户 [zk: localhost:2181(CONNECTED) 0] create /node3 1 Digest 方式: 先将密码做成密文的 echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64 然后添加到命令中 setAcl <path> digest:<user>:<password>:<acl> echo -n tester:123456 | openssl dgst -binary -sha1 | openssl base64 [zk: localhost:2181(CONNECTED) 0] create /node4 1 注册权限之后,再获取 acl命令行super超级管理员 修改??zkServer.sh vim zkServer.sh # 找到nohup那一行,加入以下内容 "-Dzookeeper.DigestAuthenticationProvider.superDigest=user:HYGa7IZRm2PUBFiFFu8xY2pPP/s=" 
 user是用户名,后面那一大串是加密后的密文密码 修改完之后,需要重启zookeeper服务才能生效?./zkServer.sh restart # zkCli.sh ==================================================== zookeeper 其他4 字命令: stat? 
 配合 nc 命令来执行 ,需要加入ip白名单 到?? zoo.cfg? ?中 
 ?在需要被远程 使用4 字命令的机器上.修改? zoo.cfg? 在末尾添加?4lw.commands.whitelist=* [root@study-01 ~]# echo wchc |nc 192.168.135.129 2181 
 此时 验证 在 128 的机器 去使用 4字命令 + nc 获取 节点状态 ? ? 四字命令列表和用法请参考官网: ZooKeeper: Because Coordinating Distributed Systems is a Zoo?? 5: zookeeper java api? 和分布式锁??代码:? java api? 链接zk 集群 public static void main(String[] args) { 其他代码: GitHub - wanglei111000/zkOriginalJavaApi? ? ? ?未完待更新...... 6:curator? 封装的java apiCurator 是 Netflix 公司开源的一套 zookeeper 客户端框架,解决了很多 Zookeeper 客户端非常底层的细节开发工作,包括连接重连、反复注册 Watcher 和 NodeExistsException 异常等。 Curator 包含了几个包: 
 ZKClientBindings - Apache ZooKeeper - Apache Software Foundation? ? ?Curator? 的官方 文档 代码案例 : 依赖 <dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.8</version>
  </dependency>
  <dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>4.0.0</version>
  </dependency>
  <dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.0.0</version>
  </dependency>
</dependencies>
<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>
 
 package org.zk.curator;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.cache.PathChildrenCache;
import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent;
import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.data.Stat;
public class App 
{
    public static void main( String[] args ) throws Exception{
        CuratorFramework curatorFramework = CuratorFrameworkFactory.builder()
                .connectString("192.168.217.128:2181,192.168.217.135:2181,192.168.217.136:2181").
                sessionTimeoutMs(4000)
                .retryPolicy(new ExponentialBackoffRetry(1000,3))
                 //重试策略每个一秒重试一次 总共从试3次
                 //如果制定了命名空间 namespace 则所有的动作都在该链接下, 这里可以用作区分不同项目组的数据
                .namespace("").build();
        curatorFramework.start();
        //创建监听
        PathChildrenCache cache=new PathChildrenCache(curatorFramework,"/top",true);
        cache.start();
        cache.rebuild();
        cache.getListenable().addListener(new PathChildrenCacheListener() {
            @Override
            public void childEvent(CuratorFramework framwork, PathChildrenCacheEvent event) throws Exception {
                System.err.println("节点发生变化:"+event.getType());
            }
        });
        Stat stat = new Stat();
        //查询节点数据
        byte[] bytes = curatorFramework.getData().storingStatIn(stat).forPath("/hadoop");
        System.out.println(new String(bytes));
        System.out.println("准备创建【/top/ni】");
        curatorFramework.create().withMode(CreateMode.PERSISTENT)
                .forPath("/top/ni", "李小龙".getBytes());
        System.out.println("节点【/top/ni】创建成功");
        stat = curatorFramework.checkExists().forPath("/top/ni");
        if(stat!= null){
            System.out.println("【/top/ni】节点存在,直接删除");
            curatorFramework.delete().forPath("/top/ni");
        }
        byte[] bs=curatorFramework.getData().forPath("/hadoop");
        System.out.println("数据:"+new String(bs));
        curatorFramework.close();
    }
}
GitHub - wanglei111000/zkCurator? ? 代码路径 未完待续.... 7: 其他参考4.0 Zookeeper Java 客户端搭建 | 菜鸟教程? ? 菜鸟的案例 | 
|  | 
|  | 
| 上一篇文章 下一篇文章 查看所有文章 | 
| 
 | 
| 开发:
C++知识库 
Java知识库 
JavaScript 
Python 
PHP知识库 
人工智能 
区块链 
大数据 
移动开发 
嵌入式 
开发工具 
数据结构与算法 
开发测试 
游戏开发 
网络协议 
系统运维 教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 | 
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年10日历 | -2025/10/31 13:55:11- | 
| 
 | 
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |