HBase数据模型
在HBASE中,数据存储在具有行和列的表中。这是看起来关系数据库(RDBMS)一样,但将HBASE表看成是多个维度的Map结构更容易理解。
在HBase WebUI(http://node3:16010中可以查看到目前HBase中的表)
例如:存储网站域。如行键是域,则应该将域名反转后存储(org.apache.www、org.apache.mail、org.apache.jira)。这样,所有Apache域都在表中存储在一起,而不是根据子域的第一个字母展开。
列蔟(Column Family):
列标识符(Column Qualifier):
ROW | COLUMN+CELL |
---|---|
1250995 | column=C1:ADDRESS, timestamp=1588591604729, value=\xC9\xBD\xCE\xF7\xCA |
1250995 | column=C1:LATEST_DATE, timestamp=1588591604729, value=2019-03-28 |
1250995 | column=C1:NAME, timestamp=1588591604729, value=\xB7\xBD\xBA\xC6\xD0\xF9 |
1250995 | column=C1:NUM_CURRENT, timestamp=1588591604729, value=398.5 |
1250995 | column=C1:NUM_PREVIOUS, timestamp=1588591604729, value=379.5 |
1250995 | column=C1:NUM_USEAGE, timestamp=1588591604729, value=19 |
1250995 | column=C1:PAY_DATE, timestamp=1588591604729, value=2019-02-26 |
1250995 | column=C1:RECORD_DATE, timestamp=1588591604729, value=2019-02-11 |
1250995 | column=C1:SEX, timestamp=1588591604729, value=\xC5\xAE |
1250995 | column=C1:TOTAL_MONEY, timestamp=1588591604729, value=114 |
Row Key | Time Stamp | ColumnFamily contents | ColumnFamily anchor | ColumnFamily people |
---|---|---|---|---|
“com.cnn.www” | t9 | anchor:cnnsi.com = “CNN” | ||
“com.cnn.www” | t8 | anchor:my.look.ca = “CNN.com” | ||
“com.cnn.www” | t6 | contents:html = “…” | ||
“com.cnn.www” | t5 | contents:html = “…” | ||
“com.cnn.www” | t3 | contents:html = “…” | ||
“com.example.www” | t5 | contents:html = “…” | people:author = “John Doe” |
我们可以以shell的方式来维护和管理HBase。例如:执行建表语句、执行增删改查操作等等。
HBase的shell其实是JRuby的IRB(交互式的Ruby),但在其中添加了一些HBase的命令。
hbase shell
create '表名','列蔟名'...
# 创建订单表,表名为ORDER_INFO,该表有一个列蔟为C1
create 'ORDER_INFO','C1'
注意:
HBase是没有schema的,就是在创建表的时候无需指定表中有哪些列,只需要指定有多少个列族
list
#删除ORDER_INFO表
disable "ORDER_INFO"
drop "ORDER_INFO"
详细解释:
disable "ORDER_INFO"
命令用于禁用指定表。当表被禁用后,该表上的所有操作都将无法执行,包括读取和写入数据。执行该命令后,可以使用is_disabled "ORDER_INFO"
命令来确认表是否已经禁用。禁用表的目的是为了在删除表之前先停止对该表的所有操作,以避免数据的丢失。
drop "ORDER_INFO"
命令用于彻底删除指定的表及其所有数据。执行该命令前,需要先使用disable "ORDER_INFO"
命令将该表禁用。执行该命令后,HBase将删除该表的所有数据和元数据,并将该表从集群中移除。需要注意的是,该命令执行后,将无法恢复已删除的数据,因此在执行该命令之前,请确保您已经备份了所有重要的数据。
put '表名','ROWKEY','列蔟名:列名','值'
也就是说一次只能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'
get 'ORDER_INFO','000001'
{FORMATTER => 'toString'}
get 'ORDER_INFO', '000001', {FORMATTER => 'toString'}
注:
put 'ORDER_INFO', '000001', 'C1:STATUS', '已付款'
注意:
delete '表名', 'rowkey', '列蔟:列'。
注意:此处HBase默认会保存多个时间戳的版本数据,所以这里的delete删除的是最新版本的列数据。
delete 'ORDER_INFO','000001','C1:STATUS'
deleteall '表名','rowkey'
deleteall 'ORDER_INFO','000001'
truncate "表名"
truncate 'ORDER_INFO'
我们有一份这样的HBase数据集,我们需要将这些指令放到HBase中执行,将数据导入到HBase中。
可以看到这些都是一堆的put语句。那么如何才能将这些语句全部执行呢?
hbase shell /export/software/ORDER_INFO.txt
查看HBase中的ORDER_INFO表,一共有多少条记录。
count命令专门用来统计一个表中有多少条数据。
count ‘表名’
注意:这个操作是比较耗时的。在数据量大的这个命令可能会运行很久。
count 'ORDER_INFO'
当HBase中数据量大时,可以使用HBase中提供的MapReduce程序来进行计数统计。
$HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter '表名'
具体步骤:
启动yarn集群
start-yarn.sh
启动history server
mr-jobhistory-daemon.sh start historyserver
$HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'ORDER_INFO'
通过观察YARN的WEB UI,我们发现HBase启动了一个名字为rowcounter_ORDER_INFO的作业。
scan '表名'
# {FORMATTER => 'toString'} 是一个可选参数,它指定了输出格式化器为 toString,该格式化器会将所有结果以字符串形式输出。
scan 'ORDER_INFO',{FORMATTER => 'toString'}
scan 命令用于扫描表,并将满足条件的行或列族返回。可以通过一些参数来指定扫描的范围、过滤条件、返回的列等。
例如:
scan 'ORDER_INFO'
:扫描 ORDER_INFO
表中的所有行。scan 'ORDER_INFO', {STARTROW => '000001', ENDROW => '000010'}
:扫描 ORDER_INFO
表中行键从 000001 到 0- 00010
的所有行。scan 'ORDER_INFO', {COLUMNS => 'C1:col1'}
:扫描 ORDER_INFO
表中 C1
列族下 col1
列的所有数据。scan 'ORDER_INFO', {FILTER => "SingleColumnValueFilter('C1', 'col1', =, 'binary:1000')"}
:扫描 ORDER_INFO
表中 C1
列族下 col1
列的值为 1000
的所有数据。在上述命令中,可以通过设置 LIMIT 参数来限制返回的行数,也可以通过设置 TIMERANGE 参数来限制返回的时间范围,以实现更精细的扫描。
注意:要避免scan一张大表!原因如下:
scan 'ORDER_INFO', {LIMIT => 3, FORMATTER => 'toString'}
scan 'ORDER_INFO', {LIMIT => 3, COLUMNS => ['C1:STATUS', 'C1:PAYWAY'], FORMATTER => 'toString'}
注意:
[‘C1:STATUS’, …]
在Ruby中[]表示一个数组scan '表名', {ROWPREFIXFILTER => 'rowkey'}
scan 'ORDER_INFO', {ROWPREFIXFILTER => '02602f66-adc7-40d4-8485-76b5632b5b53', COLUMNS => ['C1:STATUS', 'C1:PAYWAY'], FORMATTER => 'toString'}
在HBase中,如果要对海量的数据来进行查询,此时基本的操作是比较无力的。此时,需要借助HBase中的高级语法Filter来进行查询。
Filter可以根据列簇、列、版本等条件来对数据进行过滤查询。因为在HBase中,主键、列、版本都是有序存储的,所以借助Filter,可以高效地完成查询。
当执行Filter时,HBase会将Filter分发给各个HBase服务器节点来进行查询。
HBase中的过滤器也是基于Java开发的,只不过在Shell中,我们是使用基于JRuby的语法来实现的交互式查询。
以下是HBase 2.2的JAVA API文档:
在HBase的shell中,通过show_filters指令,可以查看到HBase中内置的一些过滤器。
hbase(main):028:0> show_filters
DependentColumnFilter
KeyOnlyFilter
ColumnCountGetFilter
SingleColumnValueFilter
PrefixFilter
SingleColumnValueExcludeFilter
FirstKeyOnlyFilter
ColumnRangeFilter
ColumnValueFilter
TimestampsFilter
FamilyFilter
QualifierFilter
ColumnPrefixFilter
RowFilter
MultipleColumnPrefixFilter
InclusiveStopFilter
PageFilter
ValueFilter
ColumnPaginationFilter
rowkey 过滤器 | RowFilter | 实现行键字符串的比较和过滤 |
---|---|---|
PrefixFilter | rowkey前缀过滤器 | |
KeyOnlyFilter | 只对单元格的键进行过滤和显示,不显示值 | |
FirstKeyOnlyFilter | 只扫描显示相同键的第一个单元格,其键值对会显示出来 | |
InclusiveStopFilter | 替代 ENDROW 返回终止条件行 | |
列过滤器 | FamilyFilter | 列簇过滤器 |
QualifierFilter | 列标识过滤器,只显示对应列名的数据 | |
ColumnPrefixFilter | 对列名称的前缀进行过滤 | |
MultipleColumnPrefixFilter | 可以指定多个前缀对列名称过滤 | |
ColumnRangeFilter | 过滤列名称的范围 | |
值过滤器 | ValueFilter | 值过滤器,找到符合值条件的键值对 |
SingleColumnValueFilter | 在指定的列蔟和列中进行比较的值过滤器 | |
SingleColumnValueExcludeFilter | 排除匹配成功的值 | |
其他过滤器 | ColumnPaginationFilter | 对一行的所有列分页,只返回 [offset,offset+limit] 范围内的列 |
PageFilter | 对显示结果按行进行分页显示 | |
TimestampsFilter | 时间戳过滤,支持等值,可以设置多个时间戳 | |
ColumnCountGetFilter | 限制每个逻辑行返回键值对的个数,在 get 方法中使用 | |
DependentColumnFilter | 允许用户指定一个参考列或引用列来过滤其他列的过滤器 |
Java API官方地址:https://hbase.apache.org/devapidocs/index.html
过滤器一般结合scan命令来使用。打开HBase的JAVA API文档。找到RowFilter的构造器说明,我们来看以下,HBase的过滤器该如何使用。
scan '表名', { Filter => "过滤器(比较运算符, '比较器表达式')” }
比较运算符 | 描述 |
---|---|
= | 等于 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
!= | 不等于 |
比较器 | 描述 |
---|---|
BinaryComparator | 匹配完整字节数组 |
BinaryPrefixComparator | 匹配字节数组前缀 |
BitComparator | 匹配比特位 |
NullComparator | 匹配空值 |
RegexStringComparator | 匹配正则表达式 |
SubstringComparator | 匹配子字符串 |
基本语法:比较器类型:比较器的值
比较器 | 表达式语言缩写 |
---|---|
BinaryComparator | binary:值 |
BinaryPrefixComparator | binaryprefix:值 |
BitComparator | bit:值 |
NullComparator | null |
RegexStringComparator | regexstring:正则表达式 |
SubstringComparator | substring:值 |
分析
通过上图,可以分析得到,RowFilter过滤器接受两个参数,
所以构建该Filter的时候,只需要传入两个参数即可
scan 'ORDER_INFO', {FILTER => "RowFilter(=,'binary:02602f66-adc7-40d4-8485-76b5632b5b53')"}
分析
需要传入四个参数:
注意:
HBase是无模式的,不会检查或验证列族或列名是否存在或拼写是否正确。如果列族或列名拼写错误,HBase不会报错,但是查询不会返回数据。因此,需要非常小心地输入列族和列名,并且在查询之前应该先验证它们是否正确。可以通过使用HBase Shell或HBase API来验证列族和列名是否正确。
scan 'ORDER_INFO', {FILTER => "SingleColumnValueFilter('C1', 'STATUS', =, 'binary:已付款')", FORMATTER => 'toString'}
分析
SingleColumnValueFilter('C1', 'PAYWAY', = , 'binary:1')
SingleColumnValueFilter('C1', 'PAY_MONEY', > , 'binary:3000')
scan 'ORDER_INFO', {FILTER => "SingleColumnValueFilter('C1', 'PAYWAY', = , 'binary:1') AND SingleColumnValueFilter('C1', 'PAY_MONEY', > , 'binary:3000')", FORMATTER => 'toString'}
注意:
HBase shell默认将所有输入都视为字符串类型,因此在比较数值类型时可能会出现问题。例如,将两个整数进行比较,它们将按字典序进行比较,而不是数值大小。这可能会导致不准确的结果。要避免这种情况,可以使用HBase shell提供的类型转换函数,例如toInt和toFloat,将字符串转换为相应的数值类型,以进行正确的比较。
该表格数据如下所示:
新闻ID | 访问次数 | 时间段 | ROWKEY |
---|---|---|---|
0000000001 | 12 | 00:00-01:00 | 0000000001_00:00-01:00 |
0000000002 | 12 | 01:00-02:00 | 0000000002_01:00-02:00 |
要求:原子性增加新闻的访问次数值。
注意:
导入测试数据:
# 创建表
create 'NEWS_VISIT_CNT', 'C1';
incr 'NEWS_VISIT_CNT','0000000001_00:00-01:00','C1:CNT',12
incr 'NEWS_VISIT_CNT','0000000002_01:00-02:00','C1:CNT',12
incr 'NEWS_VISIT_CNT','0000000003_02:00-03:00','C1:CNT',123
incr 'NEWS_VISIT_CNT','0000000004_00:00-01:00','C1:CNT',4
incr 'NEWS_VISIT_CNT','0000000005_01:00-02:00','C1:CNT',4
incr 'NEWS_VISIT_CNT','0000000006_02:00-03:00','C1:CNT',3
incr 'NEWS_VISIT_CNT','0000000007_01:00-02:00','C1:CNT',1
incr 'NEWS_VISIT_CNT','0000000008_02:00-03:00','C1:CNT',123
incr 'NEWS_VISIT_CNT','0000000009_00:00-01:00','C1:CNT',5
incr 'NEWS_VISIT_CNT','0000000010_01:00-02:00','C1:CNT',5
incr 'NEWS_VISIT_CNT','0000000011_00:00-01:00','C1:CNT',123
incr 'NEWS_VISIT_CNT','0000000012_01:00-02:00','C1:CNT',1
incr 'NEWS_VISIT_CNT','0000000013_02:00-03:00','C1:CNT',23
incr 'NEWS_VISIT_CNT','0000000014_01:00-02:00','C1:CNT',123
incr 'NEWS_VISIT_CNT','0000000015_02:00-03:00','C1:CNT',83
incr 'NEWS_VISIT_CNT','0000000016_00:00-01:00','C1:CNT',1
incr 'NEWS_VISIT_CNT','0000000017_01:00-02:00','C1:CNT',5
incr 'NEWS_VISIT_CNT','0000000018_01:00-02:00','C1:CNT',9
incr 'NEWS_VISIT_CNT','0000000019_02:00-03:00','C1:CNT',9
incr 'NEWS_VISIT_CNT','0000000020_01:00-02:00','C1:CNT',6
incr 'NEWS_VISIT_CNT','0000000021_02:00-03:00','C1:CNT',5
incr 'NEWS_VISIT_CNT','0000000022_00:00-01:00','C1:CNT',7
incr 'NEWS_VISIT_CNT','0000000023_01:00-02:00','C1:CNT',98
incr 'NEWS_VISIT_CNT','0000000024_00:00-01:00','C1:CNT',7
incr 'NEWS_VISIT_CNT','0000000025_01:00-02:00','C1:CNT',0
incr 'NEWS_VISIT_CNT','0000000026_02:00-03:00','C1:CNT',0
incr 'NEWS_VISIT_CNT','0000000027_01:00-02:00','C1:CNT',9
incr 'NEWS_VISIT_CNT','0000000028_02:00-03:00','C1:CNT',8
incr 'NEWS_VISIT_CNT','0000000029_01:00-02:00','C1:CNT',9
incr 'NEWS_VISIT_CNT','0000000030_02:00-03:00','C1:CNT',3
incr 'NEWS_VISIT_CNT','0000000031_00:00-01:00','C1:CNT',5
incr 'NEWS_VISIT_CNT','0000000032_01:00-02:00','C1:CNT',4
incr 'NEWS_VISIT_CNT','0000000033_02:00-03:00','C1:CNT',6
incr 'NEWS_VISIT_CNT','0000000034_01:00-02:00','C1:CNT',5
incr 'NEWS_VISIT_CNT','0000000035_02:00-03:00','C1:CNT',7
incr 'NEWS_VISIT_CNT','0000000036_00:00-01:00','C1:CNT',98
incr 'NEWS_VISIT_CNT','0000000037_01:00-02:00','C1:CNT',7
incr 'NEWS_VISIT_CNT','0000000038_00:00-01:00','C1:CNT',0
incr 'NEWS_VISIT_CNT','0000000039_01:00-02:00','C1:CNT',0
incr 'NEWS_VISIT_CNT','0000000040_02:00-03:00','C1:CNT',9
incr 'NEWS_VISIT_CNT','0000000041_01:00-02:00','C1:CNT',8
incr 'NEWS_VISIT_CNT','0000000042_02:00-03:00','C1:CNT',9
incr 'NEWS_VISIT_CNT','0000000043_00:00-01:00','C1:CNT',3
incr 'NEWS_VISIT_CNT','0000000044_01:00-02:00','C1:CNT',5
incr 'NEWS_VISIT_CNT','0000000045_01:00-02:00','C1:CNT',4
incr 'NEWS_VISIT_CNT','0000000046_02:00-03:00','C1:CNT',7
incr 'NEWS_VISIT_CNT','0000000047_01:00-02:00','C1:CNT',0
incr 'NEWS_VISIT_CNT','0000000048_02:00-03:00','C1:CNT',0
put 'NEWS_VISIT_CNT','0000000001_00:00-01:00','C1:TIME_RANGE','00:00-01:00'
put 'NEWS_VISIT_CNT','0000000002_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000003_02:00-03:00','C1:TIME_RANGE','02:00-03:00'
put 'NEWS_VISIT_CNT','0000000004_00:00-01:00','C1:TIME_RANGE','00:00-01:00'
put 'NEWS_VISIT_CNT','0000000005_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000006_02:00-03:00','C1:TIME_RANGE','02:00-03:00'
put 'NEWS_VISIT_CNT','0000000007_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000008_02:00-03:00','C1:TIME_RANGE','02:00-03:00'
put 'NEWS_VISIT_CNT','0000000009_00:00-01:00','C1:TIME_RANGE','00:00-01:00'
put 'NEWS_VISIT_CNT','0000000010_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000011_00:00-01:00','C1:TIME_RANGE','00:00-01:00'
put 'NEWS_VISIT_CNT','0000000012_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000013_02:00-03:00','C1:TIME_RANGE','02:00-03:00'
put 'NEWS_VISIT_CNT','0000000014_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000015_02:00-03:00','C1:TIME_RANGE','02:00-03:00'
put 'NEWS_VISIT_CNT','0000000016_00:00-01:00','C1:TIME_RANGE','00:00-01:00'
put 'NEWS_VISIT_CNT','0000000017_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000018_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000019_02:00-03:00','C1:TIME_RANGE','02:00-03:00'
put 'NEWS_VISIT_CNT','0000000020_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000021_02:00-03:00','C1:TIME_RANGE','02:00-03:00'
put 'NEWS_VISIT_CNT','0000000022_00:00-01:00','C1:TIME_RANGE','00:00-01:00'
put 'NEWS_VISIT_CNT','0000000023_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000024_00:00-01:00','C1:TIME_RANGE','00:00-01:00'
put 'NEWS_VISIT_CNT','0000000025_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000026_02:00-03:00','C1:TIME_RANGE','02:00-03:00'
put 'NEWS_VISIT_CNT','0000000027_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000028_02:00-03:00','C1:TIME_RANGE','02:00-03:00'
put 'NEWS_VISIT_CNT','0000000029_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000030_02:00-03:00','C1:TIME_RANGE','02:00-03:00'
put 'NEWS_VISIT_CNT','0000000031_00:00-01:00','C1:TIME_RANGE','00:00-01:00'
put 'NEWS_VISIT_CNT','0000000032_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000033_02:00-03:00','C1:TIME_RANGE','02:00-03:00'
put 'NEWS_VISIT_CNT','0000000034_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000035_02:00-03:00','C1:TIME_RANGE','02:00-03:00'
put 'NEWS_VISIT_CNT','0000000036_00:00-01:00','C1:TIME_RANGE','00:00-01:00'
put 'NEWS_VISIT_CNT','0000000037_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000038_00:00-01:00','C1:TIME_RANGE','00:00-01:00'
put 'NEWS_VISIT_CNT','0000000039_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000040_02:00-03:00','C1:TIME_RANGE','02:00-03:00'
put 'NEWS_VISIT_CNT','0000000041_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000042_02:00-03:00','C1:TIME_RANGE','02:00-03:00'
put 'NEWS_VISIT_CNT','0000000043_00:00-01:00','C1:TIME_RANGE','00:00-01:00'
put 'NEWS_VISIT_CNT','0000000044_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000045_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000046_02:00-03:00','C1:TIME_RANGE','02:00-03:00'
put 'NEWS_VISIT_CNT','0000000047_01:00-02:00','C1:TIME_RANGE','01:00-02:00'
put 'NEWS_VISIT_CNT','0000000048_02:00-03:00','C1:TIME_RANGE','02:00-03:00'
exit
该脚本创建了一个表,名为NEWS_VISIT_CNT,列蔟为C1。
并使用incr创建了若干个计数器,每个rowkey为:新闻的编号_时间段
。CNT为count的缩写,表示访问的次数。
hbase shell /export/software/NEWS_VISIT_CNT.txt
scan 'NEWS_VISIT_CNT', {LIMIT => 5, FORMATTER => 'toString'}
需求: 对0000000020新闻01:00 - 02:00访问计数+1
get_counter 'NEWS_VISIT_CNT','0000000020_01:00-02:00','C1:CNT'
此处,如果用get获取到的数据是这样的:
incr 'NEWS_VISIT_CNT','0000000020_01:00-02:00','C1:CNT'
get_counter 'NEWS_VISIT_CNT','0000000020_01:00-02:00','C1:CNT'
以下连接可以查看到所有HBase中支持的SHELL脚本。
例如:显示服务器状态
显示HBase当前用户,例如:
显示当前所有的表
统计指定表的记录数,例如:
展示表结构信息
检查表是否存在,适用于表量特别多的情况
检查表是否启用或禁用
该命令可以改变表和列蔟的模式,例如:
# 创建一个USER_INFO表,两个列蔟C1、C2
create 'USER_INFO', 'C1', 'C2'
# 新增列蔟C3
alter 'USER_INFO', 'C3'
# 删除列蔟C3
alter 'USER_INFO', 'delete' => 'C3'
注意:
禁用一张表/启用一张表
删除一张表,记得在删除表之前必须先禁用
清空表的数据,禁用表-删除表-创建表