前置条件:
需要在已经配置了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=进入hadoop命令 hadoop怎么进入hbase_数据JAVA_HOME/bin:进入hadoop命令 hadoop怎么进入hbase_vim_02HADOOP_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