我是Hadoop / ZooKeeper的新手。我无法理解将ZooKeeper与Hadoop一起使用的目的,是ZooKeeper在Hadoop中编写数据吗?如果没有,那么我们为什么要使用ZooKeeper和Hadoop?
答案 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的角色: