文章目录

  • 需求
  • 创建表
  • 添加数据
  • 查看添加的数据
  • 更新操作
  • 删除操作
  • 执行command文件
  • 计数操作
  • 扫描操作


需求

有以下订单数据,我们想要将这样的一些数据保存到HBase中。

hbase shell put hbase shell put 命令写入几条数据_表名

创建表

  1. 启动HBase Shell:hbase shell
  2. 创建表
    语法:create ‘表名’,‘列蔟名1’,‘列蔟名2’…

创建订单表,表名为ORDER_INFO,该表有一个列蔟为C1

create 'ORDER_INFO','C1';
  1. 查看表:list
  2. 删除表
    要删除某个表,必须要先禁用表
  • 禁用表:disable "表名"
  • 删除表:drop "表名"

添加数据

  • 需求:
  • PUT操作
    HBase中的put命令,可以用来将数据保存到表中。但put一次只能保存一个列的值。
put 'ORDER_INFO','000001','C1:ID','000001'
put 'ORDER_INFO','000001','C1:STATUS','已提交'
put 'ORDER_INFO','000001','C1:PAY_MONEY',4070
put 'ORDER_INFO','000001','C1:PAYWAY',1
put 'ORDER_INFO','000001','C1:USER_ID',4944191
put 'ORDER_INFO','000001','C1:OPERATION_DATE','2020-04-25 12:09:16'
put 'ORDER_INFO','000001','C1:CATEGORY','手机;'

查看添加的数据

  • 语法:get ‘表名’,‘rowkey’
将rowkey为:000001对应的数据查询出来:
get 'ORDER_INFO','000001'
  • 显示中文
    在HBase shell中,如果在数据中出现了一些中文,默认HBase shell中显示出来的是十六进制编码。要想将这些编码显示为中文,我们需要在get命令后添加一个属性:{FORMATTER => ‘toString’}
get 'ORDER_INFO','000001', {FORMATTER => 'toString'}

更新操作

语法:put ‘表名’, ‘rowkey’, ‘列族:列’, ‘更新值’
将订单ID为000001的状态,更改为已付款

put 'ORDER_INFO', '000001', 'C1:STATUS', '已付款'

注:

  • HBase中会自动维护数据的版本
  • 每当执行一次put后,都会重新生成新的时间戳

删除操作

  • 删除列
    语法:delete ‘表名’, ‘rowkey’, ‘列蔟:列’

注意:此处HBase默认会保存多个时间戳的版本数据,所以这里的delete删除的是最新版本的列数据。

删除ORDER_INFO表的STATUS列
delete 'ORDER_INFO','000001','C1:STATUS'
  • 删除整行
    格式:deleteall ‘表名’,‘rowkey’
删除制定订单:
deleteall 'ORDER_INFO','000001'
  • 清空表
    格式:truncate “表名”
清空ORDER_INFO的所有数据:
truncate 'ORDER_INFO'

执行command文件

  • 将该数据集文件上传到指定的目录中
  • 执行
hbase shell /export/software/ORDER_INFO.txt

计数操作

格式:count ‘表名’

查看ORDER_INFO表有多少条数据:
count 'ORDER_INFO'

补充:大量数据的计数统计
格式:$HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter ‘表名’

1.启动YARN集群
start-yarn.sh
2.启动history server
mr-jobhistory-daemon.sh start historyserver
3.执行MR JOB
$HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'ORDER_INFO'

扫描操作

语法:scan ‘表名’
注:get是查看某一行数据,scan是全表扫描

扫描ORDER_INFO表:
scan 'ORDER_INFO',{FORMATTER => 'toString'}
注:要避免scan一张大表

扫描ORDER_INFO表(只显示三条):
scan 'ORDER_INFO', {LIMIT => 3, FORMATTER => 'toString'}

只查询订单状态以及支付方式,并且只展示3条数据:
scan 'ORDER_INFO', {LIMIT => 3, COLUMNS => ['C1:STATUS', 'C1:PAYWAY'], FORMATTER => 'toString'}

根据ROWKEY来查询对应的数据,ROWKEY为02602f66-adc7-40d4-8485-76b5632b5b53,只查询订单状态、支付方式,并以中文展示:
scan 'ORDER_INFO', {ROWPREFIXFILTER => '02602f66-adc7-40d4-8485-76b5632b5b53', COLUMNS => ['C1:STATUS', 'C1:PAYWAY'], FORMATTER => 'toString'}