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