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


 

  在 

HBase里的HRegion

  里,談過,HRegion是按照表名+開始/結束主鍵,即表名+主鍵范圍來區分的。由於主鍵范圍是連續的,所以一般用開始主鍵就可以表示相應的HRegion了。

  不過,因為我們有合並和分隔操作,此時,如果正好在執行這些操作的過程中出現死機,那么就可能存在多份表名和開始主鍵相同的數據,這樣的話,只有光靠開始主鍵就不夠了,這就需要通過HBase的元數據信息來區分哪一份才是正確的數據文件。為此,為了區分這樣的情況,每個HRegion都有一個'regionId'來標識它的唯一性。

  所以一個HRegion的表達符,最終是:  表名+開始主鍵+唯一Id,即tablename+startkey+regionId

  我們可以用這個識別符來區分不同的HRegion,這些數據就是元數據(META),而元數據本身也是被保存在HRegion里面的,所以,我們稱呼這個表為元數據表(META表),即META Table,里面保存的就是HRegion標識符和實際HRegion服務器的映射關系

  

  元數據表也會增長,並且可能被分割為幾個HRegion,為了定位這些HRegion,我們采用一個根數據表(ROOT表),即ROOT Table,它保存了所有元數據表的位置,而跟數據表是不能被分割的,永遠只保存在一個HRegion

  在HBase啟動的時候,主服務器先去掃描根數據表,因為這個表只會有一個HRegion,所有這個HRegion的名字是被寫死的。當然要把跟數據表分配到一個HRegion服務器中需要一定的時間。

  當根數據表被分配好之后,主服務器就會掃描根數據表,獲取元數據表的名字和位置,然后把元數據表分配到不同的HRegion服務器中。最后就是掃描元數據表,找到所有HRegion區域的信息,把它們分配給不同的HRegion服務器。

  主服務器在內存中保存着當前活躍的HRegion服務器的數據,因此如果主服務器死機,整個系統也就無法訪問了,這時服務器的信息也就沒有必要保存到文件里面了。

 

  元數據和跟數據表的每一行都包含一個列簇(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表記錄詳細。

  理解了么,各博友們。~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM