Hbase Shell操做示例

1、概述

        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

        

        

2、操做示例

一、general操做

# 查詢 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

二、DDL操做

# 建立一個表,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客戶端查看以上操做所建立的表

相關文章
相關標籤/搜索