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

时间:2012-05-24 07:15:21

标签: java hadoop apache-zookeeper

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

3 个答案:

答案 0 :(得分:43)

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

Hadoop从2.0版本开始采用Zookeeper。

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

Zookeeper是一个分布式存储,提供以下保证(从Zookeeper overview page复制):

  • 顺序一致性 - 来自客户端的更新将应用于 命令他们被发送。
  • 原子性 - 更新成功或 失败。没有部分结果。
  • 单系统映像 - 客户端将看到 无论服务器连接的是哪个服务的相同视图 至。
  • 可靠性 - 应用更新后,它将持续存在 从那时起直到客户端覆盖更新。
  • 及时性 - 保证系统的客户端视图 在一定时间内保持最新状态。

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

如果您打算自己使用ZooKeeper,我建议您查看Curator from Netflix,这样可以更方便地使用(例如,他们实现了一些开箱即用的食谱)

答案 1 :(得分:7)

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

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

答案 2 :(得分:4)

来自zookeeper文档页面:

  

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

     

每次实施它们都需要做很多工作来修复不可避免的错误和竞争条件。由于难以实现这些类型的服务,应用程序最初通常会吝啬它们,这使得它们在变化的情况下变得脆弱并且难以管理。即使正确完成,这些服务的不同实现也会在部署应用程序时导致管理复杂性。

来自hadoop文档页面:

  

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

     

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

关于您的查询:

  

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

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

e.g。 Hadoop Namenode故障转移过程。

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

来自HDFSHighAvailabilityWithQJM上的Apache文档链接:

  

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

     

在故障转移期间,要激活的NameNode将简单地接管写入JournalNodes的角色,这将有效地阻止其他NameNode继续处于Active状态,从而允许新的Active安全地继续进行故障转移。

Zookeeper已被用于避免分裂 - 大脑情景。你可以在下面的问题中找到Zookeeper的角色:

How does Hadoop Namenode failover process works?