Zookeeper分布式协调服务

大数据项目最终需要运行在大数据平台之上,而构建Hadoop 集群是构建整个大数据平台的核心。Hadoop 集群包含 HDFS 集群和YARN 集群,想要构建高可用的 Hadoop 集群又依赖Zookeeper 集群提供协调服务,所以需要在hadoop01、hadoop02和hadoop03节点上依次构建Zookeeper、HDFS和YARN 集群。接下来,我们首先认识和了解Zookeeper。

一、Zookeeper分布式协调服务

编写单机版的应用比较简单,但是编写分布式应用就比较困难,主要原因在于会出现部分失败。什么是部分失败呢?

一条消息在两个节点之间传输时,出现出现网络错误,发送者不知对方是否接收到这条信息,信息是否完整和正确,也有可能没有收到,又或者接收者的进程已经“死掉”。发送者只能重新连接接收者并发送咨询请求才能获知之前的信息接收者是否收到。简而言之,部分失败就是不知道一个操作是否已经失败。使用Zookeeper并不能避免部分失败,Zookeeper可提供一组工具让开发者进行分布式构建时对部分失败进行正确处理。

二、Zookeeper架构设计及原理

Zookeeper 作为一个分布式协调系统,为大数据平台其他组件提供了协调服务。要想理解Zookeeper 如何对外提供服务,首先需要理解Zookeeper的架构设计和工作原理。

1.Zookeeper定义

  1. Zookeeper是一个分布式的、开源的协调服务框架,它提供数据结构操作服务,分布式应用可以构建出高级别的服务。比如分布式锁服务、配置管理服务、分布式消息队列、分布式通知与协调训务等。
  2. 易于编码,数据模型构建在文件系统中。
  1. Zookeeper可运行在Java环境上,支持多种语言。

2. Zookeeper的特点

Zookeeper 对集群提供分布式协调服务,具有以下特点:

  1. Zookeeper最重要的特点是:始终保持一致性:客户端接入任何一个服务器,都是同一个视图界面。
  1. 可靠性∶Zookeeper具有简单、健壮、良好的性能。
  2. 实时性Zookecper 保证客户端将在一个时间间隔范围内,获得服务器更新的信息或服务器外效的信息。
  3. 等待无关(wait-free)∶慢的或失效的客户端不得干预快速客户端的请求,这就使得每个客户端都能有效地等待。
  4. 原子性∶对Zookeeper的更新操作只有两种状态:成功或者失败,没有第三种可能。
  5. 顺序性∶它包括全局有序和偏序两种。全局有序是针对服务器端,更新操作都有严格的偏序关系,是确保Zookeeper功能正确性的关键。例如,在一台服务器上,消息 A 在消息 B 前发布,那么所有服务器上的消息 A 都将在消息 B 前发布。偏序是针对客F 端,例如,在同一个客户端消息B在消息A后发布,那么执行的顺序必将是先执行消息A 后再执行消息 B。

3.Zookeeper的基本架构

Zookeeper服务自身组成一个集群(2n+1 个服务节点最多允许 n 个失效)。Zookeeper 服务有两种角色∶一种主节点,用于投票的发起,做出决议,并及时更新系统状态;

另一种从节点,接收客户端请求,并向客户端返回结果,在过程中参与投票。主节点失效后,会在从节点中重新选举新的主节点。Zookeeper系统架构如下图所示:

Zookeeper分布式协调服务_第1张图片

 接下来对Zookeeper系统架构进行简单的解释说明。客户端(Client)可以选择连接到Zookeeper集群中的每台服务端(Server),而且每台服务端的数据完全相同。每个从节点都需要与主节点进行通信,并同步主节点上更新的数据。对于Zookecper集群来说,只要超过一半数量的Zookeeper服务端可用,Zookeeper整体服务就可用。

4.Zookeeper的工作原理

Zookeeper 的核心是原子广播,该原子广播就是对 Zookeeper 集群上的所有主机发送数据包,通过这个机制保证了各个服务端之间的数据同步。实现这个机制在Zookeeper中有一个内部协议,此协议有两种模式,一种是恢复模式,一种是广播模式。状态同步保证了主节点和服务端具有相同的系统状态。广播模式是主节点和从节点进行同步后就可以广播消息。在广播模式下,服务端会接受客户端的请求,所有的写请求都被转发给主节点,再由主节点发送广播给从节点。从节点完成数据的写入请求后,主节点才会提交这个更新,客户端才会收到一个更新成功的响应。

你可能感兴趣的:(hadoop,java,hdfs,zookeeper)