Hbase內(nèi)部是什么機(jī)制,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
創(chuàng)新互聯(lián)建站為客戶(hù)提供專(zhuān)業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、程序、域名、空間一條龍服務(wù),提供基于WEB的系統(tǒng)開(kāi)發(fā). 服務(wù)項(xiàng)目涵蓋了網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站程序開(kāi)發(fā)、WEB系統(tǒng)開(kāi)發(fā)、微信二次開(kāi)發(fā)、手機(jī)網(wǎng)站開(kāi)發(fā)等網(wǎng)站方面業(yè)務(wù)。
眾所周知,HBase是一個(gè)非關(guān)系型數(shù)據(jù)庫(kù),它的特征是分布式、列式存儲(chǔ)、開(kāi)源和版本化。無(wú)論是在大數(shù)據(jù)的面試中,還是大數(shù)據(jù)的工作中,這都是一個(gè)經(jīng)常會(huì)出現(xiàn)的難題,然而卻很少人能夠說(shuō)清Hbase內(nèi)部機(jī)制。今天我們就花些時(shí)間聊聊Hbase內(nèi)部是什么機(jī)制。
在 HBase 中無(wú)論是增加新行還是修改已有的行,其內(nèi)部流程都是相同的。HBase 接到命令后存下變化信息,或者寫(xiě)入失敗拋出異常。默認(rèn)情況下,執(zhí)行寫(xiě)入時(shí)會(huì)寫(xiě)到兩個(gè)地方:預(yù)寫(xiě)式日志(write-ahead log,也稱(chēng) HLog)和 MemStore。HBase 的默認(rèn)方式是把寫(xiě)入動(dòng)作記錄在這兩個(gè)地方,以保證數(shù)據(jù)持久化。只有當(dāng)這兩個(gè)地方的變化信息都寫(xiě)入并確認(rèn)后,才認(rèn)為寫(xiě)動(dòng)作完成。
MemStore 是內(nèi)存里的寫(xiě)入緩沖區(qū),HBase 中數(shù)據(jù)在永久寫(xiě)入硬盤(pán)之前在這里累積。當(dāng)MemStore 填滿(mǎn)后,其中的數(shù)據(jù)會(huì)刷寫(xiě)到硬盤(pán),生成一個(gè)HFile。HFile 是HBase 使用的底層存儲(chǔ)格式。HFile 對(duì)應(yīng)于列族,一個(gè)列族可以有多個(gè) HFile,但一個(gè) HFile 不能存儲(chǔ)多個(gè)列族的數(shù)據(jù)。在集群的每個(gè)節(jié)點(diǎn)上,每個(gè)列族有一個(gè)MemStore。
大型分布式系統(tǒng)中硬件故障很常見(jiàn),HBase 也不例外。設(shè)想一下,如果MemStore 還沒(méi)有刷寫(xiě),服務(wù)器就崩潰了,內(nèi)存中沒(méi)有寫(xiě)入硬盤(pán)的數(shù)據(jù)就會(huì)丟失。HBase 的應(yīng)對(duì)辦法是在寫(xiě)動(dòng)作完成之前先寫(xiě)入WAL。HBase 集群中每臺(tái)服務(wù)器維護(hù)一個(gè) WAL 來(lái)記錄發(fā)生的變化。WAL 是底層文件系統(tǒng)上的一個(gè)文件。直到WAL 新記錄成功寫(xiě)入后,寫(xiě)動(dòng)作才被認(rèn)為成功完成。這可以保證 HBase 和支撐它的文件系統(tǒng)滿(mǎn)足持久性。大多數(shù)情況下,HBase 使用 Hadoop 分布式文件系統(tǒng)(HDFS)來(lái)作為底層文件系統(tǒng)。
如果 HBase 服務(wù)器宕機(jī),沒(méi)有從 MemStore 里刷寫(xiě)到 HFile 的數(shù)據(jù)將可以通過(guò)回放 WAL 來(lái)恢復(fù)。你不需要手工執(zhí)行。Hbase 的內(nèi)部機(jī)制中有恢復(fù)流程部分來(lái)處理。每臺(tái) HBase 服務(wù)器有一個(gè) WAL,這臺(tái)服務(wù)器上的所有表(和它們的列族)共享這個(gè) WAL。
你可能想到,寫(xiě)入時(shí)跳過(guò) WAL 應(yīng)該會(huì)提升寫(xiě)性能。但我們不建議禁用 WAL, 除非你愿意在出問(wèn)題時(shí)丟失數(shù)據(jù)。如果你想測(cè)試一下,如下代碼可以禁用WAL: 注意:不寫(xiě)入 WAL 會(huì)在 RegionServer 故障時(shí)增加丟失數(shù)據(jù)的風(fēng)險(xiǎn)。關(guān)閉 WAL, 出現(xiàn)故障時(shí) HBase 可能無(wú)法恢復(fù)數(shù)據(jù),沒(méi)有刷寫(xiě)到硬盤(pán)的所有寫(xiě)入數(shù)據(jù)都會(huì)丟失。
看完上述內(nèi)容,你們掌握Hbase內(nèi)部是什么機(jī)制的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!