1. 程式人生 > >hadoop元件---面向列的開源資料庫(二)---hbase常用命令

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的使用上與一般的資料庫還是有點類似的,難點在於叢集間的資源調整。