12.2 HBase的基本操作

在介绍完HBase的基本特性之后,本节将首先介绍如何安装HBase。由于它有单机、伪分布、全分布三种运行模式,因此我们将分别进行讲解。在安装成功之后,再介绍如何对HBase进行详细的设置,以提高系统的可靠性和执行速度。

12.2.1 HBase的安装

HBase有三种运行模式,其中单机模式的配置非常简单,几乎不用对安装文件做任何修改就可以使用。如果要运行分布式模式,Hadoop是必不可少的。另外在对HBase的某些文件进行配置之前,还需要具备以下先决条件:

1)Java:需要安装Java 1.6.x以上的版本,推荐从SUN官网下载,下载地址为:http://www.java.com/download/。在Ubuntu下可以使用下面命令安装Java:


sudo apt-get install sun-java6-jdk


具体的安装过程前述章节已经详细讲过,这里不再赘述。

2)Hadoop:由于HBase架构是基于其他文件存储系统的,因此在分布式模式下安装Hadoop是必须的。但是,如果运行在单机模式下,此条件可以省略。

注意 安装Hadoop的时候,要注意HBase的版本。也就是说,需要注意Hadoop和HBase之间的版本关系,如果不匹配,很可能会影响HBase系统的稳定性。在HBase的lib目录下可以看到对应的Hadoop的JAR文件。默认情况下,HBase的lib文件夹下对应的Hadoop版本相对稳定。如果用户想要使用其他的Hadoop版本,那么需要将Hadoop系统安装目录hadoop-..-core.jar文件和hadoop-..-test.jar文件复制到HBase的lib文件夹下,以替换其他版本的Hadoop文件。

另外,如果读者想要对HBase的数据存储有更好的了解,建议查看关于HDFS的更多详细资料。此部分不是本章所关注的内容,故不再赘述。

3)SSH:需要注意的是,SSH是必须安装的,并且要保证用户可以SSH到系统的其他节点(包括本地节点)。因为,我们需要使用Hadoop来管理远程Hadoop和HBase守护进程。

关于其他外部条件,我们可以在使用的过程中再具体配置,详细内容见12.2.2节。下面我们将具体介绍HBase在三种模式下的安装过程。

1.单机模式安装

HBase安装文件默认情况下是支持单机模式的,也就是说将HBase安装文件解压后就可以直接运行。在单机模式下,HBase并不使用HDFS。用户可以通过下面的命令将其解压:


tar xfz hbase-0.92.1.tar.gz

cd hbase-0.92.1


在运行之前,建议用户修改${HBase-Dir}/conf/hbase-site.xml文件。此文件是HBase的配置文件,通过它可以更改HBase的基本配置。另外还有一个文件为hbase-default.xml,它是HBase的默认配置文件。我们可以通过这两个文件中的任意一个来修改HBase的配置参数,并且它们二者的配置方法也完全相同。但是同样一个参数如果在hbase-site.xml中配置了,那么它就会覆盖掉hbase-default.xml中的同一个配置。也就是说,同样一个配置参数,hbase-site.xml中的配置将发挥作用。建议用户修改hbase-site.xml中的配置,而hbase-default.xml中的配置默认保持不变,这样当hbase-site.xml中配置错误时,其默认配置可以保证用户能够快速地对Hbase配置进行恢复。例如,需要修改的内容如下所示:


<configuration>

<property>

<name>hbase.rootdir</name>

<value>file:///tmp/hbase-${user.name}/hbase</value>

</property>

</configuration>


从上面可以看到,默认情况下HBase的数据是存储在根目录的tmp文件夹下的。熟悉Linux的用户知道,此文件夹为临时文件夹。也就是说,当系统重启的时候,此文件夹中的内容将被清空。这样用户保存在HBase中的数据也会丢失,这当然是用户不想看到的事情。因此,用户需要将HBase数据的存储位置修改为自己希望的存储位置。

2.伪分布模式安装

伪分布模式是一个运行在单个节点(单台机器)上的分布式模式,此种模式下HBase所有的守护进程将运行在同一个节点之上。由于分布式模式的运行需要依赖于分布式文件系统,因此此时必须确保HDFS已经成功运行。用户可以在HDFS系统上执行Put和Get操作来验证HDFS是否安装成功。关于HDFS集群的安装,请读者参看其他章节的介绍。

一切准备就绪后,我们开始配置HBase的参数(即配置hbase-site.xml文档)。通过设定hbase.rootdir参数来指定HBase的数据存放位置,进而让HBase运行在Hadoop之上,如图12-1所示。具体配置如下所示:


<configuration>

……

<property>

<name>hbase.rootdir</name>

<value>hdfs://localhost:9000/hbase</value>

<description>此参数指定了HReion服务器的位置,即数据存放位置。

</description>

</property>

<property>

<name>dfs.replication</name>

<value>1</value>

<description>此参数指定了Hlog和Hfile的副本个数,此参数的设置不能大于HDFS的节点数。伪

分布模式下DataNode只有一台,因此此参数应设置为1。

</description>

</property>

……

</configuration>


注意 hbase.rootdir指定的目录需要Hadoop自己创建,否则可能出现警告提示。由于目录为空,HBase在检查目录时可能会报所需要的文件不存在的错误。

3.完全分布模式安装

对于完全分布式HBase的安装,我们需要通过hbase-site.xml文档来配置本机的HBase特性,通过hbase-env.sh来配置全局HBase集群系统的特性,也就是说每一台机器都可以通过hbase-env.sh来了解全局的HBase的某些特性。另外,各个HBase实例之间需要通过ZooKeeper来进行通信,因此我们还需要维护一个(一组)ZooKeeper系统。

下面我们将以3台机器为例,介绍如何进行配置。3台机器的hosts配置如下所示:


10.77.20.100 master

10.77.20.101 slave1

10.77.20.102 slave2


假设我们已经配置完成Hadoop/HDFS和ZooKeeper[1],下面介绍HBase的配置。

(1)conf/hbase-site. xml文件的配置

hbase. rootdir和hbase.cluster.distributed两个参数的配置对于HBase来说是必需的。我们通过hbase.roodir来指定本台机器HBase的存储目录;通过hbase.cluster.distributed来说明其运行模式(true为全分布模式,false为单机模式或伪分布模式);另外hbase.master指定的是HBase的master的位置,hbase.zookeeper.quorum指定的是ZooKeeper集群的位置。如下所示为示例配置文档:


<configuration>

……

<property>

<name>hbase.rootdir</name>

</property>

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

<description>指定HBase运行的模式:

false:单机模式或伪分布模式

true:完全分布模式

</description>

</property>

<property>

<name>hbase.master</name>

<value>hdfs://master:60000</value>

<description>指定Master位置</description>

</property>

<property>

<name>hbase.zookeeper.quorum</name>

<value>master, slave1,slave2</value>

<description>指定ZooKeeper集群</description>

</property>

……

</configuration>


(2)conf/regionservers的配置

regionservers文件列出了所有运行HBase RegionServer CHRegion Server的机器。此文件的配置和Hadoop的slaves文件十分类似,每一行指定一台机器。当HBase启动的时候,会将此文件中列出的所有机器启动;同样,当HBase关闭的时候,也会同时自动读取文件并将所有机器关闭。

在我们的配置中,HBase Master及HDFS NameNode运行在hostname为Master的机器上,HBase RegionServers运行在master、slave1和slave2上。根据上述配置,我们只需将每台机器上HBase安装目录下的conf/regionservers文件的内容设置为:


master

slave1

slave2


另外,我们可以将HBase的Master和HRegionServer服务器分开。这样只需在上述配置文件中删除master一行即可。

(3)ZooKeeper的配置

完全分布式的HBase集群需要ZooKeeper实例运行,并且需要所有的HBase节点能够与ZooKeeper实例通信。默认情况下HBase自身维护着一组默认的ZooKeeper实例。不过,用户可以配置独立的ZooKeeper实例,这样能够使HBase系统更加健壮。

conf/hbase-env. sh配置文档中HBASE_MANAGES_ZK的默认值为true,它表示HBase使用自身所带的ZooKeeper实例。但是,该实例只能为单机或伪分布模式下的HBase提供服务。当安装全分布模式时需要配置自己的ZooKeeper实例。在HBase-site.xml文档中配置了hbase.zookeeper.quorum属性后,系统将有限使用该属性所指定的ZooKeeper列表。此时,若HBASE_MANAGES_ZK变量值为true,那么在启动HBase时,Hbase将把ZooKeeper作为自身的一部分运行,其对应进程为“HQuorumPeer”;若该变量值为false,那么在启动HBase之前必须首先手动运行hbase.zookeeper.quorum属性所指定的ZooKeeper集群,其对应的进程将显示为QuorumPeerMain。

关于Zookeeper的安装与配置详见第15章。

若将ZooKeeper作为HBase的一部分来运行,那么当关闭HBase时Zookeeper将被自动关闭,否则需要手动停止ZooKeeper服务。

[1]Hadoop和ZooKeeper的配置请参看本书相关章节。