新聞中心
本篇內(nèi)容主要講解“HBase的讀寫流程以及優(yōu)化方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“HBase的讀寫流程以及優(yōu)化方法”吧!

站在用戶的角度思考問題,與客戶深入溝通,找到元江縣網(wǎng)站設(shè)計(jì)與元江縣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋元江縣地區(qū)。
HBase的讀寫流程--依賴于HBase的4大組件:分別是客戶端、Zookeeper、HMaster和HRegionServer。
HBase的讀寫都是由客戶端進(jìn)行發(fā)起的。首先是讀的過程:客戶端根據(jù)用戶提供的表名、行鍵去客戶端里的緩存進(jìn)行查詢,沒有查詢到,就去Zookeeper進(jìn)行查詢。Zookeeper在HBase中用來存儲ROOT表的地址。HBase中有兩張重要的表,分別是ROOT表和META表,ROOT表記錄META表的region信息,而META表記錄的是用戶表的region信息。簡單來說,META表的行鍵是由Region所屬表的表名、以及該region在表中的開始行鍵和時間戳組成,列族info定義了三個列,分別是regionInfo存儲了region中開始結(jié)束行鍵,server列存儲了region所在的服務(wù)器地址,serverstartcode存儲了regionServer的狀態(tài)。
由于META表也是一張普通的HBASE表,因此當(dāng)META表的數(shù)據(jù)越來越多的時候,也會分裂成多個meta region,每個meta region也會被不同的regionServer管理。因此就需要有一張表存儲meta region的信息,這張表就是ROOT表,ROOT表只存儲了一個region信息,那就是meta region。按照這個過程,理論上還需要一張表存儲ROOT表的信息,但是這樣就會產(chǎn)生無窮無盡的表存儲類似的信息,針對于這種情況,因此HBase的開發(fā)人員認(rèn)為ROOT表數(shù)據(jù)量不會很大,因此不會數(shù)據(jù)分裂,所以就不需要其他表存儲ROOT表的region信息了。
客戶端通過Zookeeper獲得了ROOT表的地址,通過RPC連接到ROOT表所在的RegionServer,根據(jù)ROOT表查詢META表,然后根據(jù)用戶所提供的表名和行鍵,組成一個XXXXXXX(),通過這個行鍵去META表查詢,拿到info列族中的regionInfo和server列的值之后,根據(jù)server列的值,客戶端與RegionServer建立連接,將regionInfo列的數(shù)據(jù)提交給RegionServer。
RegionServer接收客戶端的查詢請求之后,首先創(chuàng)建RegionScanner對象,通過該對象定位到HRegion,然后HRegin對象創(chuàng)建StoreScanner,通過StoreScanner定位到HStore,HStore對象創(chuàng)建1個MemStoreScanner對象,這個對象負(fù)責(zé)去MemStore查詢有沒有相關(guān)數(shù)據(jù),有則返回,沒有就創(chuàng)建多個StoreFileScanner對象,每個對象否則去不同的HFile中查詢數(shù)據(jù),如果找到了則返回,如果沒有就返回null。
HBase寫的過程:當(dāng)客戶端進(jìn)行put操作時,數(shù)據(jù)會自動保存到HRegion上,在HRegionServer中,找到對應(yīng)要寫入的HRegion之后,數(shù)據(jù)會寫入到HLog中并同時寫入到HStore的MemStore內(nèi)存中,會在內(nèi)存中按照行鍵對數(shù)據(jù)進(jìn)行排序,當(dāng)內(nèi)存中的數(shù)據(jù)達(dá)到一定閾值后,會觸發(fā)flush操作。Flush操作主要就是把MemStore內(nèi)存中的數(shù)據(jù)寫入到StoreFile中,當(dāng)HDFS中的StoreFile個數(shù)達(dá)到一定的閾值后,會觸發(fā)compact(合并)操作,將HDFS中所有的StoreFile合并成一個新的SotreFile,在合并的時候會按照行鍵進(jìn)行排序,并且會進(jìn)行版本合并和數(shù)據(jù)刪除。當(dāng)StoreFile通過不斷的合并操作后,StoreFile文件會變得越來越大,當(dāng)這個StoreFile達(dá)到一定的閾值后,會觸發(fā)Split(切分)操作,同時把當(dāng)前region拆分成兩個新的region,原有的region會下線,新的兩個region會被HMaster分配到相應(yīng)的HRegionServer上,使得原來一個Region的壓力得以分流到兩個Region上,其實(shí),HBase只是增加數(shù)據(jù),更新和刪除操作都是compact階段做的,所以,客戶端寫入成功的標(biāo)志是HLog和MemStore中都有數(shù)據(jù)。
先寫HLog,但是如果顯示MemSotre也是沒問題的,因?yàn)镸emStore的MVCC(多版本并發(fā)控制)不會向前滾動,這些變化在更新MVCC之前,Scan是無法看到的,所以在寫入HLog之前,即使MemStore有數(shù)據(jù),客戶端也查詢不到。
HBASE的優(yōu)化
1. 對行鍵、列族、列名稱長度優(yōu)化,HBase引入block的原因是block中包含了很多的key/value,每個key中包含rowkey、列族、列、時間戳,減少rowkey、列族、列的長度就能減少block的數(shù)量,否則會增加region server、region、索引、內(nèi)存、查詢范圍。
2. 當(dāng)進(jìn)行批量處理數(shù)據(jù)時,客戶端會將數(shù)據(jù)先保存到客戶端的緩存中,HBASE默認(rèn)是開啟隱式刷寫的,當(dāng)關(guān)閉隱式刷寫時,put的數(shù)據(jù)也會保存到客戶端的緩存中,直到調(diào)用刷寫命令時,才會保存到HRegion中。
3.查詢優(yōu)化:
*設(shè)置scan緩存。
*查詢時指定列。
*使用完ResultScanner后及時關(guān)閉。
*查詢時盡量使用過濾器或協(xié)處理器,減少數(shù)據(jù)量。
*將查詢頻率較高的數(shù)據(jù)緩存起來。例如緩存到redis中。
*使用HtableTool查詢。
*使用批量讀取Htable.get(List
4.寫入優(yōu)化:
*關(guān)閉WAL日志,如果開啟了WAL日志,可以修改日志寫入hdfs的時間。(存在數(shù)據(jù)丟失的風(fēng)險優(yōu)化)
*設(shè)置AutoFlush為false。(存在數(shù)據(jù)丟失的風(fēng)險優(yōu)化)
*Region預(yù)分區(qū),兩種方式,hbase自帶的RegionSplitter,和自己實(shí)現(xiàn),一般使用hbase自帶的。
*通過HtableTool寫入。
*使用批量寫入Htable.put(List
5.配置方面優(yōu)化:
*設(shè)置RegionServer的處理線程數(shù)量,但是需要先進(jìn)行測試。
*調(diào)整BlockChche或者M(jìn)emStore內(nèi)存大小大小,如果讀的較多則將BlockChche增大,如果寫的較多則MemStore調(diào)大。但兩者之和不能超過
一個RegionServer總內(nèi)存大小的80%。(StoreFile的flush)
*調(diào)整StoreFile合并的數(shù)量限制,太少則合并次數(shù)頻繁嚴(yán)重影響性能,太大會到這查詢變慢。(StoreFile的compart)
*設(shè)置單個StoreFile的大小,調(diào)整分裂的性能。(StoreFile的spill)
6.行鍵設(shè)計(jì):最大長度64KB
*因?yàn)閔base會的rowkey按照字節(jié)順序由小到大排序,因此需要保持rowkey松散性,避免單調(diào)遞增,防止出現(xiàn)region熱點(diǎn)。
*因?yàn)閔base只對rowkey建立索引,所以要保證行鍵的唯一性。
*因?yàn)樾墟I是不可變的,所以在設(shè)計(jì)之初要滿足業(yè)務(wù)需求。
*因?yàn)閞owkey是冗余存儲,所以只要滿足以上要求,行鍵長度盡量短。
7.列族設(shè)計(jì):
*因?yàn)閔base底層是以列族為單位存儲的,一個列族中的數(shù)據(jù)會被存放在一個磁盤文件中,所以應(yīng)該將具有相同特性的列放到一個列族中。
*一個表中的列族盡量不要太多,保持到1-2個最好。
*如果是更新頻繁并且只需要最獲取最新數(shù)據(jù)可以設(shè)置,單元格的時間版本為1,默認(rèn)為3(VERSION)
*可以設(shè)置單元格的生命周期(TTL)
*隨機(jī)讀較多開啟布隆過濾器。
CAP原理
Consistency強(qiáng)一致性、availability可用性、partition tolerance分區(qū)容錯性,在一個大規(guī)模的分布式服務(wù)系統(tǒng)中不可能同時存在。
C指的是更新操作成功并返回客戶端完成后,分布式的所有節(jié)點(diǎn)在同一時間的數(shù)據(jù)完全一致
A指的是讀和寫操作都能成功
P指的是節(jié)點(diǎn)宕機(jī)不影響服務(wù)的運(yùn)行。
HBASE只支持CP
到此,相信大家對“HBase的讀寫流程以及優(yōu)化方法”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
當(dāng)前文章:HBase的讀寫流程以及優(yōu)化方法
分享地址:http://www.dlmjj.cn/article/iiocgh.html


咨詢
建站咨詢
