1. HBASE命令
1.1 namespace概述
在HBase中,namespace命名空间指对一组表的逻辑分组,类似RDBMS中的database,方便对表在业务上划分。Apache HBase从0.98.0,0.95.2两个版本开始支持namespace级别的授权操作,HBase全局管理员可以创建、修改和回收namespace的授权。
HBase系统默认定义了两个缺省的namespace:
- hbase:系统内建表,包括namespace和meta表
- default:用户建表时未指定namespace的表都创建在此
1.2 命令的进退
1、hbase提供了一个shell的终端给用户交互
hbase shell
image2、如果退出执行quit命令
[图片上传中...(image-cc9398-1637142344151-20)]
1.3 基本操作命令
image.png具体实例:
1、查看HBase运行状态 status
image2、创建表 create <table>,{NAME => <family>, VERSIONS => <VERSIONS>}
创建一个User表,并且有一个info列族
[图片上传中...(image-8387f2-1637142344151-18)]
3、查看所有表 list
[图片上传中...(image-271644-1637142344151-17)]
4、描述表详情 describe 'User'
[图片上传中...(image-ad6089-1637142344151-16)]
5、判断表是否存在 exists 'User'
[图片上传中...(image-eee62b-1637142344151-15)]
6、启用或禁用表 is_disabled 'User' is_enabled 'User'
[图片上传中...(image-fccdbf-1637142344151-14)]
7、添加记录,即插入数据,语法:put <table>,<rowkey>,<family:column>,<value>
[图片上传中...(image-bbb9c4-1637142344151-13)]
8、根据rowKey查询某个记录,语法:get <table>,<rowkey>,[<family:column>, ...]
[图片上传中...(image-e1e538-1637142344151-12)]
9、查询所有记录,语法:scan <table>,{COLUMNS => [family:column, ...], LIMIT => num}
扫描所有记录
[图片上传中...(image-146e79-1637142344151-11)]
扫描前2条
[图片上传中...(image-82b17f-1637142344151-10)]
范围查询
[图片上传中...(image-329fa5-1637142344151-9)]
另外,还可以添加TIMERANGE和FILTER等高级功能,STARTROW、ENDROW必须大写,否则报错,查询结果不包含等于ENDROW的结果集。
10、统计表记录数,语法:count <table>, {INTERVAL => intervalNum,CACHE => cacheNum}
INTERVAL设置多少行显示一次及对应的rowkey,默认1000;CACHE每次去取的缓存区大小,默认是10,调整该参数可提高查询速度。
[图片上传中...(image-315792-1637142344151-8)]
11、删除
删除列
[图片上传中...(image-d538be-1637142344151-7)]
删除整行
[图片上传中...(image-c59f23-1637142344151-6)]
删除表中所有数据
[图片上传中...(image-7fa3a7-1637142344151-5)]
12、禁用或启用表
禁用表
[图片上传中...(image-4d28ff-1637142344151-4)]
启用表
[图片上传中...(image-d435f6-1637142344151-3)]
12、删除表
删除前,必须先disable
[图片上传中...(image-7f6bbe-1637142344150-2)]
1.4 批量命令
1.4.1 bulkload
bulkload为hbase的批量插入命令,应用于大数据量的插入,没有性能问题
<pre style="margin: 0px; padding: 0px; overflow: auto; font-family: "Courier New"; font-size: 12px; overflow-wrap: break-word;">hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \ -Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=1024
hdfs:///hfile_path
hbase_namespace:table_name</pre>
1.4.2 bulkload应用
业务场景:Hive离线计算好的数据,需要同步到HBase供在线业务查询,思路是用HBase自带的ImportTsv工具。
Hive跑批:
建表语句,要用文本格式,即Tsv格式,分割符可以自己定义:
[[图片上传中...(image-e39a29-1637142344144-1)]](javascript:void(0); "复制代码")
<pre style="margin: 0px; padding: 0px; overflow: auto; font-family: "Courier New"; font-size: 12px; overflow-wrap: break-word;">CREATE TABLE IF NOT EXISTS tableA(
rowkey STRING,
...
)
PARTITIONED BY (dt STRING) -- format: 2020-07-28 ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;</pre>
[[图片上传中...(image-a49dd9-1637142344144-0)]](javascript:void(0); "复制代码")
跑批语句,注意设置不要compress,否则ImportTsv工具无法识别
<pre style="margin: 0px; padding: 0px; overflow: auto; font-family: "Courier New"; font-size: 12px; overflow-wrap: break-word;">SET hive.exec.compress.output=false;
INSERT OVERWRITE TABLE tableA
PARTITION( tx_date = "$CALC_DATE" )
SELECT ..</pre>
生成中间的HFile
<pre style="margin: 0px; padding: 0px; overflow: auto; font-family: "Courier New"; font-size: 12px; overflow-wrap: break-word;">hbase --config config_dir org.apache.hadoop.hbase.mapreduce.ImportTsv \ -Dmapreduce.job.queuename=queue \ -Dimporttsv.bulk.output=hdfs:///hfile_path
-Dimporttsv.columns="HBASE_ROW_KEY,column_family:column_name.."
hbase_namespace:table_name
hdfs://hive_table_dir</pre>
说明:config_dir是hbase的配置目录,里面包含hbase-site.xml,这个步骤ImportTsv会去读取hive_table_dir中的文件,并分析hbase table的region分布,生成对应region的hfile,放到hfile_path中
bulkload
<pre style="margin: 0px; padding: 0px; overflow: auto; font-family: "Courier New"; font-size: 12px; overflow-wrap: break-word;">hbase --config config_dir org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles
hdfs:///hfile_path
hbase_namespace:table_name</pre>
说明:
- Hive表必须是带分隔符的文本格式,而且不能压缩(比如启用了mapreduce的output snappy压缩也不行)
- ImportTsv可以直接一条条插入hbase,这时mapper解析一条,就插入一条,没有reduce阶段;相比bulkload,大批量数据性能不好
- bulkload的优点是快,生成的hfile直接注册到region server,数据对应用立即可见,没有wal log,没有flush;
网友评论