为什么我们在Hadoop堆栈中需要ZooKeeper?

34 java hadoop apache-zookeeper

我是Hadoop/ZooKeeper的新手.我无法理解将ZooKeeper与Hadoop一起使用的目的,是ZooKeeper在Hadoop中编写数据吗?如果没有,那么我们为什么要使用ZooKeeper和Hadoop?

Arn*_*-Oz 46

Hadoop 1.x不使用Zookeeper.即使在Hadoop 1.x安装中,HBase确实使用zookeeper.

Hadoop从2.0版本开始采用Zookeeper.

Zookeeper的目的是集群管理.这符合使用较小的专用组件的*nix的一般理念 - 因此,希望集群功能的Hadoop组件依赖于Zookeeper而不是开发自己的组件.

Zookeeper是一个分布式存储,提供以下保证(从Zookeeper概述页面复制):

  • 顺序一致性 - 客户端的更新将按发送顺序应用.
  • 原子性 - 更新成功或失败.没有部分结果.
  • 单系统映像 - 无论服务器连接到哪个服务器,客户端都将看到相同的服务视图.
  • 可靠性 - 一旦应用了更新,它将从那时起持续到客户端覆盖更新.
  • 及时性 - 系统的客户视图保证在特定时间范围内是最新的.

您可以使用它们来实现集群管理所需的不同" 配方 ",例如锁,领导者选举等.

如果你打算自己使用ZooKeeper,我建议你看一下 Netflix的Curator,它更容易使用(例如他们实现了一些开箱即用的食谱)


xia*_*.li 7

Zookeeper解决了可靠的分布式协调问题,而hadoop是一个分布式系统,对吧?

有一个优秀的纸质Paxos算法,你可以阅读这个主题.


Rav*_*abu 6

Zookeeper文档页面:

ZooKeeper是用于维护配置信息,命名,提供分布式同步和提供组服务的集中式服务。所有这些类型的服务都以某种形式或由分布式应用程序使用。

每次实施它们时,都会进行很多工作来修复不可避免的错误和竞争条件。由于难以实现这类服务,因此应用程序最初通常会跳过它们,从而使它们在存在更改的情况下变得脆弱且难以管理。即使部署正确,这些服务的不同实现也会导致管理复杂。

hadoop文档页面:

Apache™Hadoop®项目开发了用于可靠,可扩展的分布式计算的开源软件。

Apache Hadoop软件库是一个框架,该框架允许使用简单的编程模型在计算机集群之间分布式处理大型数据集。

关于您的查询:

为什么我们需要在Hadoop Stack中使用ZooKeeper?

绑定因素是分布式处理和高可用性。

例如,Hadoop Namenode故障转移过程。

Hadoop高可用性是围绕活动名称节点和备用名称节点设计的,用于故障转移过程。在任何时候,您都不应同时拥有两个主节点(活动的Namenode)。

HDFSHighAvailabilityWithQJM上的Apache文档链接:

对于HA群集的正确操作至关重要,一次只能有一个NameNode处于活动状态。否则,名称空间状态将在两者之间迅速分散,从而有数据丢失或其他不正确结果的风险。为了确保此属性并防止所谓的“裂脑情况”,JournalNode将仅一次允许单个NameNode成为作者。

在故障转移期间,将变为活动状态的NameNode将仅承担写入JournalNodes的角色,这将有效地防止另一个NameNode继续处于活动状态,从而使新的Active可以安全地进行故障转移。

Zookeeper已被用来避免“裂脑”情况。您可以在以下问题中找到Zookeeper的角色:

Hadoop Namenode故障转移过程如何工作?