一、hbase shell基本命令
- 判断表存在与否
exists 'tablename'
- 使用通配符的方式列出所有表
list 'abc.*'
- 查看HBase 的版本
version
- 查看HBase 的状态
status
- 查看HBase 帮助文档
help
- 创建一个表user,列族为baseinfo,privateinfo
create 'user',{NAME=>'baseinfo'},{NAME=>'privateinfo'}
- 查看user 表信息
desc 'user'
- 查看全部表数据
scan 'user'
- 向user 表中插入数据
put 'user','002','baseinfo:name','kitty'
put 'user','002','baseinfo:age',18
put 'user','002','privateinfo:tall','1.8'
put 'user','002','privateinfo:health','good'
put 'user','001','baseinfo:name','hello'
put 'user','001','baseinfo:age',20
put 'user','001','privateinfo:tall','1.75'
put 'user','001','privateinfo:health','good'
put 'user','003','baseinfo:name','dava'
put 'user','003','baseinfo:age',25
put 'user','003','privateinfo:tall','1.8'
put 'user','003','privateinfo:health','bad'
- 根据rowkey 获取数据
get 'user','001'
get 'user','002'
- 获取指定CF 数据的两种方式
get 'user','001','baseinfo'
get 'user','001',{COLUMNS=>['baseinfo']}
- 获取指定列的数据
get 'user','001',{COLUMNS=>['baseinfo:name']}
- 更新数据
put 'user','001','baseinfo:name','jack'
- 修改多版本存储
alter 'user',NAME=>'baseinfo',VERSIONS=>5
- 多版本数据查询
get 'user','001',{COLUMNS=>['baseinfo:name'],VERSIONS=>5}
- 全扫描
scan 'user','{COLUMNS=>['baseinfo:name'],VERSIONS=>5}'
- 指定rowkey 范围查询
scan 'user',{STARTROW=>'001',STOPROW=>'002'}
- 统计user 表中数据个数
count 'user'
- 删除整行
deleteall 'user','001'
- 删除一个单元格的值(等同于下文删除一列,可以在末尾加上时间戳)
delete 'user','002','baseinfo:name',1595243355670
- 删除一列(无法直接删除某一列簇下的具体某一整个列(字段), 必须要指定某一rowkey,删除某一rowkey某一列簇下具体某一字段,等同于只删了这一单元格)
delete 'user','002','privateinfo:tall'
- 删除一个列族数据
alter'user','delete'=>'baseinfo'
- 启动user 表
enable 'user'
- 禁用表
disable 'usr'
- 查看表是否可用
is_disabled 'user'
- 清空表
truncate 'user'
- 删除user 表(删除表之前要禁用)
drop 'user'
- compact 一个表的所有regions
compact 't1'
- compact 某个空闲的region
compact 'r1'
- compact 一个region 中的某个列族
compact 'r1', 'c1'
- compact 一个表中的某个列族
compact 't1', 'c1'
- 创建一张表,并写入数据,使用flush 命令刷出整个表
创建一个表students,列族为baseinfo,privateinfo
create 'students', {NAME=>'baseinfo'}, {NAME=>'privateinfo'}
向students 表中插入数据
put 'students', 'jsmith', 'baseinfo:city', 'montreal'
put 'students', 'jsmith', 'baseinfo:state', 'ON'
put 'students', 'jsmith', 'privateinfo:date', '2015-12-19'
- 使用flush 命令,刷出(32)中表的某一个列族
刷出整个表
flush 'students'
刷出某一个列族
flush 'privateinfo'
二、将本地表数据批量导入到hbase中
- 根据表结构创建表:
create 'customer',{NAME=>'order'}
-
将表数据 hbase_import_data.csv 上传至linux /opt/datatmp/ 目录下
-
导入文档数据(\表示换行,在linux下直接导入,不是通过hbase shell)
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv \
-Dimporttsv.separator=, \
-Dimporttsv.columns="HBASE_ROW_KEY,order:numb,order:date" \
customer file:///opt/datatmp/hbase_import_data.csv
注:在 -Dimporttsv.columns="…" 中,根据表数据将第一列作为 rowkey ,其他列要根据 列簇名:字段名 一 一对应,所有列都要匹配上
三、hbase与hive映射
在HBase 中创建学生成绩表并映射为hive 表,字段为 id,name,score
在HBase 中插入学生数据,在hive 中统计学生成绩大于85 的学生个数
- 首先需在hbase中创建表结构:
hbase shell 命令行:
create 'student',{NAME=>'stuInfo'}
- 在hive中创建表映射到hbase中:
hive命令行:
create external table student(
id int,
name string,
score int
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with
serdeproperties
(
"hbase.columns.mapping"=":key,stuInfo:name,stuInfo:score"
)
tblproperties("hbase.table.name"="student")
;
注:在 hbase.columns.mapping="…" 中,根据表数据将第一列作为 rowkey ,其他列要根据 列簇名:字段名 一 一对应,所有列都要匹配上
插入数据:
insert into student values
(1,'kitty',88),
(2,'youmi',80),
(3,'mystic',100);
查询数据:
select * from student;
统计成绩大于85分的学生个数:
select count(score) from student where score>85;
- 在HBase中查看表数据:
scan 'student'