1. 程式人生 > >hbase命令集(shell 命令,如建表,清空表,增刪改查)

hbase命令集(shell 命令,如建表,清空表,增刪改查)

 兩篇可以參考的文章,講的不錯 

http://www.cnblogs.com/nexiyi/p/hbase_shell.html 

(http://blog.iyunv.com/wulantian/article/details/41011297)
  ==============================
hbase web操作

訪問地址 http://hmaster:60010,
hmaster的ip配置在$HBASE_HOME/conf/hbase-site.xml中
ip對映成主機名,在env/hosts中配置(在windows系統中的C:\Windows\System32\drivers\etc目錄下的hosts檔案中配置)

hbase shell 操作:


進入hbase console:hbase shell
help檢視基本命令集合
list看庫中所有表
status 檢視當前執行伺服器狀態
version 版本號


1)建表

    語法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}
語句:
hbase(main):004:0> exists 'test'
hbase(main):005:0> create 'test','cf'
hbase> create 't1', {NAME => 'f1', VERSIONS => 5}

hbase> create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
省略模式建立列族
hbase> create 't1', 'f1', 'f2', 'f3'
指定每個列族引數
hbase> create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
hbase> create 't1', 'f1', {SPLITS => ['10', '20', '30', '40']}
hbase> create 't1', 'f1', {SPLITS_FILE => 'splits.txt'}

hbase> # Optionally pre-split the table into NUMREGIONS, using
hbase> # SPLITALGO ("HexStringSplit", "UniformSplit" or classname)
hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
設定不同引數,提升表的讀取效能。
create 'lmj_test',
{NAME => 'adn', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'}, 
{NAME => 'fixeddim', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'}, 
{NAME => 'social', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'}
每個引數屬性都有效能意義,通過合理化的設定可以提升表的效能
create 'lmj_test',
{NAME => 'adn', BLOOMFILTER => 'ROWCOL', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', COMPRESSION => 'SNAPPY', BLOCKCACHE => 'false'},
{NAME => 'fixeddim',BLOOMFILTER => 'ROWCOL', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', COMPRESSION => 'SNAPPY', BLOCKCACHE => 'false'},
{NAME => 'social',BLOOMFILTER => 'ROWCOL', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0',COMPRESSION => 'SNAPPY', BLOCKCACHE => 'false'}


2)建好表後,查看錶結構:describe 

    得出
{NAME => 'lmj_test', 
FAMILIES => 
[
{NAME => 'adn', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'}, 
{NAME => 'fixeddim', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'}, 
{NAME => 'social', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROWCOL', REPLICATION_SCOPE => '0', COMPRESSION => 'SNAPPY', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', ENCODE_ON_DISK => 'true', IN_MEMORY => 'false', BLOCKCACHE => 'false'}
]
}


3)清空表:truncate ‘lmj_test’
4)刪除表:

        分兩步,首先disable 'lmj_test',然後drop 'lmj_test'


5)修改表結構:先disable後enable

        alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}
例如:修改表test1的cf的TTL為180天
hbase(main)> disable 'test1'
hbase(main)> alter 'test1',{NAME=>'body',TTL=>'15552000'},{NAME=>'meta', TTL=>'15552000'}
hbase(main)> enable 'test1'


6)對錶中記錄的操作(4種行操作)

    put 增加一行
put 't1', 'r1', 'c1', 'value', ts1
put 'lmj_test','00001','adn:adn_3','aaa',1432483200000
put 'lmj_test','00001','fixeddim:appcategory_1','1',1432483200000
put 'lmj_test','00001','fixeddim:interest_15','100',1432483200000
get查詢對應資料(可以指定行、列族、列、版本)
get 'lmj_test','000000104257464',{TIMESTAMP=>1432483200000}
delete 刪除資料
刪除指定行中指定列:
delete <table>, <rowkey>,  <family:column> , <timestamp>(必須指定列名,刪除其所有版本資料)
delete 'lmj_test','000000104257464','f1:col1'
刪除整行資料(可不指定列名):
deleteall <table>, <rowkey>,  <family:column> , <timestamp>
deleteall 'lmj_test','000000104257464'
scan 掃描全表,指定過濾條件,返回對應行
scan 'lxw_hbase', {LIMIT => 1}
其他條件繼續新增在大括號中
以上4個操作類是 org.apache.hadoop.hbase.client的子類,參考官網API檢視詳細資訊
count統計表中記錄數
count 'lxw_hbase', {INTERVAL => 100, CACHE => 500}
#每100條顯示一次,快取區為500


7)表操作許可權

    給使用者分配對每個表的操作許可權,有RWXCA五種,對應READ, WRITE, EXEC, CREATE, ADMIN
grant 'liu_mja','RW','lxw_hbase'    #分配給使用者liu_mja表lxw_hbase的讀寫許可權
還可以 檢視許可權
user_permission 'lxw_hbase'
收回許可權
revoke 'liu_mja','lxw_hbase'


8)名稱空間

    關係資料庫系統中,名稱空間namespace是表的邏輯分組,同一組中的表有類似的用途。
以下引自:http://blog.iyunv.com/wulantian/article/details/41011297
hbase的表也有名稱空間的管理方式,名稱空間的概念為即將到來的多租戶特性打下基礎:
配額管理( Quota Management (HBASE-8410)):限制一個namespace可以使用的資源,資源包括region和table等; 
名稱空間安全管理( Namespace Security Administration (HBASE-9206)):提供了另一個層面的多租戶安全管理; 
Region伺服器組(Region server groups (HBASE-6721)):一個名稱空間或一張表,可以被固定到一組 regionservers上,從而保證了資料隔離性。 
名稱空間可以被建立、移除、修改。
建表時可以指定名稱空間,格式如下:<namespace>:<table>
#Create a namespace
create_namespace 'my_ns'
#create my_table in my_ns namespace
create 'my_ns:my_table', 'fam'
#drop namespace
drop_namespace 'my_ns'
#alter namespace
alter_namespace 'my_ns', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}
預定義的名稱空間:
有兩個系統內建的預定義名稱空間
hbase   系統名稱空間,用於包含hbase的內部表 
default 所有未指定名稱空間的表都自動進入該名稱空間
使用預設的名稱空間
#namespace=default and table qualifier=bar
create 'bar', 'fam'
指定名稱空間
#namespace=foo and table qualifier=bar

create 'foo:bar', 'fam'

原文網址:http://www.iyunv.com/thread-130713-1-1.html