【分散式計算】DFS && BigTable

李博Garvin發表於2015-07-22


1.背景



分散式計算的發跡應該是google在2003年發表的三篇paper,分別是GFS、MapReduce、BigTable。其中MapReduce大家都很熟悉了,不懂的同學也可以看看我之前寫的文章【分散式計算】MapReduce的替代者-Parameter Server

為什麼google會搞分散式計算這件事兒呢,因為在那個年代每天會產生幾個T的日誌,但是當時的磁碟只允許儲存幾百G的檔案,07年之前淘寶的所有資料都是用完就刪除的,因為沒地方存。後來,人們認識到資料是值錢的,所以需要一種儲存策略來儲存大資料,於是google就用了分散式儲存系統。

這裡主要介紹下GFS和BigTable。

2.DFS(對應hadoop的HDFS)



DFS是一種分散式檔案儲存系統。常規的檔案系統是樹狀結構儲存的,每個檔案有一個指標指到磁碟上的某個區域。
早期的DFS是單點結構的,有一個master節點負責管理每個檔案的namespace(檔案儲存在哪個機器的哪個磁碟上,如s3/dick2)。要儲存一個很大的資料,比方說一個10P的資料,首先是切片,比如說按照64M切片,每個block存在某一個機器的某個磁碟上。整體的結構如下:


這裡面就會衍生出三個問題,
       第一個是master節點如果掛了,整個檔案系統就不能work了,這個是單點的一個缺陷。
       第二個問題是,一但slave中的某個磁碟破損了,磁碟破損率在2%左右,也就是每天都有破損的。這裡有一個冗餘機制,就是每個block會分配到多個磁碟上備份~
       第三個問題是,磁碟是不停的被讀寫的,master是如何獲得每個磁碟的資訊的,這個功能依賴於一種叫做heart-beat的機制,每隔幾秒鐘,master就要遍歷每個slave得到它們的最新狀況。


3.BigTable(對應Hadoop的HBase)



如果說DFS是磁碟級別的分散式儲存,那麼BigTable就是記憶體級別的分散式儲存。BigTable的儲存結構是HashTable,以key-value的形式儲存。應用場景是一些線上的service。比方說GoogleEarth,每個地名(key)會對應一系列的meta(value),世界上有無數個地名,這是一個很大的檔案。如果從磁碟中拿,比方說輸入一個巷子的名字,過10分鐘使用者才能拿到結果,這是不能接受的,我們需要將這些key-value做成cache快取在記憶體中。顯然單機記憶體的極限,比方說300G也是無法快取這麼大的檔案的。這就需要多個機器一起快取,這個策略就是BigTable。

但是,一但一個機器出現failover的情況,整個快取就出現了gap,BigTable有一個機制就是,不斷地將檔案underfile到DFS中,防止檔案丟失。




/********************************

* 本文來自部落格  “李博Garvin“

* 轉載請標明出處:http://blog.csdn.net/buptgshengod

******************************************/





相關文章