日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
HBase的讀寫流程以及優(yōu)化方法

本篇內(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