hadoop学习笔记:zookeeper学习(上)

  在前面的文章里我多次提到zookeeper对于分布式系统开发的重要性,因此对zookeeper的学习是非常必要的。本篇博文主要是讲解zookeeper的安装和zookeeper的一些基本的应用,同时我还会教大家如何安装伪分布式,伪分布式不能在windows下实现,只能在linux下实现,我的伪分布式是通过电脑的虚拟机完成了,好了,不废话了,具体内容如下:

  首先我们要下载一个zookeeper,下载地址是:

  http://www.apache.org/dyn/closer.cgi/zookeeper/

  一般我们会选择一个stable版(稳定版)进行下载,我下载的版本是zookeeper-3.4.5。

  我笔记本的操作系统是windows7,windows操作系统可以作为zookeeper的开发平台,但是不能作为zookeeper的生产平台,首先我们在windows下安装一个单机版的zookeeper。

  我们先解压zookeeper的安装包,解压后的zookeeper安装包我放置的路径是:

  E:\zookeeper\zookeeper-3.4.5

  下图是zookeeper的目录结构:

  我们进入conf包,将zoo_sample.cfg文件复制一份,并将复制好的文件改名为zoo.cfg。打开新建的zoo.cfg文件,将里面的内容进行修改,修改后的文件内容如下:

#initLimit=10
#syncLimit=5
tickTime=2000
dataDir=E:/zookeeper/zookeeper-3.4.5/data
clientPort=2181

   下面我来解释下配置文件里的各个参数:

  initLimit和syncLimit是针对集群的参数,在我后面讲解伪分布式安装时候我会再讲解。

  tickTime:该参数用来定义心跳的间隔时间,zookeeper的客户端和服务端之间也有和web开发里类似的session的概念,而zookeeper里最小的session过期时间就是tickTime的两倍。

  dataDir:英文注释可以翻译为存储在内存中的数据库快照功能,我们可以看看运行后dataDir所指向的文件存储了什么样的数据,如下图所示:

 

  看来dataDir里还存储了日志信息,dataDir不能存放在命名为tmp的文件里。

  clientPort:是监听客户端连接的端口号。

  接下来我们要将zookeeper的安装信息配置到windows的环境变量里,我们在“我的电脑”上点击右键,选择属性,再点击高级系统设置,点击环境变量按钮,在系统变量这一栏,点击新建,添加:

变量名:ZOOKEEPER_HOME
变量值:E:\zookeeper\zookeeper-3.4.5

   还是在系统变量这一栏,找到path,点击编辑path,在变量值里添加:% ZOOKEEPER_HOME %\bin; % ZOOKEEPER_HOME %\conf;

  Zookeeper使用java编写的,因此安装zookeeper之前一定要先安装好jdk,并且jdk的版本要大于或等于1.6。

  这样单机版的zookeeper就安装好了,下面我们将运行zookeeper。

  首先我们打开windows的命令行工具,将文件夹转到zookeeper安装目录的下的bin目录,然后输入zkServer命令,回车执行,那么zookeeper服务就启动成功了。

  下面我们用客户端连接zookeeper的服务端,我们再打开一个命令行工具,输入命令:

zkCli -server localhost:2181

   下面是相关测试,如下图所示:

  伪分布式的安装,zookeeper和hadoop一样也可以进行伪分布式的安装,下面我就讲解如何进行伪分布式安装。

  我开始尝试在windows下安装伪分布式,但是没有成功,最后是在linux操作系统下才安装好伪分布式,我们首先下载好zookeeper的安装程序,然后新建三个配置文件分别是:

zoo1.cfg:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=E:/zookeeper/zookeeper-3.4.5/d_1
# the port at which the clients will connect
clientPort=2181
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
dataLogDir=E:/zookeeper/zookeeper-3.4.5/log1_2
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889

 zoo2.cfg:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=E:/zookeeper/zookeeper-3.4.5/d_2
# the port at which the clients will connect
clientPort=2182
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
dataLogDir=E:/zookeeper/zookeeper-3.4.5/logs_2
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889

 zoo3.cfg:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=E:/zookeeper/zookeeper-3.4.5/d_3
# the port at which the clients will connect
clientPort=2183
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
dataLogDir=E:/zookeeper/zookeeper-3.4.5/logs_3
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889

   这里我们把每个配置文件里的clientPort做了一定修改,让每个文件之间的clientPort不一样,dataDir属性也做了同样的调整,同时还添加了新配置内容,如下所示:

server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889

   这里localhost指的是组成zookeeper服务的机器IP的地址,2887是用于进行leader选举的端口,3887是zookeeper集群里各个机器之间的通信接口。

  initLimit:是指follower连接并同步到leader的初始化连接,它是通过tickTime的倍数表示,例如我们上面的配置就是10倍的tickTime,当初始化连接时间超过设置的倍数时候则连接失败。

  syncLimit:是指follower和leader之间发送消息时请求和应答的时间长度,如果follower在设置的时间范围内不能喝leader通信,那么该follower将会被丢弃,它也是按tickTime的倍数进行设置的。

  dataLogDir:这个配置是指zookeeper运行的相关日志写入的目录,设定了配置,那么dataLog里日志的目录将无效,专门的日志存放路径,对zookeeper的性能和稳定性有好处。

  这里每一个配置文件都代表一个zookeeper服务器,下面我们启动伪分布式的zookeeper集群。

  zkServer.sh start zoo1.cfgzkServer.sh start zoo2.cfgzkServer.sh start zoo3.cfg

 

   下面我写一个java程序,该程序作为客户端调用zookeeper的服务,代码如下:

package cn.com.test;import java.io.IOException;import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;public class zkClient {public static void main(String[] args) throws Exception{Watcher wh = new Watcher(){@Overridepublic void process(WatchedEvent event) {System.out.println(event.toString());}};ZooKeeper zk = new ZooKeeper("localhost:2181",30000,wh);System.out.println("=========创建节点===========");zk.create("/sharpxiajun", "znode1".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);System.err.println("=============查看节点是否安装成功===============");System.out.println(new String(zk.getData("/sharpxiajun", false, null)));System.out.println("=========修改节点的数据==========");zk.setData("/sharpxiajun", "sharpxiajun130901".getBytes(), -1);System.out.println("========查看修改的节点是否成功=========");System.out.println(new String(zk.getData("/sharpxiajun", false, null)));System.out.println("=======删除节点==========");zk.delete("/sharpxiajun", -1);System.out.println("==========查看节点是否被删除============");System.out.println("节点状态:" + zk.exists("/sharpxiajun", false));zk.close();}}

   执行结果如下:

log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper).
log4j:WARN Please initialize the log4j system properly.
=========创建节点===========
WatchedEvent state:SyncConnected type:None path:null
=============查看节点是否安装成功===============
znode1
=========修改节点的数据==========
========查看修改的节点是否成功=========
sharpxiajun130901
=======删除节点==========
==========查看节点是否被删除============
节点状态:null

   程序我今天不讲解了,只是给大伙展示下使用zookeeper的方式,本文可能没啥新颖的东西,但是本文是一个基础,有了这个基础我们才能真正操作zookeeper。

 

 

 

 

 

转载于:https://www.cnblogs.com/sharpxiajun/p/3294581.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

160 - 21 Cabeca

环境: Windows xp sp3 工具: exeinfope ollydbg 查壳: 拿到程序后查壳,发现程序无壳,为Delphi写的。 程序长成这个样 输入: Name:GNUBD Serial:1234567 Serial:76543…

160 - 22 CarLitoZ.1

环境 Windows xp sp3 工具 exeinfope Ollydbg 查壳 无壳的VB程序 测试 输入“1234567” 显示这个: 直接OD载入字符串搜索。 00402D20 > \55 push ebp 00402D21 . 8BEC mov ebp,esp 00402D23 . 83EC 0C sub e…

实战MEF(4):搜索范围

在前面的文章中,几乎每个示例我们都会接触到扩展类的搜索位置,我们也不妨想一下,既然是自动扩展,它肯定会有一个或者多人可供查找的位置,不然MEF框架怎么知道哪里有扩展组件呢? 就像我们用导航系统去查找某…

Android应用程序请求SurfaceFlinger服务创建Surface的过程分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/7884628 前面我们已经学习过Android应用程序与SurfaceFlinger服务的连接过程了。连接上SurfaceFlinger服务之后,Android应用程序就可以请求…

160 - 23 Chafe.1

环境 Windows xp sp3 工具 exeinfope ollydbg 查壳 用exeinfoe查壳 测试 可以从左下角状态栏看出serial是无效的 直接OD载入字符串搜索 00401274 |. /75 17 jnz XChafe_1.0040128D 00401276 |. |6A 00 push 0x0 ; /Ti…

160 - 24 Chafe.2

环境: Windows xp sp3 工具 exeinfope OllyDBG 查壳 用exeinfope查壳,发现是没有壳的。 测试 可以看出是从红色框框里面的内容判断serial是否有效 OD载入,字符串搜索可以得到: 004011EC . 55 pus…

十个利用矩阵乘法解决的经典题目

转载自 Matrix67: The Aha Moments 好像目前还没有这方面题目的总结。这几天连续看到四个问这类题目的人,今天在这里简单写一下。这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质。 不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色…

160 - 25 CodeZero.1

环境 Windows xp sp3 工具 exeinfope OllyDBG 查壳 无壳的VB程序 测试 运行程序后出现Nag窗口,所以这次的目标是除Nag窗口和找到serial 程序运行后弹出Nag窗口,并且等待5秒后按钮的标题改成“Continue..”,点击后才会弹出输入seria…

WP8开发学习笔记动态修改启动时导航的第一个页面(如登录前启动页为LoginPage,登录后变为MainPage)...

很多时候我们需要在启动程序的时候根据状态改变初始导航页面,比如程序在启动的时候判断用户是否登录, 如果未登录则跳转到LoginPage.xaml否则跳转到MainPage界面。 这时候就要分析程序的启动和导航的过程。 程序的启动是App.xamlcs负责的。 App类的构造器…

6.数组和Hash表

当显示多条结果时,存储在变量中非常智能,变量类型会自动转换为一个数组。 在下面的例子中,使用GetType()可以看到$a变量已经不是我们常见的string或int类型,而是Object类型,使用-is操作符来判断是否是个数组&#xff0…

160 - 26 Colormaster

环境 Windows xp sp3 查壳 无壳的VB程序 测试: 输入 Name:123456 Serial:12345 字符串搜索,找到判断位置。 判断Name的长度要大于等于5: 00402CBC . 33C9 xor ecx,ecx 00402CBE . 83F8 04 cmp eax,0x4 00…

Android 菜单(OptionMenu)大全 建立你自己的菜单

菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)&#…

160 - 27 Cosh.1

环境 Windows XP sp3 工具 exeinfope ollydbg 查壳 无壳的MFC程序 测试 弹出这个: 是一个CD-CHECK保护的程序。 字符串搜索,一下子就能来到这里: 0040121A . 68 9C304000 push Cosh_1.0040309C …

160 - 28 CoSH.2

环境 Windows xp sp3 工具 exeinfope ollydbg 查壳 无壳的MFC程序 测试 输入 Nmae:123456 Serial:12345 点击“CHECK”后弹出错误提示的消息框,然后程序自己结束掉 依然是字符串搜索: 004014DB . 8B1D FC214000 mov ebx,dword ptr ds…

ASP.NET MVC5 + EF6 入门教程 (5) Model和Entity Framework

文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-ef-6-get-started-model.html 上一节:ASP.NET MVC 5 入门教程 (4) View和ViewBag 下一节:ASP.NET MVC5 EF6 入门教程 (6) View中的Razor使用 源码下载:点我下…

160 - 29 cosh.3

环境 Windows xp sp3 工具 exeinfope ollydbg 查壳 无壳的MFC程序 测试 字符串搜索&#xff1a; 004014F5 |. E8 AA030000 call <jmp.&MFC42.#CWnd::GetWindowTextLengthA_> 004014FA |. 8945 EC mov [local.5],eax 004014FD |. 837D EC 0…

hdu--4902--线段树

题意 前面一段废话 这题 最有意思的应该是出题人 是clj 这题的时限放的太宽了 给了15s 我也是醉了 区间更新。 1 #include <iostream>2 #include <algorithm>3 using namespace std;4 5 const int size 200010;6 int a[size];7 struct data8 {9 int L , R ,…

(五) 面向对象类设计原则

1. 开闭原则&#xff08;the Open Closed Principle OCP&#xff09; 一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。该原则同样适合于非面向对象设计的方法&#xff0c;是软件工程 设计…

160 - 30 cracking4all.1

环境 Windows XP sp3 工具 exeinfope ollydbg 查壳 无壳的VB程序 测试 这个serial藏得比较里面&#xff0c;多点几下才能看到 字符串搜索&#xff1a; 00403338 . 50 push eax ; /var18 00403339 . 51 …

MVC5 + EF6 入门完整教程

MVC5 EF6 入门完整教程 原文:MVC5 EF6 入门完整教程第0课 从0开始 ASP.NET MVC开发模式和传统的WebForm开发模式相比&#xff0c;增加了很多"约定"。 直接讲这些 "约定" 会让人困惑&#xff0c;而且东西太多容易忘记。 和微软官方教程不同&#xff0c…