实验八 Hbase 入门
- 实验目的
- 理解HBase在Hadoop体系结构中的角色。
- 熟练使用HBase操作常用的Shell命令。
- 实验环境
与实验五一致https://mp.csdn.net/editor/html/116616391,其他命令可参考实验六:https://mp.csdn.net/editor/html/116618050实验七https://mp.csdn.net/editor/html/116618050
实验十:https://mp.csdn.net/editor/html/116618915
- 试验内容
按要求完成问题:
- 假定MySQL里有member表,要求使用Hbase的Shell接口,在Hbase中新建并存储此表。
身份ID
姓名
性别
年龄
班级
C++成绩
操作系统成绩
201401
王辉
男
21
计算机14-2
85
60
201402
王丽
女
22
计算机15-2
80
80
201403
郭涛
男
23
计算机16-2
75
90
- 实验步骤
-
HBase是一个分布式的、面向列的开源数据库,源于Google的一篇论文《BigTable:一个结构化数据的分布式存储系统》。HBase以表的形式存储数据,表有行和列组成,列划分为若干个列族/列簇(column family)。欲了解HBase的官方资讯,请访问HBase官方网站。
HBase的运行有三种模式:单机模式、伪分布式模式、分布式模式。
单机模式:在一台计算机上安装和使用HBase,不涉及数据的分布式存储;伪分布式模式:在一台计算机上模拟一个小的集群;分布式模式:使用多台计算机实现物理意义上的分布式存储。这里出于学习目的,我们只重点讨论单机模式。
- HBase安装
-
1)下载Hbase
http://archive.apache.org/dist/hbase/1.2.6/ base-1.2.6-bin.tar.gz
下载对应hadoop
https://archive.apache.org/dist/hadoop/common/
Hadoop与Hbase对应版本关系:(此实验环境选择hadoop 2.7.1 ,Hbase 2.0.0)

- 解压安装包hbase-2.0.0-bin.tar.gz至路径 /usr/local。
-
sudo tar -zxvf hbase-2.0.0-bin.tar.gz -C /usr/local
解压缩完毕:
- 将解压的文件名hbase-2.0.0改为hbase,以方便使用,命令如下
-
sudo mv /usr/local/hbase-2.0.0 /usr/local/hbase
- 配置环境变量
-
将hbase下的bin目录添加到path中,这样,启动hbase就无需到/usr/local/hbase目录下,大大的方便了hbase的使用。编辑~/.bashrc文件,命令是:
vi ~/.bashrc
如果没有引入过PATH请在~/.bashrc文件尾行添加如下内容:
export PATH=$PATH:/usr/local/hbase/bin
编辑完成后,再执行source命令使上述配置在当前终端立即生效,命令如下:
source ~/.bashrc
- 添加HBase权限
-
cd /usr/local
sudo chown -R hadoop ./hbase #将hbase下的所有文件的所有者改为hadoop,hadoop是当前用户的用户名。
- 查看HBase版本,确定hbase安装成功,命令如下:
-
/usr/local/hbase/bin/hbase version
改名:方便后续操作、配置环境变量:可以在命令行直接运行相关服务、添加hadoop权限:便于与hadoop的权限统一,且方便调用、查看版本:验证Hbase安装是否出错
- HBase配置
- 配置/usr/local/hbase/conf/hbase-env.sh 。配置JAVA环境变量,并添加配置HBASE_MANAGES_ZK为true,用vi命令打开并编辑hbase-env.sh,命令如下:
-
vi /usr/local/hbase/conf/hbase-env.sh
配置JAVA环境变量,jdk的安装目录默认是 /usr/lib/jvm/java-1.7.0-openjdk, 则JAVA _HOME =/usr/lib/jvm/java-7-openjdk-amd64,其中java-1.7.0-openjdk是你的jdk版本;配置HBASE_MANAGES_ZK为true,表示由hbase自己管理zookeeper,不需要单独的zookeeper。hbase-env.sh中本来就存在这些变量的配置,大家只需要删除前面的#并修改配置内容即可(#代表注释):
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export HBASE_MANAGES_ZK=true
- 2. 配置/usr/local/hbase/conf/hbase-site.xml ,打开并编辑hbase-site.xml,命令如下:
-
vi /usr/local/hbase/conf/hbase-site.xml
在启动HBase前需要设置属性hbase.rootdir,用于指定HBase数据的存储位置,因为如果不设置的话,hbase.rootdir默认为/tmp/hbase-${user.name},这意味着每次重启系统都会丢失数据。此处设置为HBase安装目录下的hbase-tmp文件夹即(/usr/local/hbase/hbase-tmp),添加配置如下:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///usr/local/hbase/hbase-tmp</value>
</property>
</configuration>
修改JAVA环境和设置属性hbase.rootdir,用于指定HBase数据的存储位置
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HBASE_MANAGES_ZK=true

- 接下来测试运行。
-
首先启动Hadoop:进入 Hadoop 主文件夹
cd /usr/local/hadoop/
开启 Hadoop 相关进程
sbin/start-dfs.sh
sbin/start-yarn.sh
然后切换目录至HBase安装目录/usr/local/hbase;再启动HBase。命令如下:
cd /usr/local/hbase
bin/start-hbase.sh
hbase shell
(注意:如果在操作HBase的过程中发生错误,可以通过{HBASE_HOME}目录(/usr/local/hbase)下的logs子目录中的日志文件查看错误原因。
启动hive时报如下的错误[ERROR] Terminal initialization failed; falling back to unsupported
解决办法:进入到hadoop安装目录下的share/hadoop/yarn/lib下删除 jline的jar文件。再启动hive即可)
使用jps命令查看进程:
Jps
利用Hbase提供shell接口完成实验内容要求。
身份ID
姓名
性别
年龄
班级
C++成绩
操作系统成绩
201401
王辉
男
21
计算机14-2
85
60
201402
王丽
女
22
计算机15-2
80
80
201403
郭涛
男
23
计算机16-2
75
90
初始化表格:
create 'member','id','personalAttr','gradeAttr'
put 'member','201401','personalAttr:name','wanghui'
put 'member','201401','personalAttr:gender','0'
put 'member','201401','personalAttr:age','21'
put 'member','201401','personalAttr:class','CS 14-2'
put 'member','201401','gradeAttr:C++_grade','85'
put 'member','201401','gradeAttr:OS_grade','60'
put 'member','201402','personalAttr:name','wangli'
put 'member','201402','personalAttr:gender','1'
put 'member','201402','personalAttr:age','22'
put 'member','201402','personalAttr:class','CS 15-2'
put 'member','201402','gradeAttr:C++_grade','80'
put 'member','201402','gradeAttr:OS_grade','80'
put 'member','201403','personalAttr:name','guotao'
put 'member','201403','personalAttr:gender','0'
put 'member','201403','personalAttr:age','23'
put 'member','201403','personalAttr:class','CS 16-2'
put 'member','201403','gradeAttr:C++_grade','75'
put 'member','201403','gradeAttr:OS_grade','90'
命令输错,无反应时可键入 >’ 回车后终止此命令
进入hbase shell命令行完成表格的初始化及建立:

最终建表如下:
五、实验结果与分析
1)请给出每一个实验步骤目的和执行结果。
各步骤如上述文字(蓝色)描述
2)Hbase是否适合存储问题①中的结构化数据,并简单叙述Hbase与关系型数据库的区别。
Hbase是否适合存储问题①中的结构化数据
显然问题1表的ID数量众多,且其结构定义完整,事实上Hbase并不适合存储这类结构化数据, Hbase设计之初是为了存储互联网上大量的半结构化数据,比如本题中用户甚至都可以put'member', 201401', 'socialAttr: country', 'china',而表中并没有定义country字段,但Hbase里可以随意插入,这是它的巨大优势,
Hbase和关系型数据库的区别:
- Hbase只提供字符串这一种数据类型,其他数据类型的操作只能靠用户自行处理,而关系型数据库有丰富的数据类型;
- Hbase数据操作只有很简单的插入、查询、删除、修改、清空等操作,不能实现表与表关联操作,而关系型数据库有大量此类SQL语句和函数;
- Hbase基于列式存储,每个列族都由几个文件保存,不同列族的文件是分离的,关系型数据库基于表格设计和行模式保存;
- Hbase修改和删除数据实现上是插入带有特殊标记的新记录,而关系型数据库是数据内容的替换和修改;
- Hbase为分布式而设计,可通过增加机器实现性能和数据增长,而关系型数据库很难做到这一点。
-
本文是关于HBase的入门实验,旨在理解HBase在Hadoop架构中的作用,熟悉HBase Shell操作。实验包括:安装HBase,配置环境变量,设置HBase数据存储位置,启动Hadoop和HBase,以及使用HBase Shell创建和操作表格。通过实例展示了如何将结构化数据导入HBase,并对比了HBase与关系型数据库的区别。

380





