HBase基礎知識(三):HBase架構進階、讀寫流程、MemStoreFlush、StoreFile Compaction、Region Split

1. 架構原理

1)StoreFile

保存實際數據的物理文件,StoreFile以HFile的形式存儲在HDFS上。每個Store會有一個或多個StoreFile(HFile),數據在每個StoreFile中都是有序的。

2)MemStore

寫緩存,由于HFile中的數據要求是有序的,所以數據是先存儲在MemStore中,排好序后,等到達刷寫時機才會刷寫到HFile,每次刷寫都會形成一個新的HFile。

3)WAL

由于數據要經MemStore排序后才能刷寫到HFile,但把數據保存在內存中會有很高的概率導致數據丟失,為了解決這個問題,數據會先寫在一個叫做Write-Aheadlogfile的文件中,然后再寫入MemStore中。所以在系統出現故障的時候,數據可以通過這個日志文件重建。

2. 寫流程

寫流程:

1)Client先訪問zookeeper,獲取hbase:meta表位于哪個RegionServer。

2)訪問對應的RegionServer,獲取hbase:meta表,根據讀請求的namespace:table/rowkey,查詢出目標數據位于哪個RegionServer中的哪個Region中。并將該table的region信息以及meta表的位置信息緩存在客戶端的metacache,方便下次訪問。

3)與目標RegionServer進行通訊;

4)將數據順序寫入(追加)到WAL;

5)將數據寫入對應的MemStore,數據會在MemStore進行排序;

6)向客戶端發送ack;

7)等達到MemStore的刷寫時機后,將數據刷寫到HFile。

3.?MemStoreFlush

MemStore刷寫時機(要記住開始往memstore和停止mestore刷寫的時機。):

  1. 單個Store來看 memstroe 的大小達到了hbase.hregion.memstore.flush.size(默認值128M),其所在region的所有memstore都會刷寫。當memstore的大小達到了hbase.hregion.memstore.flush.size(默認值128M)* hbase.hregion.memstore.block.multiplier(默認值4)時,會阻止繼續往該memstore寫數據。

  2. 從regionerServer中來看regionserver中memstore的總大小達到java_heapsize*hbase.regionserver.global.memstore.size(默認值0.4)*hbase.regionserver.global.memstore.size.lower.limit(默認值0.95),region會按照其所有memstore的大小順序(由大到小)依次進行刷寫。直到regionserver中所有memstore的總大小減小到上述值以下。當 regionserver 中 memstore 的總大小達到 java_heapsize*hbase.regionserver.global.memstore.size(默認值0.4)時,會阻止繼續往所有的memstore寫數據。

  3. 到達自動刷寫的時間,也會觸發memstoreflush。自動刷新的時間間隔由該屬性進行配置hbase.regionserver.optionalcacheflushinterval(默認1小時)。

  4. 當 WAL 文件的數量超過 hbase.regionserver.max.logs,region 會按照時間順序依次進 行刷寫,直到 WAL 文件數量減小到 hbase.regionserver.max.log 以下(該屬性名已經廢棄, 現無需手動設置,最大值為 32)。

4. 讀流程

讀流程 :發送Get請求,磁盤和內存一起讀,為了加速磁盤的讀速度,加了一個Block Cache

1)Client 先訪問 zookeeper,獲取 hbase:meta 表位于哪個 Region Server。

2)訪問對應的 Region Server,獲取 hbase:meta 表,根據讀請求的 namespace:table/rowkey, 查詢出目標數據位于哪個 Region Server 中的哪個 Region 中。并將該 table 的 region 信息以 及 meta 表的位置信息緩存在客戶端的 meta cache,方便下次訪問。

3)與目標 Region Server 進行通訊;

4)分別在 Block Cache(讀緩存),MemStore 和 Store File(HFile)中查詢目標數據,并將查到的所有數據進行合并。此處所有數據是指同一條數據的不同版本(time stamp)或者不同的類型(Put/Delete)。

5) 將從文件中查詢到的數據塊(Block,HFile 數據存儲單元,默認大小為 64KB)緩存到 Block Cache。

6)將合并后的最終結果返回給客戶端。

5.?StoreFile Compaction

由于memstore每次刷寫都會生成一個新的HFile,且同一個字段的不同版本(timestamp) 和不同類型(Put/Delete)有可能會分布在不同的 HFile 中,因此查詢時需要遍歷所有的 HFile。

為了減少 HFile 的個數,以及清理掉過期和刪除的數據,會進行 StoreFile Compaction。 Compaction 分為兩種,分別是 Minor Compaction 和 Major Compaction。Minor Compaction 會將臨近的若干個較小的 HFile 合并成一個較大的 HFile,但不會清理過期和刪除的數據。 Major Compaction 會將一個 Store 下的所有的 HFile 合并成一個大 HFile,并且會清理掉過期 和刪除的數據。

6.?Region Split

默認情況下,每個Table 起初只有一個 Region,隨著數據的不斷寫入,Region 會自動進行拆分。剛拆分時,兩個子 Region 都位于當前的 Region Server,但處于負載均衡的考慮, HMaster 有可能會將某個 Region 轉移給其他的 Region Server。

Region Split 時機:

1.當1個region中的某個Store下所有StoreFile的總大小超過hbase.hregion.max.filesize, 該 Region 就會進行拆分(0.94 版本之前)。

2.當 1 個 region 中 的 某 個 Store 下所有 StoreFile 的 總 大 小 超 過 Min(R^2 * "hbase.hregion.memstore.flush.size",hbase.hregion.max.filesize"),該 Region 就會進行拆分,其 中 R 為當前 Region Server 中屬于該 Table 的個數(0.94 版本之后)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396109.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396109.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396109.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CentOS6.7-64bit編譯hadoop2.6.4

1.下載maven(apache-maven-3.3.3-bin.tar.gz) http://archive.apache.org/dist/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz 2.安裝maven tar -zxvf apache-maven-3.3.3-bin.tar.gz -C /usr/local 3.添加環境變量 vim /etc/profileexpo…

第一章節測試

大家在做第一章測試題時,需要復習如下相關知識點:編譯型VS解釋型、變量名規范、數據類型、程序交互、格式化輸出、運算符、流程控制。1.簡述編譯型與解釋型語言的區別,且分別列出你知道的那些語言屬于編譯型,哪些屬于解釋型。2.執…

VS2015升級Update2之后Cordova程序提示:此應用程序無法在此電腦上運行

VS2015在升級到Update2之后,有可能出現如下異常,在運行Cordova項目時提示: 查看輸出面板會有亂碼錯誤信息: 出現此問題的原因是在于npm程序損壞了。vs調用的npm程序并不是在node安裝目錄下的npm,而是在: C:…

gitter 卸載_最佳Gitter渠道:學習編碼

gitter 卸載by Gitter通過吉特 最佳Gitter渠道:學習編碼 (Best Gitter channels for: Learning to Code) If you’re learning to code in 2016, you’re in luck — thanks to a huge range of helpful websites, MOOCs, books, and learners’ communities, you’…

雙鑒探測器是哪兩種探測方式結合_老師傅帶你看懂火災探測器的種類和基本原理,看完漲知識了...

為什么極早期的火災探測十分關鍵?火災的產生我們生活的環境中充滿著大量的可燃物質,空氣中的氧氣含量通常也足夠滿足燃燒條件。但是還有另外一個形成火災的條件就是:點火能量必須可以驅使氧化的過程開始。點火能量源可以是多種多樣的&#xf…

JS入門熟知

JS是面向對象的語言 封裝繼承多態聚集(對象中具有引用其他對象的能力)JS使用中絕大多數情況不需要進行面向對象的設計,很多情況是使用已經設計好,準備好的對象,基于對象的語言. JS的使用(引入) jsp、html中直接在script標簽中書寫…

c語言專業實習報告,C語言個人實習報告(范文1)

《C語言個人實習報告.doc》由會員分享,可免費在線閱讀全文,更多與《C語言個人實習報告》相關文檔資源請在幫幫文庫(www.woc88.com)數億文檔庫存里搜索。1、好的學習興趣,獨立的編程風格。(組C語言實訓報告課題名稱:通訊錄管理系統…

分析不同類型頁面渲染過程

現在讓我們看看瀏覽器從網絡上加載資源所耗費的時間(我們忽略從緩存以及從CDN等中間商網絡上加載資源),我們首先要知道的是: 一個到無服務的網路往返 (傳播延遲) 大約100ms服務器對于HTML文檔的響應大約100ms,對于其他…

引入 javascript_在您JavaScript項目中引入類型安全性? 再想一想

引入 javascriptby James Wright詹姆斯賴特(James Wright) 在您JavaScript項目中引入類型安全性? 再想一想 (Introducing Type Safety To Your JavaScript Project? Think Again) 更新— 2017年2月1日 (Update — 1st February 2017) I’ve heard various counter…

劣幣驅逐良幣通俗解釋_如何通俗理解劣幣驅逐良幣的問題,同時如何扭轉這個現象?...

以牛奶為例談劣幣驅逐良幣。【原來】大家都賣的純正的純牛奶,因為。牛奶的來源和生產工藝基本上都差不多,所以說產品的品質也沒有什么大的差異。【后來】奶制品企業為了爭奪市場開始打價格戰,你賣5塊我就賣4塊,你賣4塊我就賣3塊5&…

c語言里 如何取得線程的lpparameter'參數,請問線程函數如何訪問對話框類中的變量...

我線程函數定義在對話框類的實現文件中需要訪問對話框類頭文件中聲明的變量怎么才可以?i_noname(晚九朝五) 于 2005-9-15 16:14:25DWORD WINAPI Proc(LPVOID lpParameter ){CDialog *pDlg (CDialog *)lpParameter;...}啟用線程時把對話框指針傳進去AfxBeginThread(…

Android內存優化——內存泄露檢測分析方法

上一篇文章總結了一些常見的內存泄露場景及優化方案,這篇文章繼續總結內存泄露的一些常用的檢測和分析方法。 Lint代碼檢查 AndroidStudio自動Lint代碼檢查工具,一些常見的代碼警告Lint工具都會給我們提示。使用也比較簡單: Analyze —> I…

ImageLoader加載圖片

先導universal-image-loader-1.9.3包 在application配置 android:name".MyApplication" intent權限 1 package com.ch.day13_imageloaderdemo;2 3 import java.io.File;4 5 import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache; 6 impor…

hackintosh黑蘋果_為什么您的下一個Mac應該是Hackintosh?

hackintosh黑蘋果by Sebastian Dobrincu塞巴斯蒂安多布林庫(Sebastian Dobrincu) 為什么您的下一個Mac應該是Hackintosh? (Why Your Next Mac Should Be a Hackintosh ?) I just finished a 48-hour Hackintosh building marathon. It was a fun experience and I…

一張圖解釋什么是遺傳算法_遺傳算法簡介及代碼詳解

(allele)數據值,屬性,值基因座(locus)位置,iterator位置表現型(phenotype)參數集,解碼結構,候選解染色體:又可以叫做基因型個體(individuals)群體/種群(population):一定數量的個體組成&#xf…

c語言程序設計學生程序查詢,《c語言程序設計報告-學生信息管理系統》.doc

《c語言程序設計報告-學生信息管理系統》中南大學??C語言程序設計實踐報告?????題 目 學生信息管理系統學生姓名 張眼指導教師 劉偉榮學 院 信息科學與工程學院專業班級 電氣信息1113班完成時間 2012年6月28日星期四?1.設計任務及設計目標學生信息管理系統是基于系統主…

ListString 和 ArrayListString的區別

最近對這兩個問題比較懵逼&#xff0c;關于List和ArrayList、List<String> list new ArrayList<String>(); 好了&#xff0c;先搞明白List 和 ArrayList吧。 List是一個接口&#xff0c;是Collection接口的一個子接口&#xff0c;是一個有序的集合。 ArrayList是L…

java城市級聯一次查詢_我的城市沒有任何設計活動,所以我自己組織了一次。...

java城市級聯一次查詢by Marty Laurita由Marty Laurita 我的城市沒有任何設計活動&#xff0c;所以我自己組織了一次。 (There weren’t any design events in my city, so I organized one myself.) “The meeting of two personalities is like the contact of two chemical…

Access denied for user 'root'@'localhost' (using password: YES) 問題解決小記

初學php&#xff0c;按照視頻安裝后好mysql后 終端運行命令 mysql -u root -p 然后輸入安裝mysql時輸入的密碼六個1&#xff0c;會報這樣的錯誤&#xff1a;Access denied for user rootlocalhost (using password: YES) &#xff1b; 百度了一大堆&#xff0c;大海撈針一般找…

匯編總結2

一、寄存器 一個典型的cpu是由運算器&#xff0c;控制器&#xff0c;寄存器等器件組成的。 內部總線實現CPU內部各個器件之間的聯系 外部總線實現cpu和主板上其他器件的聯系 AX,BX,CX,DX通用寄存器 SI,DI,BP,SP基址和變址寄存器 CS,SS,DS,ES段寄存器 IP,FLAGS指令指針和標志寄存…