HBase介绍

HBase以列作为存储,每一列的列名可以是单一个,也可以是一个列族,列族即是一个列名下还可以有多个子列名,比如score列名下还可以有English,Math,Computer等子列名,使用时形同score:English,score:Math等,可以说非常的恶心人。
HBas以行键,列族,列限定符(列名),时间戳四个变量来定位唯一的单元格,其中列族和列限定符可以合并为 列族:列名。删除某个特定位置的数据时,都需要指定这四个参数。而增加数据时会自动生成时间戳,所以可以不用指定。
image.png

1. 配置与安装

请看 :

安装完成后运行 HBASE 的一些报错bug

注意!

启动关闭Hadoop和HBase的顺序一定是:
启动Hadoop—>启动HBase—>关闭HBase—>关闭Hadoop

2.HBase 常用 Shell 命令

HBase是列数据库,所有数据都以列为单位进行存储,并且每个数据都通过行键和列名进行定位,就像直角坐标系一样,通过X、Y的值确定唯一的坐标。所以每条数据的行键和列名都是唯一的,你也可以通过行键或列名来读取某一行或某一列的所有数据。

1 创建表 create

HBase Shell 使用create命令创建新表,具体如下:

  1. create 'student','Sname','Ssex','Sage','Sdept','course'

其中 create 关键字后的第一个参数为表名,后续的其他参数为表的列名即属性。
此时,即创建了一个“student”表,属性有:Sname,Ssex,Sage,Sdept,course。
image.png
因为HBase的表中会有一个系统默认的属性作为行键,无需自行创建,默认为put命令(put为HBase添加新的行数据,在后续介绍)操作中表名后第一个数据。创建完“student”表后,可通过describe命令查看“student”表的基本信息。命令执行截图如下:
image.png

2 删除表

注意:删除表有两步,第一步先让该表不可用,第二步删除表。
image.png

列出所有表

直接使用 list 命令即可。
image.png

清空表数据truncate

image.png
注:清空表的操作顺序为先 disable,然后再 truncate。
注:在HBase Shell中会自动帮我们disable,但是在Java编程中还是需要手动先disable才能truncate

3 HBase增删改查

本小节主要介绍HBase的增、删、改、查操作。在添加数据时,HBase会自动为添加的数据添加一个时间戳,故在需要修改数据时只需直接添加数据,HBase即会生成一个新的版本,从而完成“改”操作,旧的版本依旧保留,系统会定时回收垃圾数据,只留下最新的几个版本,保存的版本数可以在创建表的时候指定。

查看数据

HBase中有两个用于查看数据的命令:1. get命令,用于查看表的某一行数据;2. scan命令用于查看某个表全部数据。

  1. get命令 (get ‘表名’, ‘行键’

image.png

  1. scan命令( scan ‘表名’

image.png

添加数据

HBase中用 put 命令添加数据,注意:一次只能为一个表的一行数据的一个列,也就是一个单元格添加一个数据所以直接用shell命令插入数据效率很低,在实际应用中,一般都是利用编程操作数据。
当运行命令:put ‘student’,’95001’,’Sname’,’LiYing’时,put命令后的第一个参数即为数据的行键,Sname则指定列名,行键和列名定位到唯一的单元格插入数据,即为student表添加了学号为95001,名字为LiYing的一行数据,其行键为95001。
HBase先指定要插入到哪一行,然后指定要插入到这行的哪一列族:列限定符上。
image.png
可以以 列族:列限定符 来指定添加的具体列。如果列族下没有其他子列,则可以直接使用列族名。

删除数据

在HBase中用delete以及deleteall命令进行删除数据操作,它们的区别是:1. delete用于删除一个数据,是put的反向操作;2. deleteall操作用于删除一行数据。
1. delete命令
image.png
delete 命令后的第一个参数指定表明,后续两个参数分别指定行键和列名,定位唯一的单元格,然后删除数据。

2. deleteall命令
image.png
deleteall命令直接删除一行数据,所以只要指定表名和行键即可。

更新数据并查询历史数据

前面说到了,HBase会管理新旧版本,每次查询默认是最新的数据,所以更新可以直接用put命令。
使用 put 更新数据,需要两步:
1、在创建表的时候,指定保存的版本数(假设指定为5)

  1. create 'teacher',{NAME=>'username',VERSIONS=>5}

其中 { } 内的 NAME 表示列名,VERSION 表示HBase会记录的版本数量,一旦超过这个阈值就会自动删除最旧的数据。
2、插入数据然后更新数据,使其产生历史版本数据,注意:这里插入数据和更新数据都是用put命令

  1. put 'teacher','91001','username','Mary'
  2. put 'teacher','91001','username','Mary1'
  3. put 'teacher','91001','username','Mary2'
  4. put 'teacher','91001','username','Mary3'
  5. put 'teacher','91001','username','Mary4'
  6. put 'teacher','91001','username','Mary5'

3、查询时,指定查询的历史版本数。默认会查询出最新的数据。(有效取值为1到5)

  1. get 'teacher','91001',{COLUMN=>'username',VERSIONS=>5}

其中 { } 里的 COLUMN 指定列名,VERSION 表示查询几个版本的数据。
image.png
可以看到,VERSION指定5则查询最新的5个版本的数据,3则是最新的三个版本数据。

shell命令参数

(create和alter命令中)NAME => 指定列族,(get命令中)COLUMN => 指定具体列名 (列名包括列族和列限定符),TIMERANGE => 指定时间范围,VERSION => 指定版本