HBase shell基本操作命令

1、基本命令

1.1 查詢狀態(status)

hbase(main):009:0> status

1.2 查看版本(version)

       hbase(main):001:0> version

1.3 查看幫助信息(help)

       hbase(main):038:0> help

hbase(main):038:0> get help

hbase(main):038:0> put help

2、一般操作

2.1 創建命名空間(create_namespace)

hbase(main):001:0> create_namespace ‘test’

2.2 查看命名空間(list_namespace)

       hbase(main):002:0> list_namespace

2.3 查看有哪些表(list)

       hbase(main):003:0> list

2.4 查看錶結構信息(describe)

       hbase(main):004:0> describe 'test:user_info'

2.5 創建表(create)

語法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}

  1. 創建表user_info,有兩個family name:F1,F2,且版本數均爲5

hbase(main):004:0> create 'test:user_info',{NAME => 'F1', VERSIONS => 5},{NAME => 'F2', VERSIONS => 5}

2) 不指定表的命名空間,在創建的表的所屬命名空間爲 default

hbase(main):004:0> create ‘user_info',{NAME => 'F1', VERSIONS => 5},{NAME => 'F2', VERSIONS => 5}

3)創建表user_order,並指定5個分區信息

hbase(main):021:0> create 'test:user_order',{NAME => 'F1', VERSIONS => 5},{NAME => 'F2', VERSIONS => 5},SPLITS=>['20','40','60','80']

 

2.6 刪除表(drop)

       刪除表前先disable,然後drop。

hbase(main) :004:0> disable 'test:user_info'

hbase(main) :004:0> drop 'test:user_info'

2.7 修改表結構(alter)

       修改表結構前先disable,然後alter。

語法:alter <table>, {NAME => <family>}, {NAME => <family>, METHOD => 'delete'}

  1. 修改表user_info的F1的最大版本數爲6.

hbase(main):009:0* disable 'test:user_info'

hbase(main):010:0> alter 'test:user_info',{NAME=>'F1',VERSIONS=>6}

hbase(main):011:0> enable 'test:user_info'

2.8添加數據(put)

語法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>

  1. 給表user_info添加數據

hbase(main):014:0> put 'test:user_info','001001001','F1:real_name','我是HBase'

hbase(main):014:0> put 'test:user_info','001001001', 'F1:phone','18822666698'

2.9查詢數據(get)

語法:get <table>,<rowkey>,[<family:column>,....]

  1. 查詢rowkey=001001001一行下的所有的列值

hbase(main):019:0> get 'test:user_info','001001001'

    2. 查詢rowkey=001001001一行下指定列的值

hbase(main):020:0> get 'test:user_info','001001001', 'F1:real_name','F1:phone'

2.10 掃描數據(scan)

語法:scan <table>, {COLUMNS => [ <family:column>,.... ], LIMIT => num},另外,還可以添加STARTROW、STOP_ROW、TIMERANGE和FITLER等高級功能

  1. 掃描表user_info的前5條數據

hbase(main):001:0> scan 'test:user_info',{LIMIT=>5}

     2.掃描表user_info的COLUMNS=F1的前10條數據

hbase(main):041:0> scan 'test:user_info',{COLUMNS=>'F1',LIMIT=>5}

     3.掃描表user_info的開始行='00000000001',結束行=00000000010'的數據

       hbase(main):050:0> scan 'test:user_info',{STARTROW=>'00000000001',ENDROW=>'00000000010'}

     4.掃描表user_info的版本號大於5的所有數據

hbase(main):001:0> scan 'test:user_info',{VERSIONS=>5}

     5.掃描表user_info的時間戳在指定範圍內的數據

hbase(main):003:0> scan 'test:user_info',{TIMERANGE=>[1564122031569,1564132831125],VERSIONS=>2}

2.11查看錶的總行數

語法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum},INTERVAL設置多少行顯示一次及對應的rowkey,默認1000;CACHE每次去取的緩存區大小,默認是10,調整該參數可提高查詢速度

  1. 查看錶user_info中的總行數,每2000條顯示一次,緩存區爲1000

hbase(main):005:0> count 'test:user_info', {INTERVAL => 2000, CACHE => 1000}

Current count: 2000, row: 00200000011
Current count: 4000, row: 00400000028
Current count: 6000, row: 00600000134
Current count: 8000, row: 00800000213
9967 row(s) in 0.1800 seconds

2.12刪除列數據(delete)

語法:delete <table>, <rowkey>,  <family:column> , <timestamp>,必須指定列名

  1. 刪除表user_info中rowkey=’00200000011’,column=’F1:address’的數據

hbase(main):006:0> delete 'test:user_info','00200000011','F1:address'

2.13刪除行數據(deleteall)

語法:deleteall <table>, <rowkey>, <family:column> , <timestamp>,可以不指定列名,刪除整行數據。

  1. 刪除表user_info中rowkey=’00200000011’的數據

hbase(main):007:0> deleteall 'test:user_info','00200000011'

2.14 刪除表的所有數據(truncate)

語法:truncate <table>,具體過程是:disable table -> drop table -> create table

  1. 刪除表user_info的所有數據

hbase(main):008:0> truncate ‘test:user_info’

2.15快照(snapshot)

1) 查看所有快照                list_snapshots

2)查看錶的所有快照        list_table_snapshots

3) 創建快照                       snapshot 'test:user_info', 'snapshot.user_info.20190726'

4)刪除快照                     delete_snapshot 'snapshot.user_info.20190726'

2.16查看錶是否存在(exists)

       hbase(main):021:0> exists 'test:user_info'

2.17 查看錶是否可用

hbase(main):022:0> is_enabled 'test:user_info'

2.18 禁用表(disable),啓用表(enable)

3、過濾器

查看服務端生效的所有過濾器

hbase(main):027:0> show_filters

       uploading.gif轉存失敗重新上傳取消

3.1 DependentColumnFilter

是一種允許用戶指定一個參考列或引用列來過濾其他列的過濾器,過濾的原則是基於參考列的時間戳來進行篩選。

hbase(main):001:0> scan 'test:user_info',{ FILTER => "DependentColumnFilter('F1','phone')"}

3.2 KeyOnlyFilter

這個過濾器唯一的功能就是隻返回每行的行鍵,值全部爲空,這對於只關注於行鍵的應用場景來說非常合適,這樣忽略掉其值就可以減少傳遞到客戶端的數據量,能起到一定的優化作用。

       hbase(main):002:0> scan 'test:user_info',{ FILTER => "KeyOnlyFilter()"}

3.3 ColumnCountGetFilter

這個過濾器來返回每行最多返回多少列,並在遇到一行的列數超過我們所設置的限制值的時候,結束掃描操作。

       hbase(main):002:0> scan 'test:user_info',{ FILTER => "ColumnCountGetFilter(10)"}

3.4 SingleColumnValueFilter

用一列的值決定這一行的數據是否被過濾

       hbase(main):019:0>

scan 'test:user_info',{ FILTER => "SingleColumnValueFilter('F1','phone',>=,'18812346969')"}

3.5 PrefixFilter

Rowkey篩選出具有特定前綴的行鍵的數據。這個過濾器所實現的功能其實也可以由RowFilter結合RegexComparator來實現,不過這裏提供了一種簡便的使用方法。

       hbase(main):020:0> scan 'test:user_info',{ FILTER => "PrefixFilter('001000088')"}

3.6 SingleColumnValueExcludeFilter

用一列的值決定篩選條件的列的不會包含在返回的結果中

       hbase(main):021:0>

scan 'test:user_info',{ FILTER => " SingleColumnValueExcludeFilter ('F1','phone',=,'18812346969')"}

3.7 FirstKeyOnlyFilter

       如果只想返回的結果集中只包含第一列Rowkey的數據,那麼這個過濾器能夠滿足你的要求。它在找到每行的Rowkey之後會停止掃描,從而使掃描的性能也得到了一定的提升

       hbase(main):001:0> scan 'test:user_info',{ FILTER => "FirstKeyOnlyFilter()"}

3.8 ColumnRangeFilter

       該過濾器只掃描指定列名大小範圍內的列,可以進行高效的列名內部掃描。

       hbase(main):001:0> scan 'test:user_info',{ FILTER => "ColumnRangeFilter('address',true,'phone',true)"}

3.9 TimestampsFilter

       單元值時間版本過濾器,根據數據的時間戳版本進行過濾,其參數是一個集合列表。

       hbase(main):003:0> scan 'test:user_info',{ FILTER => "TimestampsFilter(1,2)"}

3.10 FamilyFilter

       列族過濾器,通常在Scan過程中通過設定某些列族來實現該功能,而不是直接使用該過濾器,該過濾器使用頻率不高。

hbase(main):004:0> scan 'test:user_info',{ FILTER => "FamilyFilter(=,'F1')"}

3.11 QualifierFilter

       列名過濾器,對列名進行篩選,類似於行鍵過濾器,只是針對列名過濾而已。

hbase(main):007:0> scan 'test:user_info',{ FILTER => "QualifierFilter(=,'phone')"}

3.12 ColumnPrefixFilter

       用於列名(Qualifier)前綴過濾,即包含某個前綴的所有列名。

       hbase(main):010:0> scan 'test:user_info',{ FILTER => "ColumnPrefixFilter(=,'phon')"}

3.13 RowFilter

       行鍵過濾器:對行鍵進行過濾,執行Scan使用startRow/stopRow方式比較好,而RowFilter過濾器也可以完成對某一行的過過濾

       hbase(main):017:0> scan 'test:user_info',{ FILTER => "RowFilter(=,'00100008800')"}

3.14 MultipleColumnPrefixFilter

       MultipleColumnPrefixFilter與ColumnPrefixFilter 的行爲類似,但可以指定多個列名(Qualifier)前綴。

       hbase(main):001:0> scan 'test:user_info',{ FILTER => "MultipleColumnPrefixFilter('add','pho')"}

3.15 InclusiveStopFilter

       包含結束行鍵的過濾器,常規的Scan包含startRow 但不包含stopRow,如果使用該過濾器便可以包含stopRow。

       hbase(main):002:0> scan 'test:user_info',{ FILTER => "InclusiveStopFilter('0010088888999')"}

3.16 PageFilter

       行鍵分頁過濾器:基於行的分頁。

       hbase(main):004:0> scan 'test:user_info',{ FILTER => "PageFilter(10)"}

3.17 ValueFilter

       單元值過濾器:對單元值進行過濾

       hbase(main):006:0> scan 'test:user_info',{ FILTER => "ValueFilter('abcd')"}

3.18 ColumnPaginationFilter

       列分頁過濾器:基於列進行分頁,需要設置偏移量與返回數量。

       hbase(main):009:0> scan 'test:user_info',{ FILTER => "ColumnPaginationFilter(10,1)"}

4、附加說明

4.1建表語句詳解

create 'test:user_info',{NAME => 'F1', BLOOMFILTER => ''ROW ', REPLICATION_SCOPE => '0', VERSIONS => '5', COMPRESSION => 'LZO', TTL => 'FOREVER', IN_MEMORY => 'false', BLOCKCACHE => 'false'},

 {NAME => 'F2', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '5', COMPRESSION => 'LZO', TTL => ' FOREVER ', IN_MEMORY => 'true'}

其中的屬性有:

  1. REPLICATION_SCOPE:複製份數;
  2. NAME:包含一個列簇“F1”
  3. VERSIONS:設置歷史版本數,默認爲1

4)BLOOMFILTER: 布隆過濾器,優化HBase的隨即讀取性能,可選值NONE|ROW|ROWCOL,默認爲NONE,該參數可以單獨對某個列簇啓用。啓用過濾器,對於get操作以及部分scan操作可以剔除掉不會用到的存儲文件,減少實際IO次數,提高隨機讀性能。Row類型適用於只根據Row進行查找,而RowCol類型適用於根據Row+Col聯合查找,如下:

Row類型適用於:get ‘test:user_info’,’row1′

RowCol類型適用於:get ‘test:user_info’,’row1′,{COLUMN => ‘F1’}

對於有隨機讀的業務,建議開啓Row類型的過濾器,使用空間換時間,提高隨機讀性能。

5)COMPRESSION:數據壓縮方式,HBase支持多種形式的數據壓縮,一方面減少數據存儲空間,一方面降低數據網絡傳輸量進而提升讀取效率。目前HBase支持的壓縮算法主要包括三種:GZip | LZO | Snappy,下面表格分別從壓縮率,編解碼速率三個方面對其進行對比:

(1) GZIP的壓縮率最高,但是其實CPU密集型的,對CPU的消耗比其他算法要多,壓縮和解壓速度也慢;

(2) LZO的壓縮率居中,比GZIP要低一些,但是壓縮和解壓速度明顯要比GZIP快很多,其中解壓速度快的更多;

(3) Zippy/Snappy的壓縮率最低,而壓縮和解壓速度要稍微比LZO要快一些。

Snappy的壓縮率最低,但是編解碼速率最高,對CPU的消耗也最小,目前一般建議使用Snappy。

6)IN_MEMORY:數據是否常駐內存,默認爲false。HBase爲頻繁訪問的數據提供了一個緩存區域,緩存區域一般存儲數據量小、訪問頻繁的數據,常見場景爲元數據存儲。默認情況,該緩存區域大小等於Jvm Heapsize * 0.2 * 0.25 ,假如Jvm Heapsize = 70G,存儲區域的大小約等於3.2G。需要注意的是HBase Meta元數據信息存儲在這塊區域,如果業務數據設置爲true而且太大會導致Meta數據被置換出去,導致整個集羣性能降低,所以在設置該參數時需要格外小心。

7)BLOCKCACHE:是否開啓block cache緩存,默認開啓。

8) TTL:數據過期時間,單位爲秒,默認爲永久保存。對於很多業務來說,有時候並不需要永久保存某些數據,永久保存會導致數據量越來越大,消耗存儲空間是其一,另一方面還會導致查詢效率降低。如果設置了過期時間,HBase在Compact時會通過一定機制檢查數據是否過期,過期數據會被刪除。用戶可以根據具體業務場景設置爲一個月或者三個月。示例中TTL => ‘ 259200’設置數據過期時間爲三天,以最後一次更新時間爲開始時間(TTL=>的更新超時時間是指:該列最後更新的時間,到超時時間的限制,而不是第一次創建,到超時時間。)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章