HBase环境准备
HBase下载地址:http://archive.apache.org/dist/hbase/
tar -zxvf hbase-1.4.11-bin.tar.gz #解压hbase
vim /etc/profile #配置hbase环境变量
在最后加上export PATH=$PATH:/usr/local/soft/hbase-1.4.11/bin
source /etc/profile #重启,使hbase生效
chown -R hadoop hbase-1.4.11 #给hbase赋hadoop权限
bin/hbase version #查看hbase是否配置成功,若成功,则显示hbase的版本信息
HBase配置
hbase单机模式下不需要hadoop,伪分布式模式和分布式模式下需要hadoop
HBase单机模式
hbase-env.sh的配置
vim conf/hbase-env.sh #配置下面的信息
export JAVA_HOME=/usr/local/soft/jdk1.8.0_231 #配置java环境变量
export HBASE_MANAGES_ZK=true #配置HBASE_MANAGES_ZK为true,表示由hbase自己管理zookeeper,不需要单独的zookeeper。
注:hbase-env.sh中本来就存在这些变量的配置,大家只需要删除前面的#并修改配置内容即可。
hbase-site.xml的配置
<property>
<!--hbase.rootdir用于指定HBase数据的存储位置,因为如果不设置的话,hbase.rootdir默认为/tmp/hbase-${user.name},这意味着每次重启系统都会丢失数据。-->
<name>hbase.rootdir</name>
<value>file:///usr/local/soft/hbase-1.4.11/hbase-tmp</value>
</property>
启动和运行
bin/start-hbase.sh #启动
bin/hbase shell #运行,可以在此操作hbase数据库
bin/stop-hbase.sh #停止hbase服务
注意:如果在操作HBase的过程中发生错误,可以通过{HBASE_HOME}目录下的logs子目录中的日志文件查看错误原因。
HBase伪分布式模式
hbase-env.sh配置
export JAVA_HOME=/usr/local/soft/jdk1.8.0_231
export HBASE_CLASSPATH=/usr/local/soft/hadoop/conf #HBASE_CLASSPATH设置为本机Hadoop安装目录下的conf目录
export HBASE_MANAGES_ZK=true
hbase-site.xml配置
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
启动hadoop,参考:hadoop系列之环境搭建(一)
启动和运行hbase和单机模式一样
注:启动关闭Hdoop和HBase的顺序一定是:启动Hadoop—>启动HBase—>关闭HBase—>关闭Hadoop
HBase数据库基本操作
在添加数据时,HBase会自动为添加的数据添加一个时间戳,故在需要修改数据时,只需直接添加数据,HBase即会生成一个新的版本,从而完成“改”操作,旧的版本依旧保留,系统会定时回收垃圾数据,只留下最新的几个版本,保存的版本数可以在创建表的时候指定。
create 'student','Sname','Ssex','Sage','Sdept','course' #创建了一个“student”表,属性有:Sname,Ssex,Sage,Sdept,course。HBase的表中会有一个系统默认的属性作为行键,无需自行创建,默认为put命令操作中表名后第一个数据。
describe 'student' #查看student表基本信息
添加数据
HBase中用put命令添加数据,注意:一次只能为一个表的一行数据的一个列,也就是一个单元格添加一个数据,所以直接用shell命令插入数据效率很低,在实际应用中,一般都是利用编程操作数据。插入数据和更新数据都是用put命令。
put 'student','95001','Sname','LiYing' #为student表添加了学号为95001,名字为LiYing的一行数据,其行键为95001
put 'student','95001','course:math','80' #为95001行下的course列族的math列添加了一个数据
删除数据
在HBase中用delete以及deleteall命令进行删除数据操作,它们的区别是:1. delete用于删除一个数据,是put的反向操作;2. deleteall操作用于删除一行数据。
delete 'student','95001','Ssex' #删除了student表中95001行下的Ssex列的所有数据
deleteall 'student','95001 ' #删除了student表中的95001行的全部数据。
查看数据
HBase中有两个用于查看数据的命令:1. get命令,用于查看表的某一行数据;2. scan命令用于查看某个表的全部数据。
get 'student','95001' #返回的是‘student’表‘95001’行的数据。
scan 'student' #返回的是‘student’表的全部数据
删除表
删除表有两步,第一步先让该表不可用,第二步删除表。
disable 'student' #让该表不可用
drop 'student' #删除表
查询表历史版本
create 'teacher',{NAME=>'username',VERSIONS=>5} #在创建表的时候,指定保存的版本数(假设指定为5)
get 'teacher','91001',{COLUMN=>'username',VERSIONS=>5} #查询时,指定查询的历史版本数。默认会查询出最新的数据。
exit #退出HBase数据库操作