39

我是 Hadoop/ZooKeeper 的新手。我无法理解将 ZooKeeper 与 Hadoop 一起使用的目的,ZooKeeper 是否在 Hadoop 中写入数据?如果不是,那我们为什么要在 Hadoop 中使用 ZooKeeper?

4

3 回答 3

53

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

Hadoop 从 2.0 版开始也采用了 Zookeeper。

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

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

  • 顺序一致性 - 来自客户端的更新将按照它们发送的顺序应用。
  • 原子性 - 更新成功或失败。没有部分结果。
  • 单一系统映像 - 客户端将看到相同的服务视图,而不管它连接到的服务器如何。
  • 可靠性 - 应用更新后,它将从那时起持续存在,直到客户端覆盖更新。
  • 及时性——系统的客户视图保证在一定的时间范围内是最新的。

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

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

于 2012-05-24T20:48:10.703 回答
11

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

你可以阅读一篇关于这个主题的优秀论文Paxos Algorithm 。

于 2012-05-24T07:43:47.770 回答
6

动物园管理员文档页面:

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

每次实施它们时,都会进行大量工作来修复不可避免的错误和竞争条件。由于实现这些服务的难度,应用程序最初通常会忽略它们,这使得它们在发生变化时变得脆弱并且难以管理。即使正确完成,这些服务的不同实现也会在部署应用程序时导致管理复杂性。

hadoop文档页面:

Apache™ Hadoop® 项目为可靠、可扩展的分布式计算开发开源软件。

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

关于您的查询:

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

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

例如 Hadoop Namenode 故障转移过程。

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

来自HDFSHighAvailabilityWithQJM上的 Apache 文档链接:

一次只有一个 NameNode 处于活动状态对于 HA 集群的正确操作至关重要。否则,命名空间状态将很快在两者之间产生分歧,从而冒着数据丢失或其他不正确结果的风险。为了确保这个属性并防止所谓的“脑裂场景”,JournalNodes 将永远只允许一个 NameNode 一次成为写入者。

在故障转移期间,将变为活动的 NameNode 将简单地接管写入 JournalNode 的角色,这将有效地防止另一个 NameNode 继续处于活动状态,从而允许新的 Active 安全地进行故障转移。

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

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

于 2016-07-12T09:44:23.550 回答