5 HBase命令行接口
HBase命令行接口的使用方法
HBase shell
通用命令
查詢服務器狀態,例如服務器的數量
status查詢hbase版本
version如果有kerberos認證,需要事先使用相應的keytab進行一下認證(使用kinit命令),認證成功之后再使用hbase shell進入可以使用whoami命令可查看當前用戶
whoamiDDL(Data Definition Language 數據定義語言)
創建一個表(create)
語法:create
, {NAME=>,VERSIONS=>}例如:創建表t1,有兩個family name:f1,f2,且版本均為2
create 't1',{NAME=>'f1',VERSIONS=>2},{NAME=>'f2',VERSIONS=>2}注意點:
- 區分大小寫,NAME不能寫成name
- 表名,列名需要以字符串的形式輸入,即用單引號修飾,如’t1’
還有一種非標準創建的語法,創建表member,列族是member_id,address,info,版本為1(默認版本)。如下:
create 'member','member_id','address','info'獲得表的描述/結構(describe)
語法:describe
刪除一個列族,alter,disable,enable
alter 'member',{NAME=>'member_id',METHOD=>'delete'}#只能刪除disabled的表的列族,沒有添加列族 #將表enable,啟用表 enable 'member' #將表disabled,禁用表 disable 'member'刪表, drop
create 'temp_table','member_id','address','info'#創建一個示例 is_enabled 'temp_table' #查看是否可用 is_disabled 'temp_table' #查看是否禁用 drop 'temp_table' #只有被禁用的表才能被刪除刪除并重新創建一個表
truncate 't1'查詢表是否存在
exists 'member'查看文件存儲路徑
打開hdfs的web頁面 /hbase/data/default/member
default是默認的命名空間,member是表名
DML(數據操縱語言)
插入/更新數據,put
語法:put <table(表名)> ,<RK(RowKey)>,<CF : CQ(列鍵)>,<value(值)>
put 'member' ,'guojing','info:company','alibaba' put 'member' ,'guojing','info:age','24' put 'member' ,'guojing','address:contry','china' put 'member' ,'guojing','address:province','zhejiang' put 'member' ,'guojing','address:city','hangzhou'注:現在表的數據都在內存中,并沒有落地到磁盤。如果這時候想要落地到磁盤只能手動落地
先插入MemStore,到達閾值和時間后才會插入內存,可以不運行flush,查看hdfs文件中相應表的info文件,為空,說明未插入內存。
命令: flush< table >
更新一條數據
#將guojing的年齡更新為18,原數據還在原位置 put 'member','guojing','info:age','18'實現加入數據的遞增
#給'xiaofeng'這個RowKey增加'info:age'字段,并使用counter實現遞增 incr 'member','xiaofeng','info:age' get 'member','xiaofeng','info:age' incr 'member','xiaofeng','info:age' get 'member','xiaofeng','info:age' #獲取當前counter的值 get_counter 'member','xiaofeng','info:age'查詢數據,get
獲取一個RowKey的所有數據(一行數據)
get < table> , < RK>
獲取一個RowKey中,一個列族的所有數據
獲取一個RowKey中,一個列鍵(列族:列)的所有數據
get 'member','guojing','info:age'獲取不同版本的數據
#通過timestamp獲取不同版本的數據 get 'member','guojing',{COLUMN=>'info:age',TIMESTAMP=>1627474097682}查詢表中有多少行
count 'member'全表掃描(scan)
scan < table >
#注:全表掃描時一般和過濾器一起使用,不指定版本默認顯示一個版本 #(1)掃描時指定列族 scan 'member',{COLUMN=>'info'} #(2)掃描時指定列族,并限定顯示最新的5個版本 要在創建表的時候設置版本,如果只有一個版本就沒有歷史數據了 scan 'member',{COLUMN=>'info',VERSIONS=>5} #(3)設置開啟Row模式,開啟Row模式會把那些已經刪除標記但未刪除的數據也顯示出來 scan 'member',{COLUMN=>'info',RAW => true} #(4)列的過濾 # 查詢member表中列族為info和address的信息 scan 'member',{COLUMNS=>{'info','address'}} # 查詢member表中列鍵為info:name和address:city scan 'member',{COLUMNS=>{'info:name','address:city'}} # 查詢member表中列族為info和address且列名含有a字符的信息 scan 'member',{COLUMNS=>{'info','data'},FILTER=>"(QualifierFilter(=,'substring:a'))"} # 查詢member表中列族為info,rk范圍是[rk0001,rk0003)的數據 scan 'member',{COLUMNS=>'info',STARTROW=>'00001',ENDROW=>'00003'} # 查詢member表中RowKey中以rk字符開頭 scan 'member',{FILTER=>"PrefixFilter('0')"} # 查詢member表中指定時間范圍的數據 scan 'member',{TIMERANGE=>{12341234,43214321}}刪除數據,delete
刪除一次是刪除標記,get能獲得上一個版本的數據,如果只有一個版本,就不能獲得,但是其實是添加刪除標記并沒有真正刪除,用scan可以看見其為type為delete
#刪除id為guojing的值的'info:age'字段 delete 'member','guojing','info:age' #刪除整行 delete 'member','guojing'清空整張表
truncate 'member'Region操作
1)移動region
語法:move ‘encodeRegionName’,‘ServerName’
encodeRegionName指的是regionName后面的編碼,ServerName指的是master-status的Region Servers列表
# 將表'member'移動到節點node2上 move '2d47b41ebf2c0be89e5b7d5f7e97bf3a','node2,16020,1628232102271'尋找encodeRegionName的過程,進入hbase的web頁面(端口號默認為16010),找到相應的ServerName
點擊進入后即可看到相應的region信息,編碼值表名后面的一長串
點擊相應的表進入復制相應的encodeRegionName
進入hbase的web頁面(端口號默認為16010),找到相應的ServerName
2)開啟關閉region
語法:balance_switch true|false
HBase是一種支持自動負載均衡的分布式KV數據庫,在開啟balance的開關(balance_switch)后,HBase的HMaster進程會自動根據指定策略挑選出一些Region,并將這些Region分配給負載比較低的RegionServer上。
(當有新的節點進入hbase,為了負載均衡一種方式是手動將一部分region移動到新的節點,另一種方案是開啟自動均衡策略,當region數據增多后,分裂時進入新的節點)
balance_switch true3)手動split
語法:split ‘regionName’,‘splitKey’
split '2d47b41ebf2c0be89e5b7d5f7e97bf3a','001'4)手動觸發major compaction
HBase是基于一種LSM-Tree(Log-Structured Merge Tree)存儲模型設計的,寫入路徑上是先寫入WAL(Write-Ahead-Log)即預寫日志,再寫入memstore緩存,滿足一定條件后執行flush操作將緩存數據刷寫到磁盤,生成一個HFile數據文件。隨著數據不斷寫入,磁盤HFile文件就會越來越多,文件太多會影響HBase查詢性能,主要體現在查詢數據的io次數增加。為了優化查詢性能,HBase會合并小的HFile以減少文件數量,這種合并HFile的操作稱為Compaction。
Minor Compaction:指選取一些小的、相鄰的HFile將他們合并成一個更大的HFile。默認情況下,minor compaction會刪除選取HFile中的TTL過期數據。
Major Compaction:指將一個Store中所有的HFile合并成一個HFile,這個過程會清理三類沒有意義的數據:被刪除的數據(打了Delete標記的數據)、TTL過期數據、版本號超過設定版本號的數據。
#Compact all regions in a table:壓縮表中所有region major_compact 't1' #Compact an entire region:壓縮一個region major_compact 'r1' #Compact a single column family within a region:壓縮region中的一個列族 major_compact 'r1', 'c1' #Compact a single column family within a table:壓縮表中的一個列族 major_compact 't1', 'c1' ```cmd #Compact all regions in a table:壓縮表中所有region major_compact 't1' #Compact an entire region:壓縮一個region major_compact 'r1' #Compact a single column family within a region:壓縮region中的一個列族 major_compact 'r1', 'c1' #Compact a single column family within a table:壓縮表中的一個列族 major_compact 't1', 'c1' 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的5 HBase命令行接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4 HBase搭建
- 下一篇: idea好用的快捷键