真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

hbase數(shù)據(jù)寫入流程深度解析-創(chuàng)新互聯(lián)

2019/3/28 星期四
hbase數(shù)據(jù)寫入流程深度解析
在看此鏈接之前,可以寫查看 hbase讀寫請(qǐng)求詳細(xì)解釋 中的寫請(qǐng)求流程 https://blog.51cto.com/12445535/2356085

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到墨江網(wǎng)站設(shè)計(jì)與墨江網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋墨江地區(qū)。

簡(jiǎn)介:
hbase設(shè)置之初就是為了應(yīng)對(duì)大量的寫多讀少的應(yīng)用,他出色的寫性能,在一個(gè)100臺(tái)RS的集群可以輕松地支撐每天10T的寫入量。
hbase的寫數(shù)據(jù)流程大體分為3部分
1、客戶端的寫入流程
2、服務(wù)端的寫入流程
3、wal的工作原理

我們先回顧一下hbase寫數(shù)據(jù)流程
寫請(qǐng)求處理過(guò)程小結(jié)
1 client 向region server 提交寫請(qǐng)求
2 region server 找到目標(biāo)region
3 region 檢查數(shù)據(jù)是否與schema 一致
4 如果客戶端沒有指定版本,則獲取當(dāng)前系統(tǒng)時(shí)間作為數(shù)據(jù)版本
5 將更新寫入WAL log
6 將更新寫入Memstore
7 判斷Memstore 的是否需要flush 為Store 文件。

第一部分:客戶端的寫入流程
客戶端流程解析:
1、用戶提交put請(qǐng)求后,HBase客戶端會(huì)將put請(qǐng)求添加到本地buffer中,符合一定條件就會(huì)通過(guò)AsyncProcess異步批量提交。
HBase默認(rèn)設(shè)置autoflush=true,表示put請(qǐng)求直接會(huì)提交給服務(wù)器進(jìn)行處理;
2、用戶可以設(shè)置autoflush=false,這樣的話put請(qǐng)求會(huì)首先放到本地buffer,等到本地buffer大小超過(guò)一定閾值(默認(rèn)為2M,可以通過(guò)配置文件配置)之后才會(huì)提交。很顯然,后者采用group commit機(jī)制提交請(qǐng)求,可以極大地提升寫入性能,但是因?yàn)闆]有保護(hù)機(jī)制,如果客戶端崩潰的話會(huì)導(dǎo)致提交的請(qǐng)求丟失。
//提示:
cdh集群中hbase默認(rèn)是使用autoflush=false 也就是首先會(huì)把數(shù)據(jù)放在本地的buffer中
HBase 客戶端寫入緩沖
hbase.client.write.buffer = 2M //寫入緩沖區(qū)大小(以字節(jié)為單位)。較大緩沖區(qū)需要客戶端和服務(wù)器中有較大內(nèi)存,因?yàn)榉?wù)器將實(shí)例化已通過(guò)的寫入緩沖區(qū)并進(jìn)行處理,這會(huì)降低遠(yuǎn)程過(guò)程調(diào)用 (RPC) 的數(shù)量。為了估計(jì)服務(wù)器已使用內(nèi)存的數(shù)量,請(qǐng)用值“hbase.client.write.buffer”乘以“hbase.regionserver.handler.count”。
HBase Region Server 處理程序計(jì)數(shù)
hbase.regionserver.handler.count = 30 //RegionServer 中啟動(dòng)的 RPC 服務(wù)器實(shí)例數(shù)量
3、在提交給服務(wù)端之前,HBase會(huì)在元數(shù)據(jù)表.meta.中根據(jù)rowkey找到它們歸屬的region server,這個(gè)定位的過(guò)程是通過(guò)HConnection的locateRegion方法獲得的。如果是批量請(qǐng)求的話還會(huì)把這些rowkey按照HRegionLocation分組,每個(gè)分組可以對(duì)應(yīng)一次RPC請(qǐng)求。
4、HBase會(huì)為每個(gè)HRegionLocation構(gòu)造一個(gè)遠(yuǎn)程RPC請(qǐng)求MultiServerCallable,然后通過(guò)rpcCallerFactory. newCaller()執(zhí)行調(diào)用,忽略掉失敗重新提交和錯(cuò)誤處理,客戶端的提交操作到此結(jié)束。

第二部分:服務(wù)端寫入流程
服務(wù)端流程解析
(1)獲取行鎖、Region更新共享鎖 -》(2)開始寫事務(wù) -》(3)寫緩存memstore -》(4)構(gòu)造waledit并append hlog - 》 (5)
釋放行鎖,共享鎖 - 》 (6)sync hlog -》(7)結(jié)束寫事務(wù) - 》(8) flush memstore
//解釋
(1)獲取行鎖、Region更新共享鎖: HBase中使用行鎖保證對(duì)同一行數(shù)據(jù)的更新都是互斥操作,用以保證更新的原子性,要么更新成功,要么失敗。
(2)開始寫事務(wù):獲取write number,用于實(shí)現(xiàn)MVCC,實(shí)現(xiàn)數(shù)據(jù)的非鎖定讀,在保證讀寫一致性的前提下提高讀取性能。
(3)寫緩存memstore:HBase中每列族都會(huì)對(duì)應(yīng)一個(gè)store,用來(lái)存儲(chǔ)該列數(shù)據(jù)。每個(gè)store都會(huì)有個(gè)寫緩存memstore,用于緩存寫入數(shù)據(jù)。HBase并不會(huì)直接將數(shù)據(jù)落盤,而是先寫入緩存,等緩存滿足一定大小之后再一起落盤。
(4)Append HLog:HBase使用WAL機(jī)制保證數(shù)據(jù)可靠性,即首先寫日志再寫緩存,即使發(fā)生宕機(jī),也可以通過(guò)恢復(fù)HLog還原出原始數(shù)據(jù)。該步驟就是將數(shù)據(jù)構(gòu)造為WALEdit對(duì)象,然后順序?qū)懭際Log中,此時(shí)不需要執(zhí)行sync操作。0.98版本采用了新的寫線程模式實(shí)現(xiàn)HLog日志的寫入,可以使得整個(gè)數(shù)據(jù)更新性能得到極大提升,具體原理見下一個(gè)章節(jié)。
(5)釋放行鎖以及共享鎖
(6)Sync HLog:HLog真正sync到HDFS,在釋放行鎖之后執(zhí)行sync操作是為了盡量減少持鎖時(shí)間,提升寫性能。如果Sync失敗,執(zhí)行回滾操作將memstore中已經(jīng)寫入的數(shù)據(jù)移除。
(7)結(jié)束寫事務(wù):此時(shí)該線程的更新操作才會(huì)對(duì)其他讀請(qǐng)求可見,更新才實(shí)際生效。具體分析見文章《數(shù)據(jù)庫(kù)事務(wù)系列-HBase行級(jí)事務(wù)模型》
(8)flush memstore:當(dāng)寫緩存滿128M之后,會(huì)啟動(dòng)flush線程將數(shù)據(jù)刷新到硬盤。刷新操作涉及到HFile相關(guān)結(jié)構(gòu),后面會(huì)詳細(xì)對(duì)此進(jìn)行介紹。
//HBase Memstore 刷新大小
hbase.hregion.memstore.flush.size = 128M //如 memstore 大小超過(guò)此值(字節(jié)數(shù)),Memstore 將刷新到磁盤。通過(guò)運(yùn)行由 hbase.server.thread.wakefrequency 指定的頻率的線程檢查此值。

//提示:
我們需要注意,在服務(wù)器端寫數(shù)據(jù)的時(shí)候,有很多資料是先寫到memstore中,再寫到wal log中,但是,這樣理解不是很準(zhǔn)確,因?yàn)檫@好像,違背了wal log的容災(zāi)機(jī)制,所有,我們可以理解為
先寫入到wal log中再寫入到memstore中的 //這一步源碼中并沒有完全的體現(xiàn)出來(lái),可以理解為同步進(jìn)行。
理論上應(yīng)該是先寫wal log中,HBase這塊實(shí)現(xiàn)是先寫mem,后寫WAL,hbase能夠保證只有這兩個(gè)都寫完了用戶才會(huì)可見(mvcc機(jī)制),而且如果mem寫成功,wal寫失敗,mem會(huì)被回滾。
這樣做之所以it’s ok,是由于MVCC來(lái)保證的,在每個(gè)寫線程開啟事務(wù)的開頭就會(huì)創(chuàng)建全局遞增的write num,但是在HLog更新完畢之后才會(huì)去向前推進(jìn)(roll forward)全局讀取點(diǎn)。
所以在此期間內(nèi),任何讀取線程采用MVCC機(jī)制根據(jù)讀取點(diǎn)讀取數(shù)據(jù),任何寫入/更新操作在HLog未更新完畢之前是不會(huì)向前推進(jìn)讀取點(diǎn)的,因此即使數(shù)據(jù)已經(jīng)寫入memstore,對(duì)讀線程也是不可見的。

第三部分:WAL機(jī)制解析
1、WAL(Write-Ahead Logging)是一種高效的日志算法,幾乎是所有非內(nèi)存數(shù)據(jù)庫(kù)提升寫性能的不二法門,
2、基本原理是在數(shù)據(jù)寫入之前首先順序?qū)懭肴罩?,然后再寫入緩存,等到緩存寫滿之后統(tǒng)一落盤。
3、之所以能夠提升寫性能,是因?yàn)閃AL將一次隨機(jī)寫轉(zhuǎn)化為了一次順序?qū)懠右淮蝺?nèi)存寫。
4、提升寫性能的同時(shí),WAL可以保證數(shù)據(jù)的可靠性,即在任何情況下數(shù)據(jù)不丟失。
5、假如一次寫入完成之后發(fā)生了宕機(jī),即使所有緩存中的數(shù)據(jù)丟失,也可以通過(guò)恢復(fù)日志還原出丟失的數(shù)據(jù)。

WAL持久化等級(jí)
HBase中可以通過(guò)設(shè)置WAL的持久化等級(jí)決定是否開啟WAL機(jī)制、以及HLog的落盤方式。
WAL的持久化等級(jí)分為如下四個(gè)等級(jí):

  1. SKIP_WAL:只寫緩存,不寫HLog日志。這種方式因?yàn)橹粚憙?nèi)存,因此可以極大的提升寫入性能,但是數(shù)據(jù)有丟失的風(fēng)險(xiǎn)。在實(shí)際應(yīng)用過(guò)程中并不建議設(shè)置此等級(jí),除非確認(rèn)不要求數(shù)據(jù)的可靠性。

  2. ASYNC_WAL:異步將數(shù)據(jù)寫入HLog日志中。

  3. SYNC_WAL:同步將數(shù)據(jù)寫入日志文件中,需要注意的是數(shù)據(jù)只是被寫入文件系統(tǒng)中,并沒有真正落盤。

  4. FSYNC_WAL:同步將數(shù)據(jù)寫入日志文件并強(qiáng)制落盤。最嚴(yán)格的日志寫入等級(jí),可以保證數(shù)據(jù)不會(huì)丟失,但是性能相對(duì)比較差。

  5. USER_DEFAULT:默認(rèn)如果用戶沒有指定持久化等級(jí),HBase使用SYNC_WAL等級(jí)持久化數(shù)據(jù)。

用戶可以通過(guò)客戶端設(shè)置WAL持久化等級(jí),代碼:put.setDurability(Durability. SYNC_WAL );
//cdh中
WAL 提供程序
hbase.wal.provider = //可選項(xiàng)為: //RegionServer 應(yīng)用于提前寫入日志的實(shí)施。
RegionServer Default Group
多個(gè) HDFS WAL
單個(gè) HDFS WAL
HBase 默認(rèn)設(shè)置(Single HDFS WAL)

WAL HSM 存儲(chǔ)策略
hbase.wal.storage.policy
RegionServer Default Group
所有副本都在 SSD 上
一個(gè)副本在 SSD 上,其他副本均在 HDD 上
無(wú)(全部在 HDD 上)

關(guān)于wal 和 hlog概念的的升入研究 見參考鏈接
//HLog的寫入模型。HLog的寫入可以分為三個(gè)階段,首先將數(shù)據(jù)對(duì)寫入本地緩存,然后再將本地緩存寫入文件系統(tǒng),最后執(zhí)行sync操作同步到磁盤。

參考鏈接:
http://hbasefly.com/2016/03/23/hbase_writer/

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


分享文章:hbase數(shù)據(jù)寫入流程深度解析-創(chuàng)新互聯(lián)
分享地址:http://weahome.cn/article/dpjdps.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部