Hbase 之 Shell 初级(一)

一. 简介

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

首先在搭建好Hbase集群之后,我们进入 Hbase Shell 命令行,如下:

$ ./bin/hbase shell
18/04/16 21:33:52 INFO Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.2.0-cdh5.7.0, rUnknown, Wed Mar 23 11:39:14 PDT 2016

hbase(main):001:0>

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

$ ./bin/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:  yq-hadoop57:60000 1520300829133
1 backup masters
    yq-hadoop29:60000 1520429670888
10 live servers
    yq-hadoop184133:60020 1521785119328
        requestsPerSecond=19.0, numberOfOnlineRegions=85, usedHeapMB=1727, maxHeapMB=3959, numberOfStores=100, numberOfStorefiles=128, storefileUncompressedSizeMB=191042, storefileSizeMB=44354, compressionRatio=0.2322, memstoreSizeMB=0, storefileIndexSizeMB=0, readRequestsCount=164988634, writeRequestsCount=10089338, rootIndexSizeKB=2212, totalStaticIndexSizeKB=54385, totalStaticBloomSizeKB=8799, totalCompactingKVs=276327149, currentCompactedKVs=276327149, compactionProgressPct=1.0, coprocessors=[CubeVisitService, Observer]
0 dead servers
Aggregate load: 698, regions: 863

  • 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'
    详细列出了当前集群状态,具体到表级,如:
"monitor_base_test,000152331479433158,1523413164030.df66f39d1868c19a27a588da8abb960c."
            numberOfStores=1, numberOfStorefiles=1, storefileUncompressedSizeMB=3595, lastMajorCompactionTimestamp=1523413165358, storefileSizeMB=3596, compressionRatio=1.0003, memstoreSizeMB=0, storefileIndexSizeMB=0, readRequestsCount=1166147, writeRequestsCount=213992, rootIndexSizeKB=2, totalStaticIndexSizeKB=3295, totalStaticBloomSizeKB=1792, totalCompactingKVs=16593376, currentCompactedKVs=16593376, compactionProgressPct=1.0, completeSequenceId=-1, dataLocality=1.0

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

hbase> status 'replication'
hbase> status 'replication', 'source'
hbase> status 'replication', 'sink'

2. whoami

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

hbase(main):022:0> whoami
root (auth:SIMPLE)
    groups: root

3. version

显示Hbase的版本,如下:

hbase(main):023:0> version
1.2.0-cdh5.7.0, rUnknown, Wed Mar 23 11:39:14 PDT 2016

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

创建一张新表,创建表必须指定一个列族,语法如下:

a. 创建表 t1,指定列族 f1,f2,默认 namespace=default

hbase(main):005:0> create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
可简写为:hbase(main):005:0> create 't1', 'f1', 'f2'

b. 指定表属性,如指定最大版本数(基于列族):

hbase(main):005:0> create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}

c. 同时指定多个属性

hbase(main):005:0> create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}

注:关于Hbase建表时所指定的属性还有很多,其中有基于列族指定的,也有基于整张表进行指定的,更详细的介绍我们后面会专门写篇公众号文章进行阐述,这里就不再赘述了。

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'

例:
hbase(main):011:0> desc 't1'
Table t1 is ENABLED                                                                                                                                                                            
t1                                                                                                                                                                                             
COLUMN FAMILIES DESCRIPTION                                                                                                                                                                    
{NAME => 'f1', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS
 => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}                                                                                                                 
{NAME => 'f2', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS
 => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}                                                                                                                 
2 row(s) in 0.0620 seconds

5. is_enabled

检查表是否启用。

hbase> is_enabled 't1'
hbase> is_enabled 'ns1:t1'

例:
hbase(main):014:0>  is_enabled 't1'
true                                                                                                                                                                                           
0 row(s) in 0.0240 seconds

6. is_disabled

检查表是否被禁用。

hbase> is_disabled 't1'
hbase> is_disabled 'ns1:t1'

例:
hbase(main):017:0> is_disabled 't1'
false                                                                                                                                                                                          
0 row(s) in 0.0170 seconds

7. show_filters

显示Hbase中的过滤器列表。

hbase(main):021:0> show_filters
ColumnPrefixFilter                                                                                                                                                                             
TimestampsFilter                                                                                                                                                                               
PageFilter                                                                                                                                                                                     
MultipleColumnPrefixFilter                                                                                                                                                                     

略...                                                                                                                                                                                    
 
注:hbase 的过滤器有很多,之后我们会进行详细介绍,此处不再赘述。
8. alter

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

a. 单列族,改变表t1最大版本数为1:
hbase> alter 't1', NAME => 'f1', VERSIONS => 1

b. 多列族同时修改,{} 括起来
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'

例:
hbase(main):030:0> alter_status 't1'
1/1 regions updated.
Done.
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'

(未完待续 。。。)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,310评论 0 5
  • 1. HBase介绍,Hbase是什么? HBase -- Hadoop Database ,是一个高可靠、高性能...
    奉先阅读 3,686评论 1 36
  • 在学习Hbase的shell命令,之前先得了解如何进入hbase的shell命令行,通过执行如下简单的命令回车后进...
    飞鸿无痕阅读 882评论 0 6
  • 入门指南 1. 简介 Quickstart会让你启动和运行一个单节点单机HBase。 2. 快速启动 – 单点HB...
    和心数据阅读 4,323评论 1 41
  • Why 干嘛要给自己开方子? 在加入007之前,可能还没感觉到自己“病”了。虽然写东西干巴巴的,还能凑合用。自从加...
    X逆生长阅读 357评论 1 1