但行好事
莫论前程❤

Hbase学习之初级shell命令

从表删除特定单元格

使用 delete 命令,可以在一个表中删除特定单元格。 delete 命令的语法如下:

delete ‘<table name>’, ‘<row>’, ‘<column name >’, ‘<time stamp>’

下面是一个删除特定单元格和例子。在这里,我们删除salary

hbase(main):006:0> delete 'emp', '1', 'personal data:city',
1417521848375
0 row(s) in 0.0060 seconds

删除表的所有单元格
使用deleteall命令,可以删除一行中所有单元格。下面给出是deleteall命令的语法。

deleteall ‘<table name>’, ‘<row>’

一. 简介

学习Hbase最直观的方式无非是通过Shell命令,本文作为基础入门篇总结回顾一下常用 Hbase Shell 命令的使用方法,后续会为大家介绍更多中高级命令的使用。

进入hbase命令行

./hbase shell

如果想看到更详细的信息,可以以Debug的方式进入,如下:

./hbase shell -d

在 Hbase Shell 命令行我们输入 help 就会返回Shell的命令列表和选项,如下:

hbase(main):001:0> help
HBase Shell, version 1.2.0-cdh5.7.0, rUnknown, Wed Mar 23 11:39:14 PDT 2016
Type 'help "COMMAND"', (e.g. 'help "get"' -- the quotes are necessary) for help on a specific command.
Commands are grouped. Type 'help "COMMAND_GROUP"', (e.g. 'help "general"') for help on a command group.

COMMAND GROUPS:
  Group name: general
  Commands: status, table_help, version, whoami

  Group name: ddl
  Commands: alter, alter_async, alter_status, create, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, list, locate_region, show_filters

  Group name: namespace
  Commands: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables

  Group name: dml
  Commands: append, count, delete, deleteall, get, get_counter, get_splits, incr, put, scan, truncate, truncate_preserve

  略...

可以看到,Shell 命令以默认以Group的方式进行定义划分,本文我们先讲解一下部分 Hbase 初级 Shell 命令的使用,后续将陆续展开详细介绍。

输入help ‘command’ (e.g. help “get”)可查看具体某一命令的使用方法;

输入help ‘command_group’(help “general”)可查看某一Group下命令的使用细则(不区分单引号双引号)。

例如想查看命令 ‘whoami’ 如何使用,输入如下指令即可:

hbase(main):007:0> help  "whoami"
Show the current hbase user.
Syntax : whoami
For example:

hbase> whoami

二. Shell Api 介绍

本文先主要举例详细讲解一下 general,ddl 组下 shell 命令的使用细则。

Group name: general

1. status

显示服务器的状态,例如:

hbase(main):009:0> status
1 active master, 1 backup masters, 10 servers, 0 dead, 86.3000 average load
还有三个开关:
  • status ‘simple’
    简述当前集群状态(Region 级),如下:
hbase(main):012:0> status 'simple'
active master:  OP-APM-01:16000 1525157496397
0 backup masters
4 live servers
    op-apm-06:16020 1525081437454
        requestsPerSecond=0.0, numberOfOnlineRegions=121, usedHeapMB=99, maxHeapMB=1979, numberOfStores=121, numberOfStorefiles=61, storefileUncompressedSizeMB=3721, storefileSizeMB=3751, compressionRatio=1.0081, memstoreSizeMB=0, storefileIndexSizeMB=0, readRequestsCount=361, writeRequestsCount=4117, rootIndexSizeKB=5774, totalStaticIndexSizeKB=4412, totalStaticBloomSizeKB=14118, totalCompactingKVs=198284, currentCompactedKVs=198284, compactionProgressPct=1.0, coprocessors=[]
 ... 
0 dead servers
Aggregate load: 1, regions: 483
  • status ‘summary’

默认值,同 status,如下:

hbase(main):014:0> status 'summary'
1 active master, 1 backup masters, 10 servers, 0 dead, 86.3000 average load
  • status ‘detailed’
    详细列出了当前集群状态,具体到表级,如:
hbase(main):014:0> status 'detailed'

另外还可以通过如下命令查看集群 Replication 状态:

hbase> status 'replication'
hbase> status 'replication', 'source'
hbase> status 'replication', 'sink'
2. whoami

显示Hbase当前的用户,如下:

hbase(main):022:0> whoami
hadoop (auth:SIMPLE)
    groups: hadoop
3. version

显示Hbase的版本,如下:

hbase(main):010:0> version
1.2.6, rUnknown, Mon May 29 02:25:32 CDT 2017
4. table_help

截至0.96,我们可以为一个表创建引用,也可以将现有的表指向某一引用,然后通过该引用对表进行增删改查操作,不必再写冗长的表名。如:

hbase> t = create 'test', 'cf'
hbase> t = get_table 'test'
t.put 'r', 'cf:q', 'v'

Group name: ddl

1. list

列出Hbase中已有的表,语法如下:

 hbase> list
 hbase> list 'abc.*'     
 hbase> list 'ns:abc.*'
 hbase> list 'ns:.*'

且支持正则匹配,如下:

hbase(main):054:0> list 'monitor_bas.*'
TABLE                                                                                           monitor_base                                                                                      monitor_base_2                                                                                    monitor_base_test                                                                               monitor_base_test_snappy                                                                                                                                             
4 row(s) in 0.0040 seconds
2. create

创建user表,包含info、data两个列族

默认 namespace=default

create 'user', 'info1', 'data1'
create 'user', {NAME => 'info', VERSIONS => '3'}   # 数字单引号可以省略
create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}     # 指定命名空间
create 't1',   {NAME => 'info', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
报错 ERROR: Unknown namespace ns1:t1!
原因: 未创建namespace

在HBase中,namespace命名空间指对一组表的逻辑分组,类似RDBMS中的database,方便对表在业务上划分。Apache HBase从0.98.0, 0.95.2两个版本开始支持namespace级别的授权操作,HBase全局管理员可以创建、修改和回收namespace的授权。

HBase系统默认定义了两个缺省的namespace

  • hbase:系统内建表,包括namespace和meta表
  • default:用户建表时未指定namespace的表都创建在此

创建namespace: hbase>create_namespace 'ns1'

删除namespace: hbase>drop_namespace 'ai_ns'

查看namespace: hbase>describe_namespace 'ns1'

列出所有namespace: hbase>list_namespace

在namespace下建表: hbase>create 'ns1:applicationIndex', 'info'

查看namespace下的表: hbase>list_namespace_tables 'ns1'

3. exists

建好表之后,我们可以即刻检查一下该表是否存在,语法如下:

hbase> exists 't1'
hbase> exists 'ns1:t1'
hbase(main):009:0> exists 't1'
Table t1 does exist                                                                                                                                                                            
0 row(s) in 0.2470 seconds

可见,我们刚才建的t1表已经存在,如果Hbase中表数量比较少时我们可以通过list命令查看。

4. describe

通过该命令可以查看表的描述信息。

hbase> describe 't1'
hbase> describe 'ns1:t1'

可简写为:

hbase> desc 't1'
hbase> desc 'ns1:t1'
5. is_enabled

检查表是否启用。

hbase> is_enabled 't1'
hbase> is_enabled 'ns1:t1'
6. is_disabled

检查表是否被禁用。

hbase> is_disabled 't1'
hbase> is_disabled 'ns1:t1'
7. show_filters

显示Hbase中的过滤器列表。

hbase(main):021:0> show_filters
ColumnPrefixFilter                                                                               
TimestampsFilter                                                                                 
PageFilter                                                                                       
MultipleColumnPrefixFilter                                                                      
略...                                  
8. alter

通过该命令,可以对Hbase表和列族就行修改,如新增一个列族、修改表属性,增加协处理器等等,更多操作后续我们会专门整理为文章进行详细阐述,此处只进行入门简述。

#单列族,改变表t1最大版本数为1:hbase> alter 't1', NAME => 'f1', VERSIONS => 1b. 多列族同时修改,{} 括起来
hbase> alter 't1', 'f1', {NAME => 'f2', IN_MEMORY => true}, {NAME => 'f3', VERSIONS => 5}例:
hbase(main):029:0> alter 't1', NAME => 'f1', VERSIONS => 1
Updating all regions with the new schema...
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 3.7570 seconds
9. alter_status

可以给出alter命令的状态。

hbase> alter_status 't1'
hbase> alter_status 'ns1:t1'
10. alter_async

不管alter是否完成,这个命令不等待所有region获得模式的改变。

hbase(main):004:0> alter_async 't1',{NAME => 'f1',TTL => '10000'}
0 row(s) in 1.8540 seconds注:可通过alter_status查出alter命令的状态。
11. disable

为了删除或更改而禁用表,语法如下:

hbase> disable 't1'
hbase> disable 'ns1:t1'
12. disable_all

可通过正则匹配表达式禁用表,语法如下:

hbase> disable_all 't.*'
hbase> disable_all 'ns:t.*'
hbase> disable_all 'ns:.*'注意小数点
13. enable

启用被禁用的表,语法如下:

hbase> enable 't1'
hbase> enable 'ns1:t1'
14. enable_all

启用匹配正则表达式的所有表,语法如下:

hbase> enable_all 't.*'
hbase> enable_all 'ns:t.*'
hbase> enable_all 'ns:.*'注意小数点。
15. drop

删除表,前提是要disable表,语法如下:

hbase> drop 't1'
hbase> drop 'ns1:t1'
16. drop_all

删除匹配正则表达式的所有表,语法如下:

hbase> drop_all 't.*'
hbase> drop_all 'ns:t.*'
hbase> drop_all 'ns:.*'注意小数点。
17. locate_region

指定表和rowkey返回该rowkey所在的region信息,语法如下:

hbase> locate_region 'tableName', 'key0'

例:
hbase(main):030:0> locate_region 'xcar_suggest_item_test','r1'
HOST                            REGION                                                                                                                                        
 yq-hadoop184194:60020          {ENCODED => 6f5e22b9bef0f537e0e8a086cbcb03b5, 
 NAME => 'xcar_suggest_item_test,,1523181823333.6f5e22b9bef0f537e0e8a086cbcb03b5.', 
 STARTKEY => '', ENDKEY => ''}  

1 row(s) in 0.0100 seconds
18. get_table

返回给定表的一个引用,可通过该引用操作表,语法如下:

hbase> t1 = get_table 't1'
hbase> t1 = get_table 'ns1:t1'

19.增删改查:

#向user表中插入信息,row key为rk0001,列族info中添加name列标示符,值为zhangsan
put 'user', 'rk0001', 'info:name', 'zhangsan'

#向user表中插入信息,row key为rk0001,列族info中添加gender列标示符,值为female
put 'user', 'rk0001', 'info:gender', 'female'

#向user表中插入信息,row key为rk0001,列族info中添加age列标示符,值为20
put 'user', 'rk0001', 'info:age', 20

#向user表中插入信息,row key为rk0001,列族data中添加pic列标示符,值为picture
put 'user', 'rk0001', 'data:pic', 'picture'

#获取user表中row key为rk0001的所有信息
get 'user', 'rk0001'

#获取user表中row key为rk0001,info列族的所有信息
get 'user', 'rk0001', 'info'

#获取user表中row key为rk0001,info列族的name、age列标示符的信息
get 'user', 'rk0001', 'info:name', 'info:age'

#获取user表中row key为rk0001,info、data列族的信息
get 'user', 'rk0001', 'info', 'data'
get 'user', 'rk0001', {COLUMN => ['info', 'data']}

get 'user', 'rk0001', {COLUMN => ['info:name', 'data:pic']}

#获取user表中row key为rk0001,列族为info,版本号最新5个的信息
get 'user', 'rk0001', {COLUMN => 'info', VERSIONS => 2}
get 'user', 'rk0001', {COLUMN => 'info:name', VERSIONS => 5}
get 'user', 'rk0001', {COLUMN => 'info:name', VERSIONS => 5, TIMERANGE => [1392368783980, 1392380169184]}
===============================================================================
#获取user表中row key为rk0001,cell的值为zhangsan的信息
get 'people', 'rk0001', {FILTER => "ValueFilter(=, 'binary:图片')"}

#获取user表中row key为rk0001,列标示符中含有a的信息
get 'people', 'rk0001', {FILTER => "(QualifierFilter(=,'substring:a'))"}

put 'user', 'rk0002', 'info:name', 'fanbingbing'
put 'user', 'rk0002', 'info:gender', 'female'
put 'user', 'rk0002', 'info:nationality', '中国'
get 'user', 'rk0002', {FILTER => "ValueFilter(=, 'binary:中国')"}


#查询user表中的所有信息
scan 'user'

#查询user表中列族为info的信息
scan 'user', {COLUMNS => 'info'}
scan 'user', {COLUMNS => 'info', RAW => true, VERSIONS => 5}
scan 'persion', {COLUMNS => 'info', RAW => true, VERSIONS => 3}
#查询user表中列族为info和data的信息
scan 'user', {COLUMNS => ['info', 'data']}
scan 'user', {COLUMNS => ['info:name', 'data:pic']}


#查询user表中列族为info、列标示符为name的信息
scan 'user', {COLUMNS => 'info:name'}

#查询user表中列族为info、列标示符为name的信息,并且版本最新的5个
scan 'user', {COLUMNS => 'info:name', VERSIONS => 5}

#查询user表中列族为info和data且列标示符中含有a字符的信息
scan 'user', {COLUMNS => ['info', 'data'], FILTER => "(QualifierFilter(=,'substring:a'))"}

#查询user表中列族为info,rk范围是[rk0001, rk0003)的数据
scan 'people', {COLUMNS => 'info', STARTROW => 'rk0001', ENDROW => 'rk0003'}

#查询user表中row key以rk字符开头的
scan 'user',{FILTER=>"PrefixFilter('rk')"}

#查询user表中指定范围的数据
scan 'user', {TIMERANGE => [1392368783980, 1392380169184]}

#删除数据
#删除user表row key为rk0001,列标示符为info:name的数据
delete 'people', 'rk0001', 'info:name'
#删除user表row key为rk0001,列标示符为info:name,timestamp为1392383705316的数据
delete 'user', 'rk0001', 'info:name', 1392383705316


#清空user表中的数据
truncate 'people'


#修改表结构
#首先停用user表(新版本不用)
disable 'user'

#添加两个列族f1和f2
alter 'people', NAME => 'f1'
alter 'user', NAME => 'f2'
#启用表
enable 'user'


###disable 'user'(新版本不用)
#删除一个列族:
alter 'user', NAME => 'f1', METHOD => 'delete' 或 alter 'user', 'delete' => 'f1'

#添加列族f1同时删除列族f2
alter 'user', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}

#将user表的f1列族版本号改为5
alter 'people', NAME => 'info', VERSIONS => 5
#启用表
enable 'user'


#删除表
disable 'user'
drop 'user'


get 'person', 'rk0001', {FILTER => "ValueFilter(=, 'binary:中国')"}
get 'person', 'rk0001', {FILTER => "(QualifierFilter(=,'substring:a'))"}
scan 'person', {COLUMNS => 'info:name'}
scan 'person', {COLUMNS => ['info', 'data'], FILTER => "(QualifierFilter(=,'substring:a'))"}
scan 'person', {COLUMNS => 'info', STARTROW => 'rk0001', ENDROW => 'rk0003'}

scan 'person', {COLUMNS => 'info', STARTROW => '20140201', ENDROW => '20140301'}
scan 'person', {COLUMNS => 'info:name', TIMERANGE => [1395978233636, 1395987769587]}
delete 'person', 'rk0001', 'info:name'

alter 'person', NAME => 'ffff'
alter 'person', NAME => 'info', VERSIONS => 10


get 'user', 'rk0002', {COLUMN => ['info:name', 'data:pic']}
赞(0) 打赏
未经允许不得转载:刘鹏博客 » Hbase学习之初级shell命令
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏