前置条件:
需要在已经配置了hadoop伪分布式的基础上进行本实验。
二、安装并配置HBase
解压安装包hbase-1.1.5-bin.tar.gz至路径 /usr/local,命令如下:
tar -zxvf hbase-1.1.5-bin.tar.gz -C /usr/local
将解压的文件名hbase-1.1.2改为hbase,以方便使用,命令如下:
mv /usr/local/hbase-1.1.5 /usr/local/hbase
添加hbase的搜索路径
vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop
export HBASE_HOME=/usr/local/hbase
export PATH=JAVA_HOME/bin:HADOOP_HOME/sbin:$HBASE_HOME/bin:
使环境变量生效
source /etc/profile
验证hbase路径是否在搜索路径中
echo $PATH
查看HBase版本,确定hbase安装成功,命令如下:
hbase version
2019-02-27 21:24:14,156 INFO [main] util.VersionInfo: HBase 1.1.5
…
HBase配置
HBase有三种运行模式,单机模式、伪分布式模式、分布式模式。作为学习,我们重点讨论单机模式和伪分布式模式。 本实验需要预先安装好Hadoop
单机模式配置
配置环境变量:
配置HBASE_MANAGES_ZK为true,表示由hbase自己管理zookeeper,不需要单独的zookeeper
vim /usr/local/hbase/conf/hbase-env.sh
export JAVA_HOME=/usr/local/jdk
export HBASE_MANAGES_ZK=true
在启动HBase前需要设置属性hbase.rootdir,用于指定HBase数据的存储位置,因为如果不设置的话,hbase.rootdir默认为/tmp/hbase-${user.name},这意味着每次重启系统都会丢失数据
vim /usr/local/hbase/conf/hbase-site.xml
hbase.rootdir file:///usr/local/hbase/hbase-tmp
启动HDFS
start-dfs.sh
启动hbase,如果在操作HBase的过程中发生错误,可以通过{HBASE_HOME}目录(/usr/local/hbase)下的logs子目录中的日志文件查看错误原因
start-hbase.sh
进入hbase shell
hbase shell
hbase(main):001:0>
退出hbase shell
exit
停止hbase
stop-hbase.sh
停止HDFS
stop-dfs.sh
伪分布式模式配置
vim /usr/local/hbase/conf/hbase-env.sh
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export HBASE_CLASSPATH=/usr/local/hbase/conf
export HBASE_MANAGES_ZK=true
修改hbase.rootdir,指定HBase数据在HDFS上的存储路径;将属性hbase.cluter.distributed设置为true。假设当前Hadoop集群运行在伪分布式模式下,在本机上运行,且NameNode运行在9000端口。
hbase.rootdir指定HBase的存储目录;hbase.cluster.distributed设置集群处于分布式模式.
vim /usr/local/hbase/conf/hbase-site.xml
hbase.rootdir hdfs://192.168.224.10:9000/hbase hbase.zookeeper.property.dataDir /root/data hbase.cluster.distributed true hbase.zookeeper.property.clientPort 2181 zookeeper.znode.parent /hbase-unsecure hbase.zookeeper.quorum 192.168.224.10 dfs.replication 1 hbase.master 192.168.224.10:60000
测试运行HBase
启动hdfs
start-dfs.sh
start-hbase.sh
验证服务是否启动,如果是分布式模式,那么data node会在其他节点上。
jps
8356 HQuorumPeer
8423 HMaster
8551 HRegionServer
7996 SecondaryNameNode
7774 NameNode
8799 Jps
hbase和hadoop的启动顺序:
启动Hadoop—>启动HBase—>关闭HBase—>关闭Hadoop
进入hbase shell
hbase shell
============================
编程实践
以下命令为在base shell中操作
查询当前表的列表
list
创建表,包含3个列族f1,f2和f3
create ‘temptable’,‘f1’,‘f2’,‘f3’
第r1行、第“f1:c1”列,添加数据值为“hello“
put ‘temptable’,‘r1’,‘f1:c1’,‘hello’
从tempTable中,获取第r1行、第“f1:c1”列的值
get ‘temptable’,‘r1’,{COLUMN=>‘f1:c1’}
禁用并删除表
disable ‘temptable’
drop ‘temptable’
再次查询,template表已经不存在了
list
HBase中创建表,利用默认行键
create ‘student’,‘Sname’,‘Ssex’,‘Sage’,‘Sdept’,‘course’
此时,即创建了一个“student”表,属性有:Sname,Ssex,Sage,Sdept,course。因为HBase的表中会有一个系统默认的属性作为行键,无需自行创建,默认为put命令操作中表名后第一个数据。创建完“student”表后,可通过describe命令查看“student”表的基本信息
describe ‘student’
HBase数据库基本操作
介绍HBase的增、删、改、查操作。在添加数据时,HBase会自动为添加的数据添加一个时间戳,故在需要修改数据时,只需直接添加数据,HBase即会生成一个新的版本,从而完成“改”操作,旧的版本依旧保留,系统会定时回收垃圾数据,只留下最新的几个版本,保存的版本数可以在创建表的时候指定。
添加数据
HBase中用put命令添加数据,注意:一次只能为一个表的一行数据的一个列,也就是一个单元格添加一个数据,所以直接用shell命令插入数据效率很低,在实际应用中,一般都是利用编程操作数据。
当运行命令:put ‘student’,’95001’,’Sname’,’LiYing’时,即为student表添加了学号为95001,名字为LiYing的一行数据,其行键为95001。
put ‘student’,‘95001’,‘Sname’,‘LiYing’
put ‘student’,‘95001’,‘course:math’,‘80’
put ‘student’,‘95006’,‘Sname’,‘LiYingA’
put ‘student’,‘95006’,‘course:math’,‘90’
查询表student的全部数据
scan ‘student’
ROW COLUMN+CELL
95001 column=Sname:, timestamp=1551351671650, value=LiYing
1 row(s) in 0.1800 seconds
查询某一条记录
get ‘student’,‘95006’
删除数据
在HBase中用delete以及deleteall命令进行删除数据操作,它们的区别是:1. delete用于删除一个数据,是put的反向操作;2. deleteall操作用于删除一行数据。
delete命令, 删除student表中,记录为95001的Ssex内容
delete ‘student’,‘95001’,‘Sname’
查询student表中的记录95001,此记录中的Ssex记录已经消失
get ‘student’,‘95001’
删除整条记录,
deleteall ‘student’,‘95001’
再次查询,记录已经不存在了
get ‘student’,‘95001’
scan ‘student’
删除表:
删除表有两步,第一步先让该表不可用,第二步删除表。
disable ‘student’
drop ‘student’
查询表历史数据
查询表的历史版本,需要两步。
1、在创建表的时候,指定保存的版本数(假设指定为5)
create ‘teacher’,{NAME=>‘username’,VERSIONS=>5}
2、插入数据然后更新数据,使其产生历史版本数据,注意:这里插入数据和更新数据都是用put命令
put ‘teacher’,‘91001’,‘username’,‘Mary’
put ‘teacher’,‘91001’,‘username’,‘Mary1’
put ‘teacher’,‘91001’,‘username’,‘Mary2’
put ‘teacher’,‘91001’,‘username’,‘Mary3’
put ‘teacher’,‘91001’,‘username’,‘Mary4’
put ‘teacher’,‘91001’,‘username’,‘Mary5’
3、查询时,指定查询的历史版本数。默认会查询出最新的数据。(有效取值为1到5)
get ‘teacher’,‘91001’,{COLUMN=>‘username’,VERSIONS=>5}
退出 hbase shell
exit