`
weitao1026
  • 浏览: 1047872 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Zookeeper最早是Hadoop的一个子项目

 
阅读更多

 

 

Zookeeper最早是Hadoop的一个子项目,主要为Hadoop生态系统中一些列组件提供统一的分布式协作服务,在2010年10月升级成Apache Software
Foundation(ASF)顶级项目,它主要提供以下的四个功能:

功能名
组管理服务
分布式配置服务
分布式同步服务
分布式命名服务


Zookeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户;
Zookeeper的架构图如下:




 

 


Zookeeper的特点如下:

特点 说明
最终一致性 为客户端展示同一个视图,这是zookeeper里面一个非常重要的功能
可靠性 如果消息被到一台服务器接受,那么它将被所有的服务器接受。
实时性 Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。
独立性 各个Client之间互不干预
原子性 更新只能成功或者失败,没有中间状态。
顺序性 所有Server,同一消息发布顺序一致。

 



zookeeper的工作原理,
1.每个Server在内存中存储了一份数据;
2.Zookeeper启动时,将从实例中选举一个leader(Paxos协议)
3.Leader负责处理数据更新等操作(Zab协议);
4.一个更新操作成功,当且仅当大多数Server在内存中成功修改数据。

 

 


zookeeper中的几个重要角色:

角色名 描述 领导者(Leader) 领导者负责进行投票的发起和决议,更新系统状态,处理写请求 跟随者(Follwer) Follower用于接收客户端的读写请求并向客户端返回结果,在选主过程中参与投票 观察者(Observer) 观察者可以接收客户端的读写请求,并将写请求转发给Leader,但Observer节点不参与投票过程,只同步leader状态,Observer的目的是为了,扩展系统,提高读取速度。 客户端(Client) 执行读写请求的发起方

 



为什么,在3.3.0版本之后,引入Observer角色?

Zookeeper需保证高可用和强一致性;
为了支持更多的客户端,需要增加更多Server;
Server增多,投票阶段延迟增大,影响性能;
权衡伸缩性和高吞吐率,引入Observer
Observer不参与投票;
Observers接受客户端的连接,并将写请求转发给leader节点;
加入更多Observer节点,提高伸缩性,同时不影响吞吐率。




为什么zookeeper集群的数目,一般为奇数个?

Leader选举算法采用了Paxos协议;
Paxos核心思想:当多数Server写成功,则任务数据写成功
如果有3个Server,则两个写成功即可;
如果有4或5个Server,则三个写成功即可。
Server数目一般为奇数(3、5、7)
如果有3个Server,则最多允许1个Server挂掉;
如果有4个Server,则同样最多允许1个Server挂掉
由此,我们看出3台服务器和4台服务器的的容灾能力是一样的,所以
为了节省服务器资源,一般我们采用奇数个数,作为服务器部署个数。


zookeeper的数据模型:
基于树形结构的命名空间,与文件系统类似
节点(znode)都可以存数据,可以有子节点
节点不支持重命名
数据大小不超过1MB(可配置)
数据读写要保证完整性
层次化的目录结构,命名符合常规文件系统规范;
每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识;
节点Znode可以包含数据和子节点(EPHEMERAL类型的节点不能有子节点);
Znode中的数据可以有多个版本,比如某一个路径下存有多个数据版本,那么查询这个路径下的数据需带上版本;
客户端应用可以在节点上设置监视器(Watcher);
节点不支持部分读写,而是一次性完整读写。

Znode有两种类型,短暂的(ephemeral)和持久的(persistent);
Znode的类型在创建时确定并且之后不能再修改;
短暂znode的客户端会话结束时,zookeeper会将该短暂znode删除,短暂znode不可以有子节点;
持久znode不依赖于客户端会话,只有当客户端明确要删除该持久znode时才会被删除;
Znode有四种形式的目录节点,PERSISTENT、PERSISTENT_SEQUENTIAL、EPHEMERAL、EPHEMERAL_SEQUENTIAL。





Zookeeper的应用场景一(统一命名服务)
分布式环境下,经常需要对应用/服务进行统一命名,便于识别不同服务;
类似于域名与ip之间对应关系,域名容易记住;
通过名称来获取资源或服务的地址,提供者等信息
按照层次结构组织服务/应用名称
可将服务名称以及地址信息写到Zookeeper上,客户端通过Zookeeper获取可用服务列表类




Zookeeper的应用场景二(配置管理)
分布式环境下,配置文件管理和同步是一个常见问题;
一个集群中,所有节点的配置信息是一致的,比如Hadoop;
对配置文件修改后,希望能够快速同步到各个节点上
配置管理可交由Zookeeper实现;
可将配置信息写入Zookeeper的一个znode上;
各个节点监听这个znode
一旦znode中的数据被修改,zookeeper将通知各个节点



Zookeeper的应用场景三(集群管理)

分布式环境中,实时掌握每个节点的状态是必要的;
可根据节点实时状态作出一些调整;
可交由Zookeeper实现;
可将节点信息写入Zookeeper的一个znode上;
监听这个znode可获取它的实时状态变化
典型应用
Hbase中Master状态监控与选举

Zookeeper的应用场景四(分布式通知和协调)
分布式环境中,经常存在一个服务需要知道它所管理的子服务的状态;
NameNode须知道各DataNode的状态
JobTracker须知道各TaskTracker的状态
心跳检测机制可通过Zookeeper实现;
信息推送可由Zookeeper实现(发布/订阅模式)


Zookeeper的应用场景五(分布式锁)
Zookeeper是强一致的;
多个客户端同时在Zookeeper上创建相同znode,只有一个创建成功。
实现锁的独占性
多个客户端同时在Zookeeper上创建相同znode ,创建成功的那个客户端得到锁,其他客户端等待。
控制锁的时序
各个客户端在某个znode下创建临时znode (类型为CreateMode.EPHEMERAL_SEQUENTIAL),这样,该znode可掌握全局访问时序。



Zookeeper的应用场景六(分布式队列)
两种队列;
当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达,这种是同步队列。
队列按照 FIFO 方式进行入队和出队操作,例如实现生产者和消费者模型。(可通过分布式锁实现)
同步队列
一个job由多个task组成,只有所有任务完成后,job才运行完成。
可为job创建一个/job目录,然后在该目录下,为每个完成的task创建一个临时znode,一旦临时节点数目达到task总数,则job运行完成。

分享到:
评论

相关推荐

    hadoop、hbase、hive、zookeeper版本对应关系续(最新版)(2015)

    Hadoop是一个开源框架,允许使用简单的编程模型跨计算机集群分布式处理大数据。Hadoop与Hive的版本对应关系明确指出,Hive 1.2.0版本可以支持Hadoop 1.x.y和2.x.y系列的版本,同样Hive 1.1.0也支持这两个系列的...

    hadoop,hbase,hive版本整合兼容性最全,最详细说明【适用于任何版本】

    首先,Hadoop是一个开源的分布式存储和计算框架,它由HDFS和MapReduce两部分组成。HDFS用于存储大数据,而MapReduce用于处理大数据。HBase是建立在Hadoop之上的NoSQL数据库,它适合处理大量稀疏的数据集。Hive是一个...

    大数据运维技术第2章 Hadoop平台安装课件.pptx

    * 0.x系列版本:Hadoop当中最早的一个开源版本,在此基础上演变而来的1.x以及2.x的版本。 * 1.x版本系列:是0.20.x发行版系列的延续。其架构仅包括HDFS和MapReduce两大组件。 * 2.x版本系列:架构产生变化,引入了...

    hadoop笔记2.pdf

    Hadoop是一个生态圈,而不是单一产品,它包括Hive、Hbase、Zookeeper、Cassandra、Solr等众多组件。 **Hadoop的发展历史** Hadoop的发展与Lucene框架有着密切的联系,后者由Doug Cutting创建,最初是Apache基金会...

    大数据之路选择Hadoop还是MaxCompute?Hadoop开源与MaxCompute对比材料

    Hadoop主要是一个开源项目,而MaxCompute则是阿里云提供的商业服务。因此,两者在服务方面存在显著差异: - **Hadoop**:用户需要自行搭建和维护Hadoop集群,包括硬件配置、软件安装、故障排查等。 - **MaxCompute**...

    hadoop2.7.2(window版本).zip

    Hadoop是Apache软件基金会开发的一个开源分布式计算框架,主要用于处理和存储海量数据。这个资源包"Hadoop 2.7.2 (Window版本)"是专为在Windows操作系统上进行大数据开发设计的,它包含了Hadoop在Windows环境下的...

    Hadoop (2.X版本) 管理与开发

    Hadoop并非单一技术,而是多个开源项目的一个集合,如HBase、Hive、ZooKeeper等,它们构成了一个完整的生态系统。 Hadoop的来源,最早可以追溯到Lucene,这是Doug Cutting基于Google技术实现的Nutch搜索引擎的一...

    HADOOP_适用初级.doc

    2. **Cloudera Hadoop (CDH)**:Cloudera是最早将Hadoop商业化的公司,其产品CDH是增强版的Hadoop,具有更好的兼容性、安全性和稳定性。Cloudera Manager是用于集群部署、管理和监控的工具,同时提供技术支持服务。 ...

    zookeeper-3.5.2-alpha.tar

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...

    Hadoop实战中文版

    Hadoop可以在多种操作系统上安装,但在实际操作中,一般推荐使用Linux操作系统,因为Hadoop最早就是为Linux环境开发的,它在Linux上运行最为稳定。安装过程可能涉及虚拟机的配置、Hadoop的下载、Java环境的配置、...

    Hadoop权威指南 中文版

    除此之外,还涉及YARN(Yet Another Resource Negotiator)资源管理器、Zookeeper协调服务等其他组件,它们共同构成一个能够处理大规模数据的分布式平台。 3. HDFS原理与实践:HDFS是Hadoop的分布式文件系统,它...

    Hadoop实战

    Hadoop是一个基于Java语言开发的开源分布式系统基础架构,由Apache软件基金会支持开发,最早源于Google的GFS(Google File System)和MapReduce(一种编程模型)的研究成果。Hadoop提供了一个高度容错性的系统,适合...

    Hadoop-2.0中单点故障项目解决方案总结.doc

    在HDFS HA中,有两个NameNode,一个为主NameNode(active),另一个为备用NameNode(standby)。两个NameNode同时维护元数据,active NameNode会将更新写入共享存储系统,如NFS,standby NameNode则实时同步这些更新...

    Hadoop权威指南中文版

    书中还会介绍Hadoop生态系统中的其他重要组件,如HBase(一个基于Hadoop的分布式数据库)、Hive(一个数据仓库工具)、Pig(一种高级数据处理语言)、Oozie(工作流调度系统)和Zookeeper(分布式协调服务)。...

    hadoop 介绍

    为了解决这个问题,在Hadoop 2.0中引入了Active-Standby模式,即两个Namenode实例,其中一个处于活动状态处理请求,另一个作为备用节点待命。一旦活动节点出现问题,备用节点可以自动接管服务。 - **Datanode**: ...

    Hadoop开发者第四期

    Hadoop技术论坛是一个专注于Hadoop技术交流的社区。通过对论坛运营数据的分析,可以深入了解用户行为和兴趣点,进而改善论坛的服务质量。主要分享的数据包括但不限于: 1. **用户活跃度**:分析用户的登录频率、...

Global site tag (gtag.js) - Google Analytics