简介

  ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

特点

  在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据。如果在创建znode时Flag设置为EPHEMERAL,那么当创建这个znode的节点和Zookeeper失去连接后,这个znode将不再存在在Zookeeper里,Zookeeper使用Watcher察觉事件信息。当客户端接收到事件信息,比如连接超时、节点数据改变、子节点改变,可以调用相应的行为来处理数据。Zookeeper的Wiki页面展示了如何使用Zookeeper来处理事件通知,队列,优先队列,锁,共享锁,可撤销的共享锁,两阶段提交。
  那么Zookeeper能做什么事情呢,简单的例子:假设我们有20个搜索引擎服务器(每个负责总索引中的一部分的搜索任务)和一个总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总服务器),一个web的cgi(向总服务器发出搜索请求)。搜索引擎的服务器中的15个服务器提供搜索服务,5个服务器正在生成索引。这20个搜索引擎的服务器经常要让正在提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以提供搜索服务了。使用Zookeeper可以保证总服务器自动感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,当总服务器宕机时自动启用备用的总服务器。
 
安装
1.下载解压
 tar -xzf ~/softwares/installtions/zookeeper-3.4.5.tar.gz -C ~/modules/

  

2.修改配置文件

cd /home/admin/modules/zookeeper-3.4.5/conf

mv zoo_sample.cfg ./zoo.cfg

vim zoo.cfg

修改内容如下:
(需要手动创建该文件夹)
dataDir=/home/admin/modules/zookeeper-3.4.5/zkData (文件最下面添加)
server.1=linux01:2888:3888
server.2=linux02:2888:3888
server.3=linux03:2888:3888

  

3.创建文件夹与myid

cd /home/admin/modules/zookeeper-3.4.5

mkdir zkData

cd  zkData

touch myid

echo 1 > myid

  

4.分发安装到linux02和linux03

cd /home/admin/modules/zookeeper-3.4.5

scp -r zookeeper-3.4.5/ linux02:/home/admin/modules/

scp -r zookeeper-3.4.5/ linux03:/home/admin/modules/

分别修改linux02和linux03的myid为2和3

  

5.启动zookeeper集群与查看状态

bin/zkServer.sh start

bin/zkServer.sh status

  

6.客户端链接到zookeeper

bin/zkCli.sh -server linux01:2181
链接成功后测试
1.查看根目录
ls / 2.创建测试文件夹
create /my_test_servers "servers" 退出
quit

  

7.其它

如果有其它zookeeper集群正在运行,jps查看的是其它的进程,想要关闭不能使用

bin/zkServer.sh stop

 只能用jps查看进程id,然后把进程kill掉,再重新启动zookeeper集群

kill -9 [进程id]

  

简单使用

1.在Intellij IDEA 中创建zookeeper测试项目

2.创建zookeeper服务端文件

DistributeServer.java

package zookeeper;

import org.apache.zookeeper.*;

import java.io.IOException;
import java.io.UnsupportedEncodingException; public class DistributeServer {
private static String connectString = "linux01:2181,linux02:2181,linux03:2181";
private static int sessionTimeout = 2000;
private ZooKeeper zk = null;
private String parentNode = "/my_test_servers"; // 创建到zk的客户端链接
public void getConnect() throws IOException {
zk = new ZooKeeper(connectString, sessionTimeout, watchedEvent -> { });
} // 注册服务器
public void registServer(String hostname) throws UnsupportedEncodingException, KeeperException, InterruptedException {
String create = zk.create(
parentNode + "/" + "child_node",
hostname.getBytes("UTF-8"),
ZooDefs.Ids.OPEN_ACL_UNSAFE,
CreateMode.EPHEMERAL_SEQUENTIAL
);
System.out.println(hostname + "is online" + create);
} // 业务功能
public void business(String hostname) throws InterruptedException {
System.out.println(hostname + "is working ...");
Thread.sleep(Long.MAX_VALUE);
} public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
args = new String[]{"linux03"}; DistributeServer server = new DistributeServer();
server.getConnect(); server.registServer(args[0]);
server.business(args[0]);
} }

  

3.创建zookeeper客户端文件

DistributeClinet.java

package zookeeper;

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooKeeper; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; public class DistributeClinet {
private static String connectString = "linux01:2181,linux02:2181,linux03:2181";
private static int sessionTimeout = 2000;
private ZooKeeper zk = null;
private String parentNode = "/my_test_servers"; // 创建客户端链接
public void getConnect() throws IOException {
zk = new ZooKeeper(connectString, sessionTimeout, watchedEvent -> {
// 当我们监停的服务器发生变化,则会回调该方法
// 在这里获取到变化后的所以的服务列表
try {
getServerList();
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
} public void getServerList() throws KeeperException, InterruptedException {
// 1、获取服务器字节点信息,并且对父节点进行监控
List<String> children = zk.getChildren(parentNode, true); // 2、存储服务器信息列表
ArrayList<String> servers = new ArrayList<>(); // 3、遍历所有节点,获取节点中的主机名称信息
for (String child : children) {
byte[] data = zk.getData(parentNode + "/" + child, false, null);
servers.add(new String(data));
} // 4、打印服务器列表信息
System.out.println(servers); } // 业务功能
public void business() throws InterruptedException {
System.out.println("Clinet is working ...");
Thread.sleep(Long.MAX_VALUE);
} public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
DistributeClinet clinet = new DistributeClinet();
clinet.getConnect();
clinet.getServerList();
clinet.business();
} }

  

4.测试

启动服务器端,与客户端

在客户端监看,服务器端的变化。

大数据(7) - zookeeper的安装与使用的更多相关文章

  1. 2020/4/26 大数据的zookeeper分布式安装

    大数据的zookeeper分布式安装 **** 前面的文章已经提到Hadoop的伪分布式安装.现在就在原有的基础上安装zookeeper. 首先启动Hadoop平台 [root@master ~]# ...

  2. 【大数据之数据仓库】安装部署GreenPlum集群

    本篇将向大家介绍如何快捷的安装部署GreenPlum测试集群,大家可以跟着我一块儿实践一把^_^ 1.主机资源 申请2台网易云主机,操作系统必须是RedHat或者CentOS,配置尽量高一点.如果是s ...

  3. 大数据入门:Hadoop安装、环境配置及检测

    目录 1.导包Hadoop包 2.配置环境变量 3.把winutil包拷贝到Hadoop bin目录下 4.把Hadoop.dll放到system32下 5.检测Hadoop是否正常安装 5.1在ma ...

  4. 大数据之 ZooKeeper原理及其在Hadoop和HBase中的应用

    ZooKeeper是一个开源的分布式协调服务,由雅虎创建,是Google Chubby的开源实现.分布式应用程序可以基于ZooKeeper实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知. ...

  5. 大数据(9) - Flume的安装与使用

    Flume简介 --(实时抽取数据的工具) 1) Flume提供一个分布式的,可靠的,对大数据量的日志进行高效收集.聚集.移动的服务,Flume只能在Unix环境下运行. 2) Flume基于流式架构 ...

  6. 大数据~说说ZooKeeper

    一些概念 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase和Kafka重要组件.它是一个为分布式应用提供一致性 ...

  7. 【大数据作业九】安装关系型数据库MySQL 安装大数据处理框架Hadoop

    作业要求:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3161 4.简述Hadoop平台的起源.发展历史与应用现状. 列举发展过程中 ...

  8. 大数据(13) - Spark的安装部署与简单使用

    一 .Spark概述 官网:http://spark.apache.org 1.        什么是spark Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校 ...

  9. 【大数据】Zookeeper学习笔记

    第1章 Zookeeper入门 1.1 概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. 1.2 特点 1.3 数据结构 1.4 应用场景 提供的服务包括:统 ...

随机推荐

  1. scrapy爬虫框架实例一,爬取自己博客

    本篇就是利用scrapy框架来抓取本人的博客,博客地址:http://www.cnblogs.com/shaosks scrapy框架是个比较简单易用基于python的爬虫框架,相关文档:http:/ ...

  2. POJ 1511 链式前向星+SPFA

    #include<iostream> #include<cstdio> #include<cstdlib> using namespace std; const i ...

  3. java map 分析

    java 8 对HashMap进行了优化, 当碰撞时使用TreeNode的二分方法查找数据: 但是当数据碰撞厉害的时候, table有很多浪费. table 大小等于size/factor, 当碰撞很 ...

  4. os.waitpid()无法获取sys.exit()退出时的status code

    [目的] 父进程使用os.waitpid()等待子进程退出,并检测子进程的exit code,以决定是否重启子进程. (常见的应用场景是:子进程接收外部命令,收到"stop"时退出 ...

  5. Swing JTable 具体解释

    改变列头 flightTable.getTableHeader().setDefaultRenderer(new TableCellRenderer() { public Component getT ...

  6. PortableApps的使用方法

    1 从官方网站下载这个软件,建议只下载PortableApps Platform Only即可,因为官方提供的软件其实很少,大多数需要我们自己添加. PortableApps 致力于将一些常见的开源软 ...

  7. 数据採集器服务——Socket(今天才发现AES加解密代码跟贴的时候不一样,貌似乱码,不知什么情况)

    近期刚做的一个项目.关于 Socket TCP 通信. 需求方提供了一个 ARM 机器,及数据採集器,须要我做一个服务端与数据採集器进行交互. 目的: 数据採集器:定时将读取到的数据发送到服务端. 服 ...

  8. 算法笔记_078:蓝桥杯练习 最大最小公倍数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少. 输入格式 输入一个正整数N. 输出格式 输出一个整数,表示你 ...

  9. Java 中equals和==差别

    java中的数据类型,可分为两类:  1.基本数据类型.也称原始数据类型.byte,short,char,int,long,float,double,boolean    他们之间的比較,应用双等号( ...

  10. TCP协议详解(理论篇)

    TCP协议详解(理论篇) 2012-08-20      0个评论       作者:陈立龙 收藏    我要投稿 TCP协议详解(理论篇)   1.    与UDP不同的是,TCP提供了一种面向连接 ...