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叢集