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:

获取Zookeeper客户端,Zookeeper同时提供了C和Java的客户端访问接口,主要框架是用Java语言实现。Java客户端使用举例,调用程序需要指定zookeeper连接地址和端口号,实例化时客户端会自动创建session并连接zookeeper集群,代码如下:

ZooKeeper zooKeeper=new ZooKeeper(ip:port,timeout,null);

通过以上方式获取zookeeper的客户端就可以进行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、元数据数据模型

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接口:

当需要修改或调用节点相关信息可以直接从本地JMX中取到。

后续会不断完善更新……

Hadoop学习笔记(二)——zookeeper使用和分析

时间: 2024-10-14 05:26:29

Hadoop学习笔记(二)——zookeeper使用和分析的相关文章

hadoop学习笔记(二)

hadoop学习笔记(二) 我的个人博客站点地址:孙星的个人博客主页 后续的学习笔记:hadoop学习笔记 hadoop单节点的搭建 下载hadoop: wget http://apache.fayea.com/hadoop/common/hadoop-2.7.1/hadoop-2.7.1.tar.gz tar -zxvf hadoop-2.7.1.tar.gz 解压配置免密码登陆: //生成秘钥 ssh-keygen -t rsa //一直回车,在当前目录中会出现2个文件,一个是公钥,一个是私

Hadoop-HBASE案例分析-Hadoop学习笔记<二>

之前有幸在MOOC学院抽中小象学院hadoop体验课. 这是小象学院hadoop2.X概述第八章的笔记 主要介绍HBase,一个分布式数据库的应用案例. 案例概况: 1)时间序列数据库(OpenTSDB) 用HBase储存时间序列数据,每时每刻都在解决,数据库为开源 2)HBase爬虫调度库 垂直搜索爬虫 大规模爬虫(全网爬虫) 这里界定URL爬虫调度 3)HBase文档库 储存文档数据库,偏重于储存 4)银行人民币查询系统 不在博客园上阅读时才会看到的,这篇博文归http://www.cnbl

Hadoop学习笔记—14.ZooKeeper环境搭建

从字面上来看,ZooKeeper表示动物园管理员,这是一个十分奇妙的名字,我们又想起了Hadoop生态系统中,许多项目的Logo都采用了动物,比如Hadoop采用了大象的形象,所以我们可以猜测ZooKeep就是对这些动物进行一些管理工作的. 一.ZooKeeper基础介绍 1.1 动物园也要保障安全 zookeeper是hadoop下面的一个子项目,用来协调跟hadoop相关的一些分布式的框架,如hadoop, hive, pig等, 其实他们都是动物,所以叫zookeeper ——“动物园管理

Hadoop 学习笔记二 --- 计算模型MapReduce

       MapReduce 是一个计算模型,也是一个处理和生成超大数据集的算法模型的相关实现.用户首先创建一个Map函数处理一个基于Key/Value pair 的数据集合,输出中间的基于Key/Value pair的数据集合,然后再创建一个Reduce 函数用来合并所有的具有相同中间Key值的中间Value值.其最主要的两个部分就是Map过程和Reduce过程. 一. Map 处理过程 1. Mapper 类的处理原理        Mapper 类的最主要的功能就是将输入的Key/Va

Zigbee系列 学习笔记二(工程文件分析)

以下为转载内容,因为学习Zigbee,稍作整理了一下,希望作者不要怪罪. 一.下载ZStack-CC2530.2.5.1a 网址http://download.csdn.net/detail/thanksgining/8328925 下载后: 二.安装ZStack-CC2530.2.5.1a 安装后: Components:顾名思义这个是库文件,里面放了一些ZDO,driver,hal,zcl等库代码 Documents:这个不用说大家都知道是放TI的开发文档的,你能够把这些文档一个个看懂,你对

C语言学习笔记(二) static关键字详细分析

C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意不是局部变量)或者函数只能在一个源程序中定义一次,如果有重复定义的话编译器就会报错.伴随着不同源文件变量和函数之间的相互引用以及相互独立的关系,产生了extern和static关键字. 关键字static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量.随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数.为了避免引入新的关键字,所以仍使用st

hadoop学习笔记(二)——hadoop思想简介

这几天阅读<hadoop实战>,初步了解了一下hadoop的核心思想,简要的比较如下: 1.  hadoop是一个开源框架,可编写和运行分布式应用处理大数据,具有方便.简单.健壮性.可扩展性等优点 2.  MapReduce程序的执行分为两个阶段,为mapping和reducing.每个阶段均定义为数据处理函数,分别被称为mapper和reducer.在mapping阶段,MapReduce获取输入数据并将数据单元装入mapper:在reducing阶段,reducer处理来自mapper的所

Hadoop学习笔记(三)——zookeeper的一致性协议:ZAB

ZAB:ZooKeeper的Atomic Broadcast协议,能够保证发给各副本的消息顺序相同. Zookeeper使用了一种称为Zab(ZookeeperAtomic Broadcast)的协议作为其一致性复制的核心,其特点为高吞吐量.低延迟.健壮.简单,但不过分要求其扩展性. Zookeeper的实现是有Client.Server构成,Server端提供了一个一致性复制.存储服务,Client端会提供一些具体的语义,比如分布式锁.选举算法.分布式互斥等.从存储内容来说,Server端更多

Hadoop学习笔记(二)设置单节点集群

本文描述如何设置一个单一节点的 Hadoop 安装,以便您可以快速执行简单的操作,使用 Hadoop MapReduce 和 Hadoop 分布式文件系统 (HDFS). 参考官方文档:Hadoop MapReduce Next Generation - Setting up a Single Node Cluster. Hadoop版本:Apache Hadoop 2.5.1 系统版本:CentOS 6.5,内核(uname -r):2.6.32-431.el6.x86_64 系统必备组件 支