Hadoop學習四十一 HBase基礎

2021-09-02 03:36:45 字數 2734 閱讀 8850

一.概述

再次學習hbase實戰和hbase權威指南時,對hbase了解又深了許多。本文列出一些值得關注的點。

二.hbase物理和邏輯儲存結構

user表包含兩個列族info activity,為此表預分割槽[1,3) [3,正無窮),此時user表在hbase裡的物理和邏輯儲存結構如上圖。

乙個user表的資料儲存在兩個region上,這兩個region可能在乙個regionserver上,也可能在兩個不同的regionserver上。

乙個regionserver可以有多個region,這些region共享乙個wal(write-ahead log預寫式日誌,也稱hlog)。

乙個region可以包含多個列族的資料。

乙個列族由乙個memstore,乙個blockcache和多個hfile組成。兩個不同列族的memstore  blockcache 毫無關係。

也有書裡談到store這個概念,實際就是對於乙個列族的管轄區域。

三.hbase讀寫路徑

執行寫入時會寫到兩個地方:wal和memstore,只有當這兩個地方的變化資訊都被成功寫入並確認後,才認為寫動作完成。memstore填滿(hbase.hregion.memstore.flush.size預設64m,在hbase0.96 habse-default裡為128m)後被flush到硬碟,所以客戶端的寫操作不會與底層的hfile直接互動。

從hbase中讀出一行,首先會檢查memstore等待被flush的資料,其次檢查blockcache是否包含該行的block資訊,最後訪問硬碟上的hfile。blockcache使用lru演算法,快取的是block塊而非block所有。

四.客戶端寫緩衝區

每乙個put操作實際上都是乙個rpc操作。當然,hbase的api配備了乙個寫緩衝區,它負責收集put請求,然後呼叫rpc操作一次性將put傳送給伺服器。

注意這個緩衝區位於客戶端,預設情況下是禁用的。htable的setautoflush(false)方法可以將自動重新整理autoflush設定為false來啟用緩衝區。

@override

public boolean isautoflush()

deprecated

@override

public void setautoflush(boolean autoflush)

/***

*/@override

public void setautoflushto(boolean autoflush)

/***

*/@override

public void setautoflush(boolean autoflush, boolean clearbufferonfail)

也可以配置此緩衝區大小。預設大小為2mb。

@override

public long getwritebuffersize()

public void setwritebuffersize(long writebuffersize) throws ioexception

當需要強制把資料寫到伺服器時,使用

@override

public void flushcommits() throws interruptedioexception, retrie***haustedwithdetail***ception

此緩衝區沒有任何備份,這些資料可能丟失。

五.大小合併 自動分割槽

首先要明白乙個概念,大小合併是針對hfile,自動分割槽是針對region。

當乙個region裡的儲存檔案增長到大於配置的hbase.hregion.max.filesize預設256m時,region會被一分為二。關於分割槽的過程,我還沒弄太明白。

大小合併

小合併:

將多個hfile合併成乙個hfile。經過讀-合併寫-刪除步驟。

小合併的檔案數量由hbase.hstore.compaction.min預設3且要求大於等於2和hbase.hstore.compaction.max預設10決定。

小合併的檔案大小由hbase.hstore.compaction.min.size預設64m和hbase.hstore.compaction.max.size預設long.max_value決定。hase.hstore.compaction.min.size比較奇葩,小於這個值才被include。既然這樣,hbase.hstore.compaction.max.si還有何用?

大合併:

將給定region的乙個列族的所有hfile合併成乙個hfile。

大合併是hbase清理被刪除的唯一機會。如果乙個單元的版本超過了最大數量,也會在大合併時刪掉。

觸發大合併:shell命令或客戶端api;距離上次大合併是否超過hbase.hregion.majorcompaction預設24小時;小合併的檔案就是乙個列族的所有檔案且滿足檔案大合併大小要求,小合併被提公升為大合併。

六.hfile

hfile塊大小64kb怎麼理解?先看乙個hfile的結構。

keyvalue的結構

CUDA學習(四十一)

表面功能 在下面的部分中,boundarymode指定邊界模式,即處理超出範圍的表面座標的方式 它等於cudaboundarymodeclamp 在這種情況下,超出範圍的座標被鉗位到有效範圍 或cudaboundarymodezero 在這種情況下超出範圍的讀取返回零並且超出範圍的寫入被忽略 或cu...

題解四十一

請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如,在下面的3 4的矩陣中包含一條字串 bfce 的路徑 路徑中的字母用加粗標出 a ...

(四十一)auto命令

當我們給變數宣告時,通常採用int,或者double等整型或者浮點型別來宣告,例如int a double b 等。當我們遇見乙個常量,也可以用另外一種方法進行宣告。在c 11後方能使用。但是怎麼知道是不是c 11 那就是auto,例如 auto a 1 當使用auto的時候,編譯器會根據值自動賦予...