1. 程式人生 > >hbase shell操作命令大全

hbase shell操作命令大全

一、hbase web操作
訪問地址 http://h71:60010

h71的ip配置在$HBASE_HOME/conf/hbase-site.xml中

hbase.master.info.port
HBase Master web 介面埠. 設定為 -1 意味著你不想讓它執行
預設: 60010

hbase.master.info.bindAddress
HBase Master web 介面繫結的IP地址
預設: 0.0.0.0

ip對映成主機名:

linux: 在/etc/hosts中配置

windows: 在windows系統中的C:\Windows\System32\drivers\etc目錄下的hosts檔案中配置

192.168.8.71    h71
192.168.8.72    h72
192.168.8.73    h73

二、hbase shell 基本操作:

1.進入hbase shell console
$HBASE_HOME/bin/hbase shell
如果有kerberos認證,需要事先使用相應的keytab進行一下認證(使用kinit命令),認證成功之後再使用hbase shell進入可以使用whoami命令可檢視當前使用者

hbase(main):029:0> whoami
hadoop (auth:SIMPLE)
    groups: hadoop
    
hbase(main):008:0> version
1.0.0-cdh5.5.2, rUnknown, Mon Jan 25 16:33:02 PST 2016
list看庫中所有表
status 檢視當前執行伺服器狀態
exits '表名字' 判斷表存在

2.名稱空間Namespace
在關係資料庫系統中,名稱空間namespace指的是一個表的邏輯分組,同一組中的表有類似的用途。名稱空間的概念為即將到來的多租戶特性打下基礎:
配額管理(Quota Management (HBASE-8410)):限制一個namespace可以使用的資源,資源包括region和table等;
名稱空間安全管理(Namespace Security Administration (HBASE-9206)):提供了另一個層面的多租戶安全管理;
Region伺服器組(Region server groups (HBASE-6721)):一個名稱空間或一張表,可以被固定到一組regionservers上,從而保證了資料隔離性。
(1).名稱空間管理


名稱空間可以被建立、移除、修改。
表和名稱空間的隸屬關係在在建立表時決定,通過以下格式指定:
<namespace>:<table>

Example:hbase shell中建立名稱空間、建立名稱空間中的表、移除名稱空間、修改名稱空間
#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'
注意:只有當該空間不存在任何表為空的時候才可以刪除,如果存在表的話應該將表刪除後再刪除該空間,刪除表的操作:
hbase(main):005:0> disable 'my_ns:my_table'
hbase(main):006:0> drop 'my_ns:my_table'

#alter namespace
alter_namespace 'my_ns', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}

(2)預定義的名稱空間
有兩個系統內建的預定義名稱空間:
hbase:系統名稱空間,用於包含hbase的內部表
default:所有未指定名稱空間的表都自動進入該名稱空間
Example:指定名稱空間和預設名稱空間

#namespace=my_ns and table qualifier=bar
create 'my_ns:bar', 'fam'

#namespace=default and table qualifier=bar
create 'bar', 'fam'

3.建立表:

語法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}
具體命令:
create 't1', {NAME => 'f1', VERSIONS => 5}
create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
省略模式建立列族:
create 't1', 'f1', 'f2', 'f3'
指定每個列族引數:
create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
create 't1', 'f1', {SPLITS => ['10', '20', '30', '40']}
(Hbase Region 的分裂(Split) ,請參考:http://blog.sina.com.cn/s/blog_79c0eb870102wdvg.html,http://www.codeweblog.com/hbase-split%E7%9A%84%E4%B8%89%E7%A7%8D%E6%96%B9%E5%BC%8F/,http://blog.csdn.net/dcswin/article/details/52335293)
設定不同引數,提升表的讀取效能:
    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'}

hbase(main):179:0> create 'scores','grade','course'

4.在建立的表中插入資料:
hbase(main):180:0> put 'scores','zhangsan01','course:math','99'
hbase(main):181:0> put 'scores','zhangsan01','course:art','90'
hbase(main):182:0> put 'scores','zhangsan01','grade:','101'
hbase(main):184:0> put 'scores','zhangsan02','course:math','66'
hbase(main):185:0> put 'scores','zhangsan02','course:art','60'
hbase(main):186:0> put 'scores','zhangsan02','grade:','102'
hbase(main):201:0> put 'scores','lisi01','course:math','89'
hbase(main):202:0> put 'scores','lisi01','course:art','89'
hbase(main):203:0> put 'scores','lisi01','grade:','201'

6.delete 刪除資料
刪除指定行中指定列:
語法:delete <table>, <rowkey>,  <family:column> , <timestamp>(必須指定列名,刪除其所有版本資料)
delete 'scores','zhangsan01','course:math'
刪除整行資料(可不指定列名):
語法:deleteall <table>, <rowkey>,  <family:column> , <timestamp>
deleteall 'scores','zhangsan02'
(Put,Delete,Get,Scan這四個類都是org.apache.hadoop.hbase.client的子類,可以到官網API去檢視詳細資訊)

7.count統計表中記錄數
count 'scores', {INTERVAL => 100, CACHE => 500}
#每100條顯示一次,快取區為500

8.清空表:truncate 'scores'

9.修改表結構:先disable後enable

例如:修改表scores的cf的TTL為180天
hbase(main):017:0> disable 'scores'
hbase(main):018:0> alter 'scores',{NAME=>'grade',TTL=>'15552000'},{NAME=>'course', TTL=>'15552000'}
Updating all regions with the new schema...
1/1 regions updated.
Done.
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.2200 seconds
改變多版本號:
hbase(main):029:0> alter 'scores',{NAME=>'grade',VERSIONS=>3}
Updating all regions with the new schema...
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 2.4020 seconds
(網上都說修改表結構必須先先disable後enable,但是我沒有做這個操作,直接alter也成功了啊,不知道這樣做有沒有什麼影響,目前還不太瞭解)
hbase(main):020:0> enable 'scores'

10.表操作許可權

(1).分配許可權

grant 'hadoop','RW','scores'    #分配給使用者hadoop表scores的讀寫許可權

注意:一開始我分配許可權的時候總是報錯:
hbase(main):038:0> grant 'hadoop','RW','scores'

ERROR: DISABLED: Security features are not available

解決:
[[email protected] ~]$ vi hbase-1.0.0-cdh5.5.2/conf/hbase-site.xml
新增:
<property>
  <name>hbase.superuser</name>
  <value>root,hadoop</value>
</property>
<property>
  <name>hbase.coprocessor.region.classes</name>
  <value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
  <name>hbase.coprocessor.master.classes</name>
  <value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
  <name>hbase.rpc.engine</name>
  <value>org.apache.hadoop.hbase.ipc.SecureRpcEngine</value>
</property>
<property>
  <name>hbase.security.authorization</name>
  <value>true</value>
</property>

同步hbase配置(我的hbase叢集為h71(主),h72(從),h73(從)):
[[email protected] ~]$ cat /home/hadoop/hbase-1.0.0-cdh5.5.2/conf/regionservers|xargs -i -t scp /home/hadoop/hbase-1.0.0-cdh5.5.2/conf/hbase-site.xml [email protected]{}:/home/hadoop/hbase-1.0.0-cdh5.5.2/conf/hbase-site.xml
scp /home/hadoop/hbase-1.0.0-cdh5.5.2/conf/hbase-site.xml [email protected]:/home/hadoop/hbase-1.0.0-cdh5.5.2/conf/hbase-site.xml 
hbase-site.xml                                                                                                                                                                                             100% 2038     2.0KB/s   00:00    
scp /home/hadoop/hbase-1.0.0-cdh5.5.2/conf/hbase-site.xml [email protected]:/home/hadoop/hbase-1.0.0-cdh5.5.2/conf/hbase-site.xml 
hbase-site.xml                                                                                                                                                                                             100% 2038     2.0KB/s   00:00
重啟hbase叢集

HBase提供的五個許可權識別符號:RWXCA,分別對應著READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A')
HBase提供的安全管控級別包括:
Superuser:擁有所有許可權的超級管理員使用者。通過hbase.superuser引數配置
Global:全域性許可權可以作用在叢集所有的表上。
Namespace :名稱空間級。
Table:表級。
ColumnFamily:列簇級許可權。
Cell:單元級。
和關係資料庫一樣,許可權的授予和回收都使用grant和revoke,但格式有所不同。grant語法格式:
grant user permissions table column_family column_qualifier

(2)檢視許可權

hbase(main):010:0> user_permission 'scores'
User                                                         Namespace,Table,Family,Qualifier:Permission                                                                                                                                     
 hadoop                                                      default,scores,,: [Permission: actions=READ,WRITE]                                                                                                                              
1 row(s) in 0.2530 seconds
(3)收回許可權
hbase(main):006:0> revoke 'hadoop','scores'

11.hbase shell指令碼
既然是shell命令,當然也可以把所有的hbase shell命令寫入到一個檔案內,想Linux shell指令碼程式那樣去順序的執行所有命令。如同寫linux shell,把所有hbase shell命令書寫在一個檔案內,然後執行如下命令即可:

[[email protected] hbase-1.0.0-cdh5.5.2]$ vi hehe.txt(這個檔名隨便起,正規點的話可以起test.hbaseshell)
create 'hui','cf'
list
disable 'hui'
drop 'hui'
list
[[email protected] hbase-1.0.0-cdh5.5.2]$ bin/hbase shell hehe.txt

參考:
http://blog.csdn.net/longshenlmj/article/details/48317567#hbase-web???¦??
http://blog.csdn.net/u010967382/article/details/37878701?utm_source=tuicool&utm_medium=referral
http://www.cnblogs.com/nexiyi/p/hbase_shell.html

http://blog.csdn.net/lzm1340458776/article/details/43492415