一. 簡介
學習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'
(未完待續 。。。)