Hadoop HBase概念學習系列之META表和ROOT表(六)

 

  在 html

HBase裏的HRegion

  裏,談過,HRegion是按照表名+開始/結束主鍵,即表名+主鍵範圍來區分的。因爲主鍵範圍是連續的,因此通常用開始主鍵就能夠表示相應的HRegion了。服務器

  不過,由於咱們有合併和分隔操做,此時,若是正好在執行這些操做的過程當中出現死機,那麼就可能存在多份表名和開始主鍵相同的數據,這樣的話,只有光靠開始主鍵就不夠了,這就須要經過HBase的元數據信息來區分哪一份纔是正確的數據文件。爲此,爲了區分這樣的狀況,每一個HRegion都有一個'regionId'來標識它的惟一性。post

  因此一個HRegion的表達符,最終是:  表名+開始主鍵+惟一Id,即tablename+startkey+regionIdurl

  咱們能夠用這個識別符來區分不一樣的HRegion,這些數據就是元數據(META),而元數據自己也是被保存在HRegion裏面的,因此,咱們稱呼這個表爲元數據表(META表),即META Table,裏面保存的就是HRegion標識符和實際HRegion服務器的映射關係spa

  

  元數據表也會增加,而且可能被分割爲幾個HRegion,爲了定位這些HRegion,咱們採用一個根數據表(ROOT表),即ROOT Table,它保存了全部元數據表的位置,而跟數據表是不能被分割的,永遠只保存在一個HRegion3d

  在HBase啓動的時候,主服務器先去掃描根數據表,由於這個表只會有一個HRegion,全部這個HRegion的名字是被寫死的。固然要把跟數據表分配到一個HRegion服務器中須要必定的時間。code

  當根數據表被分配好以後,主服務器就會掃描根數據表,獲取元數據表的名字和位置,而後把元數據表分配到不一樣的HRegion服務器中。最後就是掃描元數據表,找到全部HRegion區域的信息,把它們分配給不一樣的HRegion服務器。server

  主服務器在內存中保存着當前活躍的HRegion服務器的數據,所以若是主服務器死機,整個系統也就沒法訪問了,這時服務器的信息也就沒有必要保存到文件裏面了。htm

 

  元數據和跟數據表的每一行都包含一個列簇(info列簇):對象

info:regioninfo包含了一個串行化的HRegionInfo對象

info:server保存了一個字符串,是服務器的地址HServerAddress.toString()

info:startcode是一個長整型的數字字符串,它是在HRegion服務器啓動的時候傳給主服務器的,讓主服務器肯定這個HRegion服務器的信息有沒有更改。

  所以,當一個客戶端拿到根數據表地址之後,就沒有必要再鏈接主服務器了,主服務器發負載相對就小了不少。它只會處理超時的HRegion服務器,並在啓動的時候掃描根數據表和元數據表,以及返回根數據表的HRegion服務器地址。

 

 

 

    META表,至關於ROOT表來講,存儲更多。一個單個的META表可以在Rgion中包含全部的信息,可以詳細到如此地步。

   假設,把ROOT表當作一級目錄,則META表是詳細的一級目錄。

 

 

 

 

總結

  ROOT表能夠看做是一張簡表,簡單的信息,記錄不是不少,但ROOT表記錄了META的信息。

  META表能夠看做是一張詳表,記錄了全部HRegion的信息。ROOT表也記錄了HRegion表的信息,但沒META表記錄詳細。

  理解了麼,各博友們。~

相關文章
相關標籤/搜索