第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)中,需要首先创建数据库,然后再创建表,但