1. 程式人生 > >hbase shell 操作 、表空間、授權

hbase shell 操作 、表空間、授權

1、進入shell介面:


hbase shell

2、namespace


HBase中沒有database的概念,這裡的namespace名稱空間指對一組表的邏輯分組,類似RDBMS中的database;
HBase系統預設定義了兩個預設的namespace
hbase:系統內建表,包括namespace和meta表
default:使用者建表時未指定namespace的表都建立在此

1、建立namespace
hbase>create_namespace 'test_ns'
2、列出所有namespace
hbase>list_namespace
3、檢視namespace
hbase>describe_namespace 'test_ns'
4、在namespace下建立表
hbase>create 'test_ns:testtable', 'fm1'
5、檢視namespace下的表
hbase>list_namespace_tables 'test_ns'
6、刪除namespace  ----必須空的namespace才能刪除  要刪除掉裡面的表
hbase>disable 'test_ns:testtable'
hbase>drop 'test_ns:testtable'
hbase>drop_namespace 'test_ns'    

3、table DML


1、建立表 
hbase>create 't_demo_tbl','f1','f2','f3'                   #-------t_demo_tbl是表名,f1,f2,f3是列族名
2、查看錶的結構:
hbase>describe 't_demo_tbl'
3、禁用,啟用表
hbase>disable 't_demo_tbl'
hbase>enable 't_demo_tbl'
4、查看錶結構是否啟用【允許修改】 因為啟用的表不允許修改:
hbase>is_enabled 't_demo_tbl'
5、增加一個列族:
hbase>disable 't_demo_tbl'
hbase>alter 't_demo_tbl', NAME=>'f1', VERSIONS=>3
hbase>enable 't_demo_tbl'
6、刪除某個列族: 
hbase>disable 't_demo_tbl'
hbase>alter 't_demo_tbl', NAME=>'f1', METHOD=>'delete'         #--------注意大小寫(簡寫:alter 't_demo_tbl', 'delete'=>'f1')
hbase>enable 't_demo_tbl'

7、檢視所有的表
hbase>list
8、檢視某一表是否存在:
hbase>exists 't_demo_tbl'

9、清空表:
hbase>truncate 't_demo_tbl'
10、刪除某張表:
hbase>disable 't_demo_tbl'
hbase>drop 't_demo_tbl'

4、table DDL


1、向表中插入資料:
hbase>put 't_demo_tbl', 'r1', 'f1:c1', 'value'           #--------列族的列可以不存在,修改資料也是put,只需行健[rowkey]和列相同即可
2、刪除某行資料的列[值]:
hbase>delete 't_demo_tbl', 'r1', 'c1', 'ts1'       #--------刪除t_demo_tbl表,行健為r1的c1列中,時間戳為ts1的值,如果不指定ts1就刪除所有列值[預設保持三個版本]
3、刪除某行資料:
hbase>deleteall 't_demo_tbl', 'r1'
4、獲取某個行健的所有列族的列值:
hbase>get 't_demo_tbl', 'r1'
5、獲取某個行健的所有某個列族的列值:
hbase>get 't_demo_tbl', 'r1','f1'
6、獲取某個行健的某兩個列族的列值:
hbase>get 't_demo_tbl', 'r1','f1','f2'
7、獲取某個行健的某個列族的某個列值:
hbase>get 't_demo_tbl', 'r1', 'f1:c1'
8、獲取某個表的所有行健值:
hbase>scan 't_demo_tbl'
9、獲取某個表的前3行:
hbase>scan 't_demo_tbl', {LIMIT=>3}
10、獲取某個表的從指定位置開始的行:
hbase>scan 't_demo_tbl', {STARTROW=>'rowKey', LIMIT=>3}
11、獲取某個表的指定列的所有行資料:
hbase>scan 'heroes', {COLUMNS =>'f1:c1'}
12、統計表的行數:
hbase>count 't_demo_tbl'


5、shell 指令碼執行方式

 

1、可以直接將語句寫入檔案test.hbaseshell,然後執行檔案:
hbase>hbase shell test.hbaseshell 

6、授權

 

Apache HBase從0.98.0, 0.95.2兩個版本開始支援namespace級別的授權操作

包括以下5種許可權,
Read(R) 允許讀取許可權
Write(W) 允許寫入許可權
Execute(X) 允許執行許可權
Create(C) 允許建表、刪表許可權
Admin(A) 允許管理操作,如balance、split、snapshot等


1、給 user_1 使用者授權全域性的CA   grant <user>, <permissions> [, <@namespace> [, <table> [, <column family> [, <column qualifier>]]]
hbase>grant 'user_1','CA'

2、回收user_1使用者全域性的CA   revoke <user> [, <@namespace> [, <table> [, <column family> [, <column qualifier>]]]]
hbase>revoke 'user_1','CA'

3、給user_1使用者namespace許可權
hbase>grant 'user_1','RWXCA','@t_ns'

4、給user_1使用者table許可權
hbase>grant 'user_1','RWXCA','TABLE_A'

5、檢視所有使用者許可權
hbase>user_permission

6、檢視某個表的許可權
hbase>user_permission 'TABLE_A'

7、檢視某個namespace的許可權
hbase>user_permission '@t_ns'

8、在HBase中啟用授權機制
hbase-site.xml
<property>
  <name>hbase.security.authorization</name>
  <value>true</value>
</property>
<property>
  <name>hbase.coprocessor.region.classes</name>
  <value>org.apache.hadoop.hbase.security.access.AccessController, org.apache.hadoop.hbase.security.token.TokenProvider</value>
</property>
<property>
  <name>hbase.coprocessor.master.classes</name>
  <value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
配置完成後需要重啟HBase叢集