第5章
HBase的安装和基础编程 
HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌公司BigTable 
的开源实现,主要用来存储非结构化和半结构化的松散数据。HBase可用于处理非常庞大
的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列
元素组成的数据表。Hadoop安装以后,本身并不包含HBase,需要另外安装。
本章首先介绍HBase的安装方法,并介绍HBase的两种不同模式的配置方法,包括单
机模式和伪分布式模式;然后介绍一些操作HBase的常用的Shell命令;最后,介绍如何使
用Eclipse开发可以操作HBase数据库的Java应用程序。
5.1 安装HBase 
本节介绍HBase的安装方法,包括下载安装文件、配置环境变量、添加用户权限等。
5.1.1 下载安装文件
HBase是Hadoop生态系统中的一个组件,但是,Hadoop安装以后,本身并不包含
HBase,因此需要单独安装HBase。登录Linux系统,在Linux系统中(不是Windows系
统)中打开火狐浏览器,访问本书官网的“下载专区”,“软件”目录下下载HBase安装文件
hbase-2.5.4-bin.tar.gz。火狐浏览器会默认把下载文件都保存到当前用户的下载目录,由于
本书全部采用hadoop用户登录Linux系统,因此hbase-2.5.4-bin.tar.gz文件会被保存到/ 
home/hadoop/Downloads/目录下。
需要注意的是,如果是在Windows系统下面下载安装文件hbase-2.5.4-bin.tar.gz,则需
要上传到Linux系统的/home/hadoop/Downloads/目录下,这个目录是本书所有安装文件
的中转站。
下载完安装文件以后,需要对文件进行解压。按照Linux系统使用的默认规范,用户安
装的软件一般都是存放在/usr/local/目录下。使用hadoop用户登录Linux系统,打开一个
终端,执行如下命令: 
$ sudo tar -zxf ~/Downloads/hbase-2.5.4-bin.tar.gz -C /usr/local 
将解压的文件名hbase-2.5.4改为hbase,以方便使用,命令如下: 
$ cd /usr/local 
$ sudo mv hbase-2.5.4 hbase

第5 章 HBase 的安装和基础编程 69 
5.1.2 配置环境变量
将HBase安装目录下的bin目录(即/usr/local/hbase/bin)添加到系统的PATH 环境
变量中,这样,每次启动HBase时就不需要到/usr/local/hbase目录下执行启动命令,方便
HBase的使用。使用vim 编辑器打开~/.bashrc文件,命令如下: 
$ vim ~/.bashrc 
打开.bashrc文件以后,可以看到,已经存在如下所示的PATH 环境变量的配置信息,因为
之前在第3章安装配置Hadoop时,已经为Hadoop添加了PATH 环境变量的配置信息: 
export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin 
这里,需要把HBase 的bin 目录/usr/local/hbase/bin 追加到PATH 中。当要在
PATH 中继续加入新的路径时,只要用英文冒号(:)隔开,把新的路径加到后面即可,追加
后的结果如下: 
export PATH = $PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin:/usr/local/ 
hbase/bin 
添加后,执行如下命令使设置生效: 
$ source ~/.bashrc 
5.1.3 添加用户权限
需要为当前登录Linux系统的hadoop用户添加访问HBase目录的权限,将HBase安
装目录下的所有文件的所有者改为hadoop,命令如下: 
$ cd /usr/local 
$ sudo chown -R hadoop:hadoop ./hbase 
5.1.4 查看HBase版本信息
可以通过如下命令查看HBase版本信息,以确认HBase已经安装成功: 
$ /usr/local/hbase/bin/hbase version 
执行上述命令以后,如果出现图5-1所示信息,则说明安装成功。
图5-1 查看HBase版本信息

70 大数据基础编程、实验和案例教程(第3 版) 
5.2 HBase的配置
HBase有3种运行模式,即单机模式、伪分布式模式和分布式模式。
(1)单机模式:采用本地文件系统存储数据。
(2)伪分布式模式:采用伪分布式模式的HDFS存储数据。
(3)分布式模式:采用分布式模式的HDFS存储数据。
本节仅介绍单机模式和伪分布式模式,分布式模式在下一节介绍。
在进行HBase配置之前,需要确认已经安装了3个组件:JDK、Hadoop、SSH。HBase 
单机模式不需要安装Hadoop,伪分布式模式和分布式模式需要安装Hadoop。JDK、
Hadoop和SSH 的安装方法,已经在第3章中做了详细介绍,如果已经按照第3章的方法安
装了Hadoop,则这里不需要另外安装JDK、Hadoop和SSH。
5.2.1 单机模式配置
1. 配置hbase-env.sh 文件 
使用vim 编辑器打开/usr/local/hbase/conf/hbase-env.sh,命令如下: 
$ vim /usr/local/hbase/conf/hbase-env.sh 
打开hbase-env.sh文件以后,需要在hbase-env.sh文件中配置Java环境变量,在第3 
章中,已经配置了JAVA_HOME=/usr/lib/jvm/jdk1.8.0_371,这里可以直接复制该配置
信息到hbase-env.sh 文件中。此外,还需要添加ZooKeeper配置信息,配置HBASE_ 
MANAGES_ZK为true,表示由HBase自己管理ZooKeeper,不需要单独的ZooKeeper,由
于hbase-env.sh文件中本来就存在这些变量的配置,因此只需要删除前面的注释#符号并
修改配置内容即可,修改后的hbase-env.sh文件应该包含如下两行信息: 
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_371 
export HBASE_MANAGES_ZK=true 
修改完成以后,保存hbase-env.sh文件并退出vim 编辑器。
2. 配置hbase-site.xml 文件
使用vim 编辑器打开并编辑/usr/local/hbase/conf/hbase-site.xml文件,命令如下: 
$ vim /usr/local/hbase/conf/hbase-site.xml 
在hbase-site.xml文件中,需要设置属性hbase.rootdir,用于指定HBase数据的存储位
置,如果没有设置,则hbase.rootdir默认为/tmp/hbase-${user.name},这意味着每次重启
系统都会丢失数据。这里把hbase.rootdir设置为HBase安装目录下的hbase-tmp文件夹, 
即/usr/local/hbase/hbase-tmp,修改后的hbase-site.xml文件中的配置信息如下:

第5 章 HBase 的安装和基础编程 71 
<configuration> 
<property> 
<name>hbase.rootdir</name> 
<value>file:///usr/local/hbase/hbase-tmp</value> 
</property> 
</configuration> 
保存hbase-site.xml文件,并退出vim 编辑器。
3. 启动运行HBase 
现在就可以测试运行HBase,命令如下: 
$ cd /usr/local/hbase 
$ bin/start-hbase.sh #启动HBase 
$ bin/hbase shell #进入HBase Shell 命令行模式
进入HBaseShell命令行模式以后,用户可以通过输入Shell命令操作HBase数据库。
成功启动HBase后会出现图5-2所示的界面。
图5-2 进入HBaseShell模式
最后,可以使用如下命令停止HBase运行: 
$ bin/stop-hbase.sh 
需要说明的是,如果在操作HBase的过程中发生错误,可以查看{HBASE_HOME}目
录(即/usr/local/hbase)下的logs子目录中的日志文件,查找可能的错误原因,然后搜索网
络资料寻找相关解决方案。
5.2.2 伪分布式配置
HBase的底层数据存储需要借助于Hadoop的HDFS。当HBase采用伪分布式模式
时,底层的Hadoop也要采用伪分布式模式。
1. 配置hbase-env.sh 文件
使用vim 编辑器打开/usr/local/hbase/conf/hbase-env.sh,命令如下: 
$ vim /usr/local/hbase/conf/hbase-env.sh 
打开hbase-env.sh文件以后,需要在hbase-env.sh文件中配置JAVA_HOME、HBASE 
_CLASSPATH 和HBASE_MANAGES_ZK。其中,HBASE_CLASSPATH 设置为本机

72 大数据基础编程、实验和案例教程(第3 版) 
Hadoop安装目录下的conf目录(即/usr/local/hadoop/conf)。JAVA_HOME和HBASE_ 
MANAGES_ZK的配置方法和上面单机模式的配置方法相同。修改后的hbase-env.sh文
件应该包含如下3行信息: 
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_371 
export HBASE_CLASSPATH=/usr/local/hbase/conf 
export HBASE_MANAGES_ZK=true 
修改完成以后,保存hbase-env.sh文件并退出vim 编辑器。
2. 配置hbase-site.xml 文件
使用vim 编辑器打开并编辑/usr/local/hbase/conf/hbase-site.xml文件,命令如下: 
$ vim /usr/local/hbase/conf/hbase-site.xml 
在hbase-site.xml文件中,需要设置属性hbase.rootdir,用于指定HBase数据的存储位
置。在HBase伪分布式模式中,是使用伪分布式模式的HDFS 存储数据,因此需要把
hbase.rootdir设置为HBase在HDFS上的存储路径,根据第3章Hadoop伪分布式模式的
配置可以指导,HDFS的访问路径为hdfs://localhost:9000/,因为这里设置hbase.rootdir 
为hdfs://localhost:9000/hbase。此外,由于采用了伪分布式模式,因此还需要将属性
hbase.cluter.distributed设置为true。修改后的hbase-site.xml文件中的配置信息如下: 
<configuration> 
<property> 
<name>hbase.rootdir</name> 
<value>hdfs://localhost:9000/hbase</value> 
</property> 
<property> 
<name>hbase.cluster.distributed</name> 
<value>true</value> 
</property> 
<property> 
<name>hbase.unsafe.stream.capability.enforce</name> 
<value>false</value> 
</property> 
</configuration> 
保存hbase-site.xml文件,并退出vim 编辑器。
3. 启动运行HBase 
首先登录SSH,由于之前在第3章中已经设置了无密码登录,因此这里不需要输入密
码;然后,切换至/usr/local/hadoop,启动Hadoop,让HDFS进入运行状态,从而可以为
HBase存储数据,具体命令如下: 
$ ssh localhost

第5 章 HBase 的安装和基础编程 73 
$ cd /usr/local/hadoop 
$ ./sbin/start-dfs.sh 
输入命令jps,如果能够看到NameNode、DataNode和SecondaryNameNode这3个进
程,则表示已经成功启动Hadoop。
然后,启动HBase,命令如下: 
$ cd /usr/local/hbase 
$ bin/start-hbase.sh 
输入命令jps,如果出现以下进程,则说明HBase启动成功: 
Jps 
HMaster 
HQuorumPeer 
NameNode 
HRegionServer 
SecondaryNameNode 
DataNode 
现在就可以进入HBaseShell模式,命令如下: 
$ bin/hbase shell #进入HBase Shell 命令行模式
进入HBaseShell命令行模式以后,用户可以通过输入Shell命令操作HBase数据库。
4. 停止运行HBase 
最后,可以使用如下命令停止HBase运行: 
$ bin/stop-hbase.sh 
如果在操作HBase的过程中发生错误,可以查看{HBASE_HOME}目录(即/usr/ 
local/hbase)下的logs子目录中的日志文件,以寻找可能的错误原因。
关闭HBase以后,如果不再使用Hadoop,就可以运行如下命令关闭Hadoop: 
$ cd /usr/local/hadoop 
$ ./sbin/stop-dfs.sh 
最后需要注意的是,启动关闭Hadoop和HBase的顺序一定是:启动Hadoop→启动
HBase→关闭HBase→关闭Hadoop。
5.3 HBase集群搭建
本节介绍HBase集群搭建的具体方法,包括下载安装文件、配置环境变量和分发安装
文件。HBase的底层数据存储需要借助于Hadoop的HDFS。当HBase采用分布式模式

74 大数据基础编程、实验和案例教程(第3 版) 
时,底层的Hadoop也要采用分布式模式。这里假设已经完成了Hadoop集群的搭建。
5.3.1 下载安装文件
访问HBase 官网(https://archive.apache.org/dist/hbase/2.5.4/),下载安装文件
hbase-2.5.4-bin.tar.gz,保存到Linux系统的/home/hadoop/Downloads/目录下。
下载完安装文件以后,需要对文件进行解压。按照Linux系统使用的默认规范,用户安
装的软件一般都是存放在/usr/local/目录下。使用hadoop用户登录Linux系统,打开一个
终端,执行如下命令: 
$ sudo tar -zxvf ~/Downloads/hbase-2.5.4-bin.tar.gz -C /usr/local 
将解压的文件名hbase-2.5.4改为hbase,以方便使用,命令如下: 
$ cd /usr/local 
$ sudo mv hbase-2.5.4 hbase 
需要为当前登录Linux系统的hadoop用户添加访问HBase目录的权限,将HBase安
装目录下的所有文件的所有者改为hadoop,命令如下: 
$ cd /usr/local 
$ sudo chown -R hadoop ./hbase 
5.3.2 配置环境变量
1. 配置hbase-env.sh 文件 
在hadoop01节点上使用vim 编辑器打开/usr/local/hbase/conf/hbase-env.sh,命令
如下: 
$ vim /usr/local/hbase/conf/hbase-env.sh 
在hbase-env.sh文件中添加如下信息: 
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_371 
export HBASE_CLASSPATH=/usr/local/hbase/conf 
export HBASE_MANAGES_ZK=true 
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=true 
修改完成以后,保存hbase-env.sh文件并退出vim 编辑器。
在hadoop01、hadoop02和hadoop03节点上分别执行如下操作: 
$ vim ~/.bashrc 
在.bashrc文件中添加如下一行配置信息:

第5 章 HBase 的安装和基础编程 75 
export HBASE_HOME=/usr/local/hbase 
然后执行如下命令让配置生效: 
$ source ~/.bashrc 
2. 配置hbase-site.xml 文件
在hadoop01节点上使用vim 编辑器打开并编辑/usr/local/hbase/conf/hbase-site.xml 
文件,命令如下: 
$ vim /usr/local/hbase/conf/hbase-site.xml 
hbase-site.xml文件中的配置信息设置如下: 
<configuration> 
<property> 
<!-- Hbase Web UI 登录--> 
<name>hbase.master.info.port</name> 
<value>60010</value> 
</property> 
<property> 
<name>hbase.tmp.dir</name> 
<value>/usr/local/hbase/tmp</value> 
</property> 
<property> 
<name>hbase.unsafe.stream.capability.enforce</name> 
<value>false</value> 
</property> 
<property> 
<!-- Hbase 写入数据的目录--> 
<name>hbase.rootdir</name> 
<value>hdfs://hadoop01:9000/hbase </value> 
</property> 
<property> 
<name>hbase.cluster.distributed</name> 
<value>true</value> 
</property> 
<property> 
<!-- list of zookeeper --> 
<name>hbase.zookeeper.quorum</name> 
<value>hadoop01,hadoop02,hadoop03</value> 
</property> 
<property> 
<!--zookooper 配置、日志等的存储位置--> 
<name>hbase.zookeeper.property.dataDir</name> 
<value>/usr/local/hbase/zookeeper</value> 
</property> 
</configuration>

76 大数据基础编程、实验和案例教程(第3 版) 
3. 配置regionservers 文件
在hadoop01节点上使用vim 编辑器打开/usr/local/hbase/conf/regionservers,命令
如下: 
$ vim /usr/local/hbase/conf/regionservers 
在regionservers文件中添加如下信息: 
hadoop01 
hadoop02 
hadoop03 
5.3.3 分发安装文件
在hadoop01节点上执行如下命令,将Master节点上的/usr/local/spark文件夹复制到
各个Worker节点上(即hadoop02和hadoop03节点): 
$ cd /usr/local/ 
$ tar -zcf ~/hbase.master.tar.gz ./hbase 
$ cd ~ 
$ scp ./hbase.master.tar.gz hadoop02:/home/hadoop 
$ scp ./hbase.master.tar.gz hadoop03:/home/hadoop 
在hadoop02和hadoop03节点上分别执行如下操作: 
$ cd ~ 
$ sudo rm -rf /usr/local/hbase/ 
$ sudo tar -zxf ~/hbase.master.tar.gz -C /usr/local 
$ sudo chown -R hadoop /usr/local/hbase 
5.3.4 启动集群
HBase的存储依赖于HDFS,所以要首先在hadoop01节点上启动Hadoop集群,命令
如下: 
$ cd /usr/local/hadoop 
$ ./sbin/start-all.sh 
然后,在hadoop01节点上执行如下命令启动HBase集群: 
$ cd /usr/local/hbase 
$ ./bin/start-hbase.sh 
在hadoop01节点上输入jps命令,如果能够看到如下进程,说明HBase启动成功:

第5 章 HBase 的安装和基础编程 77 
HMaster 
HQuorumPeer 
HRegionServer 
现在就可以进入HBaseShell模式,在hadoop01节点执行如下命令: 
$ bin/hbase shell #进入HBase Shell 命令行模式
进入HBaseShell命令行模式以后,用户可以通过输入Shell命令操作HBase数据库。
输入exit命令即可退出命令行模式,命令如下: 
hbase> exit 
注意:这里退出HBase数据库是退出HBaseShell,而不是停止HBase数据库后台运
行,执行exit后,HBase仍然在后台运行,如果要停止HBase运行,需要使用如下命令: 
$ bin/stop-hbase.sh 
关闭HBase以后,如果不再使用Hadoop,就可以运行如下命令关闭Hadoop: 
$ cd /usr/local/hadoop 
$ ./sbin/stop-dfs.sh 
最后需要注意的是,启动关闭Hadoop和HBase的顺序一定是:启动Hadoop→启动
HBase→关闭HBase→关闭Hadoop。
5.4 HBase常用Shell命令
在使用具体的Shell命令操作HBase数据之前,需要首先启动Hadoop,然后再启动
HBase,并且启动HBaseShell,进入Shell命令提示符状态,具体命令如下: 
$ cd /usr/local/hadoop 
$ ./sbin/start-dfs.sh 
$ cd /usr/local/hbase 
$ ./bin/start-hbase.sh 
$ ./bin/hbase shell 
需要注意的是,如果HBase采用分布式模式,则Hadoop也要采用分布式模式;如果
HBase采用伪分布式模式,则Hadoop也要采用伪分布式模式。这里建议采用伪分布式模
式,这样可以节省计算机系统资源,确保实验顺利开展。
5.4.1 在HBase中创建表
假设这里要创建一个表student,该表包含Sname、Ssex、Sage、Sdept、course等字段。
需要注意的是,在关系型数据库(如MySQL)中,需要首先创建数据库,然后再创建表,但