GFS.BigTable.MapReduce谷歌論文學習筆記

我的在作hadoop有關的開發,做爲這種國寶始祖級別的論文不管如何都是要拜讀一下的,正好能夠從中瞭解到一些hadoop內部運行機制,讀罷不得不掩卷而嘆,精,精巧,精準 算法


1.GFS(Google File System) 數據庫

GFS提供了一個與位置無關的名字空間,這使得數據能夠爲了負載均衡或災難冗餘等目的在不一樣位置間透明遷移。 服務器

GFS並無在文件系統層面提供任何Cache機制。 數據結構

GFS沒有正對每一個目錄實現可以列出目錄下全部文件的數據結構。 架構

GFS文件以分層目錄的形式組織,用路徑名來表示。支持的經常使用操做:建立新文件,刪除文件,打開文件,關閉文件,讀和寫文件。 負載均衡


Chunk服務器: 分佈式

     Chunk服務器上的元數據,大部分是用戶數據(Chunk塊所切分的64kb塊)的Checksun,和Chunk的版本號。 oop

     Chunk服務器上保存有大量Chunk副本。 性能

     對新加入的Chunk服務器負載的調整:週期性檢查,逐步調整。 google

     Master服務器與Chunk服務器的心跳中,Chunk服務器在心跳信息中報告它所存儲的Chunk子集,Master則經過比較版本號來肯定那些Chunk塊已通過期,Chunk服務器進行刪除。


Chunk塊(64MB):

     GFS存儲文件分割成固定大小的Chunk(64MB)。

     每一個Chunk有不變,惟一的64位標識。

     每一個Chunk副本都以普通Linux文件的形式保存在Chunk服務器上。


Master服務器:

     元數據:之前綴壓縮模式存放的文件名,文件的全部者和權限,文件到Chunk的映射關係,每個Chunk的當前版本號。

     Master服務器內存中擁有完整的從文件到塊的映射表。

     元數據所有保存在內存中。

     經過checkpoint和重演日誌操做來進行災難恢復。


GFS使用租約(lease)機制來保持多個副本見變動順序的一致性。

     Master節點將主Chunk及副本位置返回給客戶機。以後的數據傳輸,檢驗都在Chunk和客戶機之間進行。

     主Chunk服務器定義寫順序。


GFS系統運行的2個基本流程:
  1. Master服務器與Chunk服務器的交互
    Chunk服務器週期性在心跳信息中向Master服務器彙報本身保存的Chunk信息。Master服務器指導Chunk服務器刪除,複製Chunk塊。
    當有新的Chunk服務器進入系統時,Master服務器會在負載均衡算法中會發現這個機器的負載很輕,而後逐步將其餘Chunk塊轉移到次Chunk服務器上。
    當有Chunk服務器掉線時,Master服務器會根據掉線服務器致使的Chunk塊數量離標準配置的差異肯定優先級,來分配新的Chunk服務器存儲丟失的Chunk塊
  2. 文件的存儲過程
    當有一個新的文件須要存儲時。Master服務器保存該文件與Chunk塊的對應信息,並使用lease機制來寫入數據。而且根據Chunk服務器的心跳信息來維護該文件的存儲備份數量。


2.BigTable

BigTable使用Google的分佈式文件系統(GFS)

BigTable的客戶沒必要經過Master服務器來獲取Tablet的位置信息。

BigTable:係數,分佈式,持久化存儲的多維度排序Map。

一個BigTable集羣有不少表,每一個表是一個Tablet的集合。

1.行:行操做是原子操做。

一個表按行劃分爲不一樣的Tablet。

一個Tablet只能分給一個Tablet

一個Tablet服務器上能夠有幾十到上千個Tablet。

對Tablet能夠作的操做有讀寫,合併,分割。

2.列:

一個列族由多個列組成,存放在同一個列族下的全部數據一般都數據同一個類型。

一張表能夠有幾百個列族,一張表能夠有無限多個列。

Tablet能夠按照列族的相關性分類存儲爲不一樣的SSTable(數據的邏輯相關性決定其物理相關性)

  • SSTable:持久化的,排序的,不可更改的Map結構
  • 能夠對SSTable執行的操做:查詢與一個能夠值相關的value,遍歷某個key值範圍內的全部key-value對。
  • 從內部看:SSTable是一些列的數據塊(64kb):在SSTable中查找內容時能夠在內存中加載塊索引。
  • 部分特殊羣組的SSTable能夠設置一直存放在內存中(如METADATA)
  • SSTable的大小能夠有羣組參數指定(能夠自定義)
  • SSTable能夠壓縮後存儲,由於解壓縮很快,不會很影響性能,並且事實上的壓縮比很高
  • 能夠經過對部分特定SSTable設置布隆過濾器來減小對磁盤的訪問

3.行+列:數據項

表中每個數據項均可以包含同一數據的不一樣版本(經過時間戳來進行索引)


BigTable暴多三個主要的組件:鏈接到客戶程序中的庫,一個Master服務器和多個Tablet服務器。

Master服務器的工做:

     爲Tablet服務器分配Tablets

     監測新加入的或者過時失效的Table服務器

     對Tablet服務器進行負載均衡

     模式相關:新建表和列族

針對系統工做負載的變化狀況,BigTable能夠動態的想集羣中添加刪除Tablet服務器。

Master服務器記錄了當前有哪些活躍的Tablet服務器,哪些Tablet分配給了那些Tablet服務器,那些Tablet尚未被分配。

問題:Table分紅Tablet是Master作的嘛?


BigTable與GFS的關係:

     GFS是分佈式文件系統,BigTable 是創建在GFS之上的。就像文件系統須要數據庫來存儲結構化數據同樣,GFS也須要Bigtable來存儲結構化數據,每一個Table都是一個多維的稀疏圖,爲了管理巨大的Table,把Table根據行分割,這些分割後的數據統稱爲:Tablets。每一個Tablets大概有 100-200 MB,每一個機器存儲100個左右的 Tablets。底層的架構是:GFS。因爲GFS是一種分佈式的文件系統,採用Tablets的機制後,能夠得到很好的負載均衡。好比:能夠把常常響應的表移動到其餘空閒機器上,而後快速重建。



 

3.Hadoop與google三大件:

Hadoop是不少組件的集合,主要包括但不限於MapReduce,HDFS,HBase,ZooKeeper。

     MapReduce模仿了Google的MapReduce,

     HDFS模仿了Google File System,

     HBase模仿了BigTable,

     因此下文只出現MapReduce、HDFS和HBase。
     簡單來說, HDFS和HBase是依靠外存(即硬盤)的存儲模型和實現。HDFS是一個雲存儲的文件系統,它會把一個文件分塊並分別保存,取用時分別取出再合併。重要的是,這些分塊一般會在3臺節點(即機羣內的電腦)上有3個備份,因此即便出現少數電腦的失效(硬盤損壞、掉電等),文件也不會失效。若是說HDFS是文件級別的存儲,那HBase則是表級別的存儲。HBase是一個表模型,但比SQL數據庫的表要簡單的多,沒有鏈接、彙集等功能。HBase表的物理存儲是依賴HDFS的,好比把一個表分紅4個文件,存到HDFS中。因爲HDFS級會作備份,因此HBase級再也不備份。
MapReduce則是一個計算模型,而不是存儲模型;MapReduce與HDFS緊密配合,而非HBase。舉個場景:若是你的手機通話信息保存在一個HDFS的文件callList.txt中,你想找到你與你同事A的全部通話記錄並排序。由於HDFS會把callLst.txt分紅幾塊分別存,好比說5塊,那麼對應的Map過程就是找到這5塊所在的5臺節點,讓他們分別找本身存的那塊中關於A的通話記錄,對應的Reduce過程就是把5個節點過濾過的通話記錄合併在一塊並按時間排序。可見MapReduce的計算模型須要HDFS,但與HBase沒有任何關係。
ZooKeeper自己是一個很是牢靠的記事本,最好用於記錄一些概要信息。Hadoop依靠這個記事原本記錄當前哪些節點正在用,哪些已掉線,哪些還備用等,以此來管理機羣。


3大論文中文版下載:http://yunpan.cn/QDhPcnYVQt2hM

相關文章
相關標籤/搜索