简介

  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. IIS 服务器隐藏index.php 的方法

    在项目根目录下创建web.config文件  写入以下代码即可 <?xml version="1.0" encoding="UTF-8"?> < ...

  2. (转)scala apply方法 笔记

    在akka源码中有这样一个Cluster类. 使用方法是这样的:val cluster = Cluster(context.system); 作为scala菜鸟的我,并没有找到Cluster(syst ...

  3. 七个你无法忽视的Git使用技巧

    与其他技术相比,Git应该拯救了更多开发人员的饭碗.只要你经常使用Git保存自己的工作,你就一直有机会可以将代码退回到之前的状态,因此就可以挽回那些你深夜里迷迷糊糊犯下的错误. 尽管这么说,Git的命 ...

  4. iOS/iphone开发如何为苹果开发者帐号APPID续费

    原文地址:iOS/iphone开发如何为苹果开发者帐号APPID续费作者:陈双超_群雄 其实相当的简单,这篇内容是给财务看的,有的地方连我自己看了都感觉有点...但如果不详细,她又要为难我,所以我就当 ...

  5. C 输入一串数字,去掉当中含7的和能被7整除的数

    C 输入一串数字,去掉当中含7的和能被7整除的数,每一个数小于10000,数字个数小于100 输入样例:1,7,56,77,87,2,45,42,97,9977 输出:1,2,45 注意:输入个数不确 ...

  6. taro 请求函数封装

    1.项目目录 2.代码 app/src/service/api.js import Taro from '@tarojs/taro' import { HTTP_STATUS } from '../c ...

  7. HBase - 计数器 - 计数器的介绍以及使用 | 那伊抹微笑

    博文作者:那伊抹微笑 csdn 博客地址:http://blog.csdn.net/u012185296 itdog8 地址链接 : http://www.itdog8.com/thread-215- ...

  8. VB.NET与 sql数据库

    数据蕴含丰富的信息,数据就是资源. 不同的语言,因为各自的语法特点.对sql数据库的连接操作有些小差别.但有一点,那就是.对sql数据库的操作语句sql语句大体是一样的. 这段时间正进行VB.NET的 ...

  9. JBoss类隔离

    http://tiger888.iteye.com/blog/572875这几天,项目组在部署JBOSS时遇到不少问题,都是由于JBOSS的类装载问题引起,特发表一篇BLOG详细说一下JBOSS的类隔 ...

  10. java.lang.NullPointerException org.apache.jsp.index_jsp._jspInit(index_jsp.java:22)

    java.lang.NullPointerException org.apache.jsp.index_jsp._jspInit(index_jsp.java:22) org.apache.jsp.i ...