Hadoop学习笔记(二)——zookeeper使用和分析
分布式架构是中心化的设计。就是一个主控机连接多个处理节点,因此保证主控机高可用性十分关键.分布式锁是解决该问题的较好方案,多主控机抢一把锁.Zookeeper就是一套分布式锁管理系统,用于高可靠的维护元数据.
一、应用
1、集群模式
集群模式下配置多个Zookeeper节点,启动Zookeeper集群,Zookeeper会依据配置投票选举一个节点获得分布式锁。
关键配置举例:
# The Cluster servers
#server.1=192.168.1.10:2887:3887
#server.2=192.168.1.11:2888:3888
#server.3=192.168.1.12:2889:3889以上配置的几个Zookeeper节点会相互投票,直到选举出一个Leader,其它节点为follower.
2、单机模式
不配置信息,启动时会自己主动选取当前节点为Zookeeper主控节点.
使用Zookeeper:
获取Zookeeperclient。Zookeeper同一时候提供了C和Java的client訪问接口,主要框架是用Java语言实现。Javaclient使用举例,调用程序须要指定zookeeper连接地址和port号。实例化时client会自己主动创建session并连接zookeeper集群。代码例如以下:
ZooKeeper zooKeeper=new ZooKeeper(ip:port,timeout,null);
通过以上方式获取zookeeper的client就能够进行zookeeper的操作了。演示样例操作检查节点是否存在,不存在则创建该节点并赋值:
Stat stat=zooKeeper.exists(path,false);
byte[] bytes=values;
if(stat==null)
{
zooKeeper.create(path,bytes,Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
}
else
{
zooKeeper.setData(path,bytes,-1);
}
删除某节点:
zooKeeper.delete(path,version);
更新某个节点数据:
byte[] bytes=values;
zooKeeper.setData(path,bytes,-1);
二、投票算法
集群模式下有例如以下配置:
# The Cluster servers
#server.1=192.168.1.10:2887:3887
#server.2=192.168.1.11:2888:3888
#server.3=192.168.1.12:2889:3889每个Zookeeper节点上有一个唯一的id。投票算法能够在配置文件里自行指定採用哪种投票算法,选择优先级最高的是先比較事务序列.向其它节点发送投票时须要将投票的id与事务序列发送出去,先比較事务序列,事务序列最大的首先被选择,假设事务序列同样则考虑id中最大的选取出来作为leader,其它节点被选为follower,操作数据会以leader为主,其它节点将数据从leader中merge过来。
关键代码:
if((newZxid>curZxid)||(newZxid==curZxid)&&(newId>curId))
return true;
else
return false;
启动时:
1、每一个节点向集群中全部节点包含发送节点自身发送投票,投票推荐自己为主控机.
2、将接受到的票中最大的ID的选出推荐为自己节点的投票.本地保存各个节点发来的投票,并计算,将ID最大的挑出。计算投该ID的票数。假设超过半数则终止投票选举此ID为主控,并向其它节点发送通知,假设没有超过半数则向各个节点发送自己推荐的投票并反复第二步操作.
三、元数据
1、元数据数据模型
![]()
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXJwX3NzZHV0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">
2、操作
ZooKeeper中元数据的组织结构是树形的,用户能够使用/a/b/c的形式来使用元数据,它提供了create,exists,delete,getData,setData,getChildren.
create:创建节点
exsits:检查是否有指定名称的节点
delete:删除某个节点
getData:获取某个节点的值。返回的是字节流
setData:给某个节点上赋值,參数是字节流
getChildren:得到指定节点下的子节点
3、元数据的存储
从总体架构上看,zookeeper存储元数据上就是一个分布式文件系统,可是有不同之处,zookeeper的每一个节点上保存的数据都是整个系统全部数据独立完整的一份,能够说是follower节点上的数据都是leader节点上的数据备份。
在确定了leader与follower之后,数据都去操作leader,并同一时候将数据备份到follower中,这样一来即使leader挂掉,能够再次自己主动投票从follower中选出leader,同一时候数据也是最新的,最大可能的保证了可用性。
4、通信协议
Zookeeper中投票时须要不同节点之间进行通信投票。而投票不须要确认对方是否一定每一个投票都收到,而且为了提高投票的效率节约时间。投票通信时採用的通信方式是UDP,示比例如以下:
byte responseBytes[]=new byte[48];
ByteBuffer responseBuffer=ByteBuffer.wrap(responseBytes);
DatagramPacket responsePacket=new DatagramPacket(responseBytes,responseBytes.length);
mySocket=new DatagramSocket(port);
5、zooKeeper节点配置信息维护——JMX
为了方便zookeeper节点管理,zookeeper的节点管理採用了JMX。演示样例:
在MBeanRegistry注冊节点:注冊节点实现ZKMBeanInfo接口:
![]()
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXJwX3NzZHV0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">
当须要改动或调用节点相关信息能够直接从本地JMX中取到。
兴许会不断完好更新……
Hadoop学习笔记(二)——zookeeper使用和分析的更多相关文章
- Hadoop-HBASE案例分析-Hadoop学习笔记<二>
之前有幸在MOOC学院抽中小象学院hadoop体验课. 这是小象学院hadoop2.X概述第八章的笔记 主要介绍HBase,一个分布式数据库的应用案例. 案例概况: 1)时间序列数据库(OpenTSD ...
- Hadoop学习笔记—14.ZooKeeper环境搭建
从字面上来看,ZooKeeper表示动物园管理员,这是一个十分奇妙的名字,我们又想起了Hadoop生态系统中,许多项目的Logo都采用了动物,比如Hadoop采用了大象的形象,所以我们可以猜测ZooK ...
- hadoop 学习笔记二
NameNode的持久化(persistent)(day4,1) 类似于:Redis redis中的持久化文件是相互独立的当两个持久化文件同时存在时默认使用的是aof ,但是namenode 的持久化 ...
- hadoop学习笔记:zookeeper学习(上)
在前面的文章里我多次提到zookeeper对于分布式系统开发的重要性,因此对zookeeper的学习是非常必要的.本篇博文主要是讲解zookeeper的安装和zookeeper的一些基本的应用,同时我 ...
- Hadoop学习笔记1---简介 优点 架构分析
一.Hadoop简介 Hadoop最早起源于Nutch.Nutch是一个开源的网络搜索引擎,由Doug Cutting于2002年创建.Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取. ...
- Hadoop学习笔记二
一.设置无密码sudo权限,不用在普通用户和root用户间来回切换 chmod u+w /etc/sudoers vim /etc/sudoers #首行添加如下的内容: hadoop ALL=(ro ...
- ZooKeeper学习笔记二:API基本使用
Grey ZooKeeper学习笔记二:API基本使用 准备工作 搭建一个zk集群,参考ZooKeeper学习笔记一:集群搭建. 确保项目可以访问集群的每个节点 新建一个基于jdk1.8的maven项 ...
- Hadoop学习笔记系列
Hadoop学习笔记系列 一.为何要学习Hadoop? 这是一个信息爆炸的时代.经过数十年的积累,很多企业都聚集了大量的数据.这些数据也是企业的核心财富之一,怎样从累积的数据里寻找价值,变废为宝炼 ...
- Hadoop学习笔记(2)
Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello ...
- Hadoop学习笔记(2) ——解读Hello World
Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello ...
随机推荐
- sqlserver 下载地址(SQL Server 2008 R2 中英文 开发版/企业版/标准版 下载)
转自:http://blog.sina.com.cn/s/blog_624b1f950100pioh.html 注:企业版无法安装在xp和win7,开发版才可以! 一. 简体中文 1. SQL S ...
- onWebView检查网页中文
问题:要检查网页中的一段文本: 开始我是这样写的: private final static String SPECIFIED_TEXT = "这个是一段中文"; onWebVie ...
- 利用【深度网络】高效提取feature
extracting features from a learned model, and add some new features yourself.
- 线性判别分析(Linear Discriminant Analysis, LDA)算法初识
LDA算法入门 一. LDA算法概述: 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discrimin ...
- C语言:宽字符集操作函数
C语言:宽字符集操作函数 (unicode编码) 字符分类: 宽字符函数普通C函数描述 iswalnum() isalnum() 测试字符是否为数字或字母 iswalpha() isalpha() 测 ...
- ElasticSearch _xpack角色管理
权限管理可以通过kibana的Management界面进行,本篇主要介绍的是通过命令进行,角色API使您能够在本机域中添加,删除和检索角色. 要使用此API,您必须至少具有manage_securit ...
- hive数据类型转换、字符串函数、条件判断
http://blog.csdn.net/yimingsilence/article/details/70057638 数据类型转换 同Java语言一样,Hive也包括 隐式转换(implicit c ...
- Win7删除虚拟机新建的用户怎么恢复
11月3日 VMware Workstation 7 Installed in Windows 7 AutoLogon Problem 安装VMware Workstation 7 在Windows ...
- Nginx:handler模块按处理阶段挂载原理
参考资料<深入理解Nginx>(陶辉) 在Nginx中,handler模块真正的处理函数通过两种方式挂载到处理过程中,一种方式就是按处理阶段挂载;另外一种挂载方式就是按需挂载. 本次我们将 ...
- mongoDB DOS窗口显示中文
http://zhidao.baidu.com/question/157276582 由于mongodb后台的字符编码都是utf-8的,而中文windows cmd窗口使用的字符编码是GBK(属性-& ...