Hadoop中的HBase和ZooKeeper角色?

时间:2013-07-29 09:44:21

标签: hadoop

我在我的Ubuntu机器上安装了Hadoop单节点集群,并且能够运行NameNode,datanode等。现在我需要安装HBase和Zookeeper。但我真的不知道它们是什么。伙计们可以让我简要介绍一下这些工具。

由于

2 个答案:

答案 0 :(得分:23)

首先,我强烈建议您浏览这些项目的官方页面。对于HBase,请转到here,对于Zookeeper,请转到here

HBase是一个NoSQL数据存储区,运行在现有Hadoop集群(HDFS)之上。它为您提供随机,实时读/写等功能,这是FS缺乏的HDFS。由于它是NoSQL数据存储区,因此它不遵循SQL约定和术语。 HBase提供了一组很好的API(包括JAVA和Thrift)。除此之外,HBase还提供与MapReduce框架的无缝集成。但是,除了HBase的所有这些优点之外,您应该记住,随机读写很快但总是有额外的开销。所以在做出任何决定之前要好好思考。

ZooKeeper是分布式应用程序(如HBase)的高性能协调服务。它在一个简单的界面中公开了诸如命名,配置管理,同步和组服务之类的公共服务,因此您不必从头开始编写它们。您可以使用现成的方法来实现共识,组管理,领导者选举和在线协议。您可以根据自己的特定需求进行构建。

HBase完全依赖Zookeeper。 HBase为您提供了使用其内置Zookeeper的选项,它将在您启动HBAse时启动。但是,如果您正在生产集群,那就不好了。在这种情况下,拥有一个专用的Zookeeper集群并将其与HBase集群集成在一起总是好的。

注意:您的ZK仲裁中应始终有奇数个节点。

HTH

答案 1 :(得分:7)

概述

Zookeeper :简而言之,zookeeper是一个分布式应用程序(集群)配置和管理工具,它独立于HBase退出。来自文档:

  

ZooKeeper是用于维护配置的集中服务   信息,命名,提供分布式同步,以及   提供团体服务。所有这些服务都用于   某种形式或分布式应用程序。他们每次都是   实施了很多修复bug的工作   竞争条件是不可避免的。因为困难   通常最初实现这些类型的服务   吝啬它们,使它们在变化和变化的情况下变脆   难以管理。即使做得正确,也不同   这些服务的实现会导致管理复杂性   应用程序已部署。

HBase :HDFS之上的NoSQL数据存储区(可以使用简单的文件系统,但它保证没有数据持久性)。 HBase包含两个主要服务:

  • 主服务器 - 主服务器(HMaster)协调 群集并执行管理操作,例如分配 区域和平衡负载。
  • 区域服务器 - 区域 服务器做真正的工作。每个表的数据的子集由每个区域服务器处理。客户端与区域服务器通信以访问HBase中的数据。

HBase Zookeeper 之间的关联:

分布式HBase完全依赖Zookeeper(用于群集配置和管理)。在Apache HBase中,ZooKeeper在Masters和RegionServers之间协调,通信和共享状态。 HBase的设计策略是仅将ZooKeeper用于瞬态数据(即用于协调和状态通信)。因此,如果删除HBase的ZooKeeper数据,只会影响瞬态操作 - 可以继续写入数据并从HBase读取数据。

启动HBase后 - 您可以使用jps命令验证它已启动的进程:

$ jps

该命令将列出机器上的所有java进程(HBase本身是一个Java应用程序) - 可能的输出(如果是简单的独立HBase设置)必须是:

62019 Jps
61098 HMaster        
61233 HRegionServer     
61003 HQuorumPeer

从技术上讲: 默认情况下,HBase管理zookeeper本身,即当我们启动和停止HBase时启动和停止zookeeper仲裁(zookeeper节点集群) - 验证设置查看文件conf/hbase-evn.sh(在你的hbase目录中)必须有一个行:

export HBASE_MANAGES_ZK=true

设置完毕后,我们需要做的就是在conf/hbase-site.xml - from docs中设置以下指令:

 <configuration>
    ...
    <property>
      <name>hbase.zookeeper.property.clientPort</name>
      <value>2181</value>
      <description> The port at which the clients will connect.
      </description>
    </property>
    <property>
      <name>hbase.zookeeper.quorum</name>
      <value>rs1.example.com,rs2.example.com,rs3.example.com,rs4.example.com,rs5.example.com</value>
      <description>Comma separated list of servers in the ZooKeeper Quorum.
      For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".
      By default this is set to localhost for local and pseudo-distributed modes
      of operation. For a fully-distributed setup, this should be set to a full
      list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh
      this is the list of servers which we will start/stop ZooKeeper on.
      </description>
    </property>
    <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/usr/local/zookeeper</value>
      <description>Property from ZooKeeper's config zoo.cfg.
      The directory where the snapshot is stored.
      </description>
    </property>
    ...
  </configuration>