简介

  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. Java笔记17:导出可执行jar包

    这里介绍Java程序的两种导出可执行jar包的方式,一种是图形界面打包,另一种是命令行打包. 一.图形界面打包 1 建立名为JarDemo的JavaProject,在src目录下建立com.abc的P ...

  2. Appium九宫格滑动解锁

    1.适配各种机型,首先获取整个解锁元素的坐标 2.代码实现 WebElement lockPattern = driver.findElement(By.id("com.android.se ...

  3. 转:ios的图片文件上传代码

    转自: https://gist.github.com/igaiga/1354221 @interface ImageUploader : NSObject { NSData *theImage; } ...

  4. minic 动作句型处理

    #include "lex_define.h" enum keywords_type//代表一些关键字 { loop_for=,//代表for关键字 loop_while,//代表 ...

  5. Android 解决qq分享后返回程序出现的Bug

    问题:当我们使用qq分享时,分享成功后选择留在qq,这个时候按home键,回到手机主界面,在点击回到我的app,这个时候会出现界面显示出来了,但是任何事件都不响应,即按钮没反应. 分析:这个时候回到我 ...

  6. 保存登陆username和password

    在一些软件中登陆时保存username和password是常见的功能,它实现起来也特别简单,其原理就是在点击登陆button时推断是否勾选保存password选项,假设勾选,则在内存中保存一份包括us ...

  7. win7 linux双系统删除linux

    本文内容收集自互联网,共两篇,中间以“分界线”进行分割. linux的卸载 一.win7与linux都使用grub来引导 卸载:不能直接删除ubuntu分区,这样会造成win7也启动不了 正确方法: ...

  8. (一)Solr——简介和安装配置

    1. solr简介 1.1 Solr是什么 Solr是apache的顶级开源项目,它是使用java开发 ,基于lucene的全文检索服务器. Solr和lucene的版本是同步更新的,最新的版本是7. ...

  9. 通过设置标签class值控制标签的显示与隐藏

    需求背景如下: 原项目居民.单位.计量三模块共用一个jsp文件,显示的页面也顺理成章的统一了,幸亏没有调用同一个js,在此基础上要求居民和单位计量的分离,即居民的显示居民的相关信息,单位和计量的显示相 ...

  10. Bootstrap学习 进度条

    本文将介绍Bootstrap进度条,在本文中你将看到如何使用Bootstrap创建加载,重定向或动作状态的进度条 bootstrap进度条使用CSS3过渡和动画来获得该效果.Internet Expl ...