HBase Shell 提供了大多數的 HBase 命令, 經過 HBase Shell 用戶能夠方便地建立、刪除及修改表, 還能夠向表中添加數據、列出表中的相關信息等。在啓動 HBase 以後,用戶能夠經過下面的命令進入 HBase Shell 之中,命令以下所示:node
[hadoop@node222 ~]$ /usr/local/hbase-1.2.6.1/bin/hbase shell HBase Shell; enter 'help<RETURN>' for list of supported commands. Type "exit<RETURN>" to leave the HBase Shell Version 1.2.6.1, rUnknown, Sun Jun 3 23:19:26 CDT 2018 hbase(main):001:0>
輸入 help 能夠看到命令分組。(注意命令都是小寫,有大小寫的區分)web
# 查詢 HBase 服務器狀態 status。 hbase(main):001:0> status 1 active master, 1 backup masters, 2 servers, 0 dead, 1.0000 average load # 查詢hbase版本 version hbase(main):002:0> version 1.2.6.1, rUnknown, Sun Jun 3 23:19:26 CDT 2018
# 建立一個表,create 'tableName','columnFimalyName1','columnFimalyName2','columnFimalyNameN' hbase(main):003:0> create 'member','address','info' 0 row(s) in 3.1330 seconds => Hbase::Table - member #列出全部的表 hbase(main):004:0> list TABLE member 1 row(s) in 0.0530 seconds => ["member"] #得到表的描述信息 hbase(main):005:0> describe 'member' Table member is ENABLED member COLUMN FAMILIES DESCRIPTION {NAME => 'address', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FORE VER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} {NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER ', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} 2 row(s) in 0.3560 seconds # 刪除一個列族 disable alter enable 注意刪除前,須要先把表disable hbase(main):006:0> disable 'member' 0 row(s) in 2.3910 seconds #刪除指定列 hbase(main):007:0> alter 'member',{NAME=>'address',METHOD=>'delete'} Updating all regions with the new schema... 1/1 regions updated. Done. 0 row(s) in 2.2840 seconds hbase(main):008:0> enable 'member' 0 row(s) in 1.4370 seconds hbase(main):009:0> describe 'member' Table member is ENABLED member COLUMN FAMILIES DESCRIPTION {NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER ', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} 1 row(s) in 0.0350 seconds # 查看錶是否存在 hbase(main):010:0> exist 'member2' NoMethodError: undefined method `exist' for #<Object:0x53aa2fc9> #判斷表是否爲'enable' hbase(main):011:0> is_enabled 'member' true 0 row(s) in 0.0260 seconds # 刪除一個表先disable hbase(main):012:0> disable 'member' 0 row(s) in 2.3150 seconds hbase(main):013:0> drop 'member' 0 row(s) in 1.3420 seconds
三、DML操做算法
插入幾條記錄,put只能一次put '一個表','一行','一個列族:一個列','值't1指表名,r1指行鍵名,c1指列名,value指單元格值。ts1指時間戳,通常都省略掉了。不能一次put兩個列值。shell
# 建立表 hbase(main):014:0> create 'member','address','info' 0 row(s) in 2.3320 seconds => Hbase::Table - member # put數據 hbase(main):015:0> put 'member', 'scutshuxue', 'info:age', '24' 0 row(s) in 0.2530 seconds put 'member', 'scutshuxue', 'info:birthday', '1987-06-17' put 'member', 'scutshuxue', 'info:company', 'alibaba' put 'member', 'scutshuxue', 'address:contry', 'china' put 'member', 'scutshuxue', 'address:province', 'zhejiang' put 'member', 'scutshuxue', 'address:city', 'hangzhou' # 全表掃描 scan hbase(main):021:0> scan 'member' ROW COLUMN+CELL scutshuxue column=address:city, timestamp=1540027486109, value=hangzhou scutshuxue column=address:contry, timestamp=1540027484239, value=china scutshuxue column=address:province, timestamp=1540027484293, value=zhejiang scutshuxue column=info:age, timestamp=1540027473410, value=24 scutshuxue column=info:birthday, timestamp=1540027484107, value=1987-06-17 scutshuxue column=info:company, timestamp=1540027484194, value=alibaba 1 row(s) in 0.0900 seconds # 得到數據 get,得到一行的全部數據 hbase(main):022:0> get 'member','scutshuxue' COLUMN CELL address:city timestamp=1540027486109, value=hangzhou address:contry timestamp=1540027484239, value=china address:province timestamp=1540027484293, value=zhejiang info:age timestamp=1540027473410, value=24 info:birthday timestamp=1540027484107, value=1987-06-17 info:company timestamp=1540027484194, value=alibaba 6 row(s) in 0.0890 seconds # 得到數據 get,得到某行,某列族的全部數據 hbase(main):023:0> get 'member','scutshuxue','info' COLUMN CELL info:age timestamp=1540027473410, value=24 info:birthday timestamp=1540027484107, value=1987-06-17 info:company timestamp=1540027484194, value=alibaba 3 row(s) in 0.0410 seconds # 得到數據 get得到某行,某列族,某列的全部數據 hbase(main):024:0> get 'member','scutshuxue','info:age' COLUMN CELL info:age timestamp=1540027473410, value=24 1 row(s) in 0.0560 seconds #更新一條記錄 put(把scutshuxue年齡改成99) hbase(main):025:0> put 'member','scutshuxue','info:age',99 0 row(s) in 0.0290 seconds #查詢表中有多少行 hbase(main):026:0> count 'member' 1 row(s) in 0.0750 seconds => 1 # 刪除列族中某列值 delete hbase(main):027:0> delete 'member','scutshuxue','info:age' 0 row(s) in 0.0780 seconds # 刪除整行 hbase(main):034:0> deleteall 'member','scutshuxue' 0 row(s) in 0.0400 seconds # 將整個表清空,HBase 是經過先對錶執行 disable,而後再執行 drop 操做後重建表來實現 truncate 的功能的。 hbase(main):028:0> truncate 'member' Truncating 'member' table (it may take a while): - Disabling table... - Truncating table... 0 row(s) in 3.7170 seconds # 一個完整建表語句解析 hbase(main):029:0> create 'NewsClickFeedback',{NAME=>'Toutiao',VERSIONS=>1,BLOCKCACHE=>true,BLOOMFILTER=>'ROW',COMPRESSION=>'SNAPPY',TTL => '259200'},{SPLITS => ['1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']} 0 row(s) in 4.5490 seconds => Hbase::Table - NewsClickFeedback hbase(main):030:0> describe 'NewsClickFeedback' Table NewsClickFeedback is ENABLED NewsClickFeedback COLUMN FAMILIES DESCRIPTION {NAME => 'Toutiao', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => '2592 00 SECONDS (3 DAYS)', COMPRESSION => 'SNAPPY', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} 1 row(s) in 0.0460 seconds
參數解析:緩存
VERSIONS
數據版本個數,HBase數據模型容許一個cell的數據爲帶有不一樣時間戳的多版本數據集,VERSIONS參數指定了最多保存幾個版本數據,默認爲1。假如某個用戶想保存兩個歷史版本數據,能夠將VERSIONS參數設置爲2,再使用以下Scan命令就能夠獲取到全部歷史數據bash
BLOOMFILTER
布隆過濾器,優化HBase的隨機讀取性能,可選值NONE|ROW|ROWCOL,默認爲NONE,該參數能夠單獨對某個列簇啓用。啓用過濾器,對於get操做以及部分scan操做能夠剔除掉不會用到的存儲文件,減小實際IO次數,提升隨機讀性能。Row類型適用於只根據Row進行查找,而RowCol類型適用於根據Row+Col聯合查找,以下:
Row類型適用於:get ‘NewsClickFeedback’,’row1′
RowCol類型適用於:get ‘NewsClickFeedback’,’row1′,{COLUMN => ‘Toutiao’}
對於有隨機讀的業務,建議開啓Row類型的過濾器,使用空間換時間,提升隨機讀性能。服務器
COMPRESSION
數據壓縮方式,HBase支持多種形式的數據壓縮,一方面減小數據存儲空間,一方面下降數據網絡傳輸量進而提高讀取效率。目前HBase支持的壓縮算法主要包括三種:GZip | LZO | Snappy,Snappy的壓縮率最低,可是編解碼速率最高,對CPU的消耗也最小,目前通常建議使用Snappy網絡
TTL
數據過時時間,單位爲秒,默認爲永久保存。對於不少業務來講,有時候並不須要永久保存某些數據,永久保存會致使數據量愈來愈大,消耗存儲空間是其一,另外一方面還會致使查詢效率下降。若是設置了過時時間,HBase在Compact時會經過必定機制檢查數據是否過時,過時數據會被刪除。用戶能夠根據具體業務場景設置爲一個月或者三個月。示例中TTL => ‘ 259200’設置數據過時時間爲三天app
IN_MEMORY
數據是否常駐內存,默認爲false。HBase爲頻繁訪問的數據提供了一個緩存區域,緩存區域通常存儲數據量小、訪問頻繁的數據,常見場景爲元數據存儲。默認狀況,該緩存區域大小等於Jvm Heapsize * 0.2 * 0.25 ,假如Jvm Heapsize = 70G,存儲區域的大小約等於3.2G。須要注意的是HBase Meta元數據信息存儲在這塊區域,若是業務數據設置爲true並且太大會致使Meta數據被置換出去,致使整個集羣性能下降,因此在設置該參數時須要格外當心。oop
BLOCKCACHE
是否開啓block cache緩存,默認開啓。
SPLITS
region預分配策略。經過region預分配,數據會被均衡到多臺機器上,這樣能夠必定程度上解決熱點應用數據量劇增致使系統自動split引發的性能問題。HBase數據是按照rowkey按升序排列,爲避免熱點數據產生,通常採用hash + partition的方式預分配region,好比示例中rowkey首先使用md5 hash,而後再按照首字母partition爲16份,就能夠預分配16個region。
MIN_VERSIONS
最小版本數
BLOCKSIZE
數據塊的大小
經過web客戶端查看以上操做所建立的表