hadoop元件---面向列的開源資料庫(二)---hbase常用命令
我們在上一章已經學習了hbase的相關介紹。
本章記錄hbase常用的命令。
hbase shell
hbase提供了一個shell的終端給使用者互動。使用命令hbase shell進入命令介面。
通過執行help可以看到所有命令的列表。
COMMAND GROUPS:
Group name: general
Commands: status, table_help, version, whoami
Group name: ddl
Commands: alter, alter_async, alter_status, create, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, list, locate_region, show_filters
Group name: namespace
Commands: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables
Group name: dml
Commands: append, count, delete, deleteall, get, get_counter, get_splits, incr, put, scan, truncate, truncate_preserve
Group name: tools
Commands: assign, balance_switch, balancer, balancer_enabled, catalogjanitor_enabled, catalogjanitor_run, catalogjanitor_switch, close_region, compact, compact_mob, compact_rs, flush, major_compact, major_compact_mob, merge_region, move, normalize, normalizer_enabled, normalizer_switch, split, trace, unassign, wal_roll, zk_dump
Group name: replication
Commands: add_peer, append_peer_tableCFs, disable_peer, disable_table_replication, enable_peer, enable_table_replication, get_peer_config, list_peer_configs, list_peers, list_replicated_tables, remove_peer, remove_peer_tableCFs, set_peer_tableCFs, show_peer_tableCFs, update_peer_config
Group name: snapshots
Commands: clone_snapshot, delete_all_snapshot, delete_snapshot, list_snapshots, restore_snapshot, snapshot
Group name: configuration
Commands: update_all_config, update_config
Group name: quotas
Commands: list_quotas, set_quota
Group name: security
Commands: grant, list_security_capabilities, revoke, user_permission
Group name: procedures
Commands: abort_procedure, list_procedures
Group name: visibility labels
Commands: add_labels, clear_auths, get_auths, list_labels, set_auths, set_visibility
Group name: rsgroup
Commands: add_rsgroup, balance_rsgroup, get_rsgroup, get_server_rsgroup, get_table_rsgroup, list_rsgroups, move_servers_rsgroup, move_tables_rsgroup, remove_rsgroup
HBase shell中的幫助命令非常強大,使用help ‘command_name’獲得某一個命令的詳細資訊。 例如:
help 'list'
我們按照所有命令的順序來分別學習相關命令:
一般(general)命令
檢視當前使用者
whoami
查詢伺服器狀態
status
查詢Hbase版本
version
檢視所有表
list
資料定義(ddl-Data Definition Language)命令
建立一個表,建立一個表student,有三個列族id,address和info
create 'student','id','address','info'
獲得表的描述
describe 'student'
刪除列族
我們之前建了3個列族,但是發現id這個列族是多餘的,因為已經有主鍵,所以我們要將其刪除。
alter 'student',{NAME=>'id',METHOD=>'delete'}
如果遇到錯誤ERROR: Table student is enabled. Disable it first before altering。
則需要先把表禁用
表禁用
disable 'student'
表啟用
enable 'student'
刪除表
drop 'student'
查詢表是否存在
exists 'student'
判斷表是否enable
is_enabled 'student'
判斷表是否disable
is_disabled 'student'
名稱空間(namespace)命令
HBase系統預設定義了兩個預設的namespace
hbase:系統內建表,包括namespace和meta表
default:使用者建表時未指定namespace的表都建立在此
建立namespace
create_namespace 'zzq_ns'
檢視namespace
describe_namespace 'zzq_ns'
刪除namespace
drop_namespace 'zzq_ns'
列出所有namespace
list_namespace
列出所有namespace
list_namespace
在namespace下建立表
create 'zzq_ns:student','id','address','info'
檢視namespace下的表
list_namespace_tables 'zzq_ns'
資料操作(dml-Data Manipulation Language)命令
插入資料
put 'student','zzq','info:age','24'
put 'student','zzq','info:birthday','1990-05-03'
put 'student','zzq','info:company','23mofang'
put 'student','zzq','address:contry','china'
put 'student','zzq','address:province','guangxi'
put 'student','zzq','address:city','nanning'
put 'student','yue','info:age','18'
put 'student','yue','info:birthday','1998-12-03'
put 'student','yue','info:company','23mofang'
put 'student','yue','address:contry','china'
put 'student','yue','address:province','sichuan'
put 'student','yue','address:city','chengdu'
我們分別插入了兩個人的資訊,可以看到hbase的結構組織是可以離散的自由的插入資料的。
獲取一條資料,獲取一個id的所有資料
get 'student','zzq'
獲取一個id,一個列族的所有資料
get 'student','zzq','info'
獲取一個id,一個列族中一個列的所有資料
get 'student','zzq','info:age'
更新一條記錄
將zzq的年齡改成28
put 'student','zzq','info:age','28'
通過timestamp來獲取兩個版本的資料
get 'student','zzq',{COLUMN=>'info:age',TIMESTAMP=>1520910557537}
get 'student','zzq',{COLUMN=>'info:age',TIMESTAMP=>1520910822239}
我們可以看到hbase預設是保留多個版本的資料的,通過timestamp來區分,預設返回最新版本的資料,如果有需要可以通過timestamp來獲取舊版本的資料。
全表掃描
scan 'student'
刪除id為zzq的值的‘info:age’欄位
delete 'student','zzq','info:age'
刪除整行(整個id)
deleteall 'student','zzq'
查詢表中有多少行:
count 'student'
查詢所有rowkey
count 'student', { INTERVAL => 1 }
給‘zzq’這個id增加’info:age’欄位,並使用counter實現遞增
incr 'student','zzq','info:age'
如果遇到ERROR: org.apache.hadoop.hbase.DoNotRetryIOException: Field is not a long, it’s 2 bytes wide錯誤需要先使用
delete 'student','zzq','info:age'
刪除原定義的值。
獲取當前count的值
get_counter 'student','zzq','info:age'
將整張表清空
truncate 'student'
工具(tools)命令
檢視Hbase表分割槽情況
scan 'hbase:meta'
student,,1520909631300.bd26e274811777d0f1a70b57ad5416b4. column=info:regioninfo, timestamp=1520909632197, value={ENCODED => bd26e274811777d0f1a70b57ad5416b4, NAME => 'student,,1520909631300.bd26e274811777d0f1a70b57ad5416b4.', STARTKEY => '', ENDKEY => ''}
student,,1520909631300.bd26e274811777d0f1a70b57ad5416b4. column=info:seqnumDuringOpen, timestamp=1520909932997, value=\x00\x00\x00\x00\x00\x00\x00\x05
student,,1520909631300.bd26e274811777d0f1a70b57ad5416b4. column=info:server, timestamp=1520909932997, value=host3:60020
student,,1520909631300.bd26e274811777d0f1a70b57ad5416b4. column=info:serverstartcode, timestamp=1520909932997, value=1520437250705
完整的region name
student,,1520909631300.bd26e274811777d0f1a70b57ad5416b4.
表空間:表名, 開始rowId, 時間戳, hashcode(MD5)
移動region
將region移動到一個指定的region server, 或者移動到一個隨機的region server(不指定region server)。此命令可以用於解決某些region server 過於擁堵的問題。
move 'ENCODE_REGIONNAME'
move 'ENCODE_REGIONNAME', 'SERVER_NAME,PORT,START_CODE'
其中
其中’ENCODED_REGIONNAME’表示region Id中的hashcode,比如上面的bd26e274811777d0f1a70b57ad5416b4
其中target server的start code, 可通過 scan ‘hbase:meta’查詢,如上
column=info:server, timestamp=1520909932997, value=host3:60020
column=info:serverstartcode, timestamp=1520909932997, value=1520437250705
則
‘SERVER_NAME,PORT,START_CODE’引數為’host3,60020,1520437250705’
region切片
split 'tableName'
split 'namespace:tableName'
split 'regionName' # format: 'tableName,startKey,id'
split 'tableName', 'splitKey'
split 'regionName', 'splitKey'
其中’splitKey’表示從哪一行開始切分
reqion切片合併
merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME'
merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME', true //強制合併
其中’ENCODED_REGIONNAME’表示region Id中的hashcode,比如上面的bd26e274811777d0f1a70b57ad5416b4
flush
將memstore中的資料強制寫入磁碟
flush 'TABLENAME'
flush 'REGIONNAME'
flush 'ENCODE_REGIONNAME'
close_region
關閉region空間
close_region 'REGIONNAME'
close_region 'REGIONNAME', 'SERVER_NAME'
close_region 'ENCODED_REGIONNAME'
close_region 'ENCODED_REGIONNAME', 'SERVER_NAME'
assign
分配一個region
assign 'REGIONNAME'
assign 'ENCODE_REGIONNAME'
unassign
關閉一個region,Unassign會在當前位置關閉region然後重啟一次
assign 'REGIONNAME'
assign 'ENCODE_REGIONNAME'
balancer_switch
blance的開關
balancer_switch控制是否啟用region的負載均衡演算法。如果負載均衡演算法已開啟,balance能主動執行負載均衡演算法將region伺服器上的region進行均勻再分配。
balance_switch true
balance_switch false
手動balancer
balancer
手動觸發major compaction
#Compact all regions in a table:
major_compact 't1'
#Compact an entire region:
major_compact 'r1'
#Compact a single column family within a region:
major_compact 'r1', 'c1'
#Compact a single column family within a table:
major_compact 't1', 'c1'
安全(security)命令
分配許可權
grant 'zzq','RW','student'
給使用者‘zzq’分配對錶student有讀寫的許可權
許可權用五個字母表示: “RWXCA”
分別代表
READ(‘R’), WRITE(‘W’), EXEC(‘X’), CREATE(‘C’), ADMIN(‘A’)
檢視許可權
user_permission 'student'
查看錶student的許可權列表
收回許可權
revoke 'zzq','student'
收回zzq使用者在表student上的許可權
待補充
複製集(replication)命令
快照(snapshots)命令
配置(configuration)命令
配額(quotas)命令
程式(procedures)命令
可見標籤(visibility labels)命令
rs分組(rsgroup)命令
總結
我們發現hbase的使用上與一般的資料庫還是有點類似的,難點在於叢集間的資源調整。