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

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

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

Hadoop从2.0版本开始采用Zookeeper。

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

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

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

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

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

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

有一个很好的纸质Paxos算法 ,你可以阅读这个主题。

从zookeeper文档页面:

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

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

从hadoop文档页面:

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

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

关于您的查询:

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

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

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

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

从HDFSHighAvailabilityWithQJM上的Apache文档链接:

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

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

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

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