Google大數據三大論文

簡介:http://www.javashuo.com/article/p-qhgonhpe-hk.html算法

論文中英文版下載http://pan.baidu.com/s/1slUy4sl數據庫

 

 經典論文翻譯導讀之《Google File System》GFS(2003)

https://blog.csdn.net/qq_38122518/article/details/78201472編程

2003年,Google發佈Google File System論文,這是一個可擴展的分佈式文件系統,用於大型的、分佈式的、對大量數據進行訪問的應用。它運行於廉價的普通硬件上,提供容錯功能。從根本上說:文件被分割成不少塊,使用冗餘的方式儲存於商用機器集羣上。數組

主要設計理念:緩存

0、願景:服務器

  給用戶一個無限容量、放心使用的硬盤,快速的存取文件。markdown

一、架構爲 client + master + chunkserver網絡

        master爲單點大腦,負擔小,持久化一些重要的不常變的元數據,易變元數據啓動後從chunkserver拉取,存在內存裏。數據結構

  chunkserver爲集羣,架構

  chunk爲文件存儲單位,最大大小可配置但配後固定,儘量配大些,這樣chunk個數少,master上須要維護的元數據少。

  chunk存在多份副本,位於不一樣的chunkserver上,分首要副本和普通副本。

  數據流和控制流解耦,客戶端先發數據到全部副本上(有些傳輸發生在副本間),全部副本把數據準備好,並無實施變異。而後發執行命令到首要副本,而後根據嚴格的次序,在各個副本上實施變異。

  client先經過master獲取元數據,並緩存。而後對文件的操做都是直接與chunkserver交互。

二、設計原則:

  chunk副本的佈置策略主要遵循兩個目標:最大化數據可靠性和可用性,最大化網絡帶寬利用。

  高可用性:咱們保持總體系統高度可用,只用兩個簡單可是高效的策略:快速恢復和複製。master和chunkserver均可以在幾秒內重啓並恢復它們的狀態。

  數據完整性:每一個chunkserver使用checksum來偵測腐化的存儲數據。可是每一個chunkserver本身校驗,不是chunkserver之間校驗。校驗出問題後,從其餘副本拷貝

三、當一個文件被應用刪除時,master馬上打印刪除操做的日誌,然而不會馬上回收資源,僅僅將文件重命名爲一個隱藏的名字,包含刪除時間戳。在master對文件系統命名空間執行常規掃描時,它會刪除任何超過3天的隱藏文件(週期可配)。

 

 

MapReduce(2004):面向大型集羣的簡化數據處理

 https://blog.csdn.net/qq_38122518/article/details/78205655

緊隨其後的就是2004年公佈的 MapReduce論文,論文描述了大數據的分佈式計算方式,主要思想是將任務分解而後在多臺處理能力較弱的計算節點中同時處理,而後將結果合併從而完成大數據處理。

Mapreduce是針對分佈式並行計算的一套編程模型。

 與以前理解的差別:

一、Map不是分塊函數,而是分塊處理函數。分塊函數沒名字

二、原始的MapReduce是經過文件傳輸數據的,包括中間數據也是由Map寫到文件裏,再由Reduce來獲取的。

三、在每一個工做節點上,能夠先進行一次結果處理,也就是Recuce處理,以減小最終Reduce的壓力,以及網絡傳輸壓力。

 

BigTable(2006)

 Bigtable發佈於2006年,啓發了無數的NoSQL數據庫,好比:Cassandra、HBase等等。Cassandra架構中有一半是模仿Bigtable,包括了數據模型、SSTables以及提早寫日誌(另外一半是模仿Amazon的Dynamo數據庫,使用點對點集羣模式)。

 Bigtable 是一個分佈式的結構化數據存儲系統,它被設計用來處理海量數據:一般是分佈在數千臺普通服務器上的 PB 級的數據。

BigTable 是創建在 GFS 和 MapReduce 之上的。每一個Table都是一個多維的稀疏圖

Bigtable 是一個稀疏的、分佈式的、持久化存儲的多維度排序 Map5。 Map 的索引是行關鍵字、列關鍵字以及時間戳; Map 中的每一個 value 都是一個未經解析的 byte 數組。

Bigtable 經過行關鍵字的字典順序來組織數據。表中的每一個行均可以動態分區。每一個分區叫作一個」Tablet」,Tablet 是數據分佈和負載均衡調整的最小單位。這樣作的結果是,當操做只讀取行中不多幾列的數據時效率很高,一般只須要不多幾回機器間的通訊便可完成。用戶能夠經過選擇合適的行關鍵字,在數據訪問時有效利用數據的位置相關性,從而更好的利用這個特性。

列關鍵字組成的集合叫作「列族「,列族是訪問控制的基本單位。存放在同一列族下的全部數據一般都屬於同一個類型(咱們能夠把同一個列族下的數據壓縮在一塊兒)。

Bigtable 支持單行上的事務處理,利用這個功能,用戶能夠對存儲在一個行關鍵字下的數據進行原子性的讀-更新-寫操做。

 爲了管理巨大的Table,把Table根據行分割,這些分割後的數據統稱爲:Tablets。每一個Tablets大概有 100-200 MB,每一個機器存儲100個左右的 Tablets。底層的架構是:GFS。

 因爲GFS是一種分佈式的文件系統,採用Tablets的機制後,能夠得到很好的負載均衡。好比:能夠把常常響應的表移動到其餘空閒機器上,而後快速重建。

 

Bigtable 是創建在其它的幾個 Google 基礎構件上的。 BigTable 使用 Google 的分佈式文件系統(GFS) 【17】存儲日誌文件和數據文件。 BigTable 集羣一般運行在一個共享的機器池中,池中的機器還會運行其它的各類各樣的分佈式應用程序,BigTable 的進程常常要和其它應用的進程共享機器。 BigTable 依賴集羣管理系統來調度任務、管理共享的機器上的資源、處理機器的故障、以及監視機器的狀態。

 

  BigTable 內部存儲數據的文件是 Google SSTable 格式的。 SSTable 是一個持久化的、排序的、不可更改的 Map 結構,而 Map 是一個 key-value 映射的數據結構, key 和 value 的值都是任意的 Byte 串。能夠對 SSTable 進行以下的操做:查詢與一個 key 值相關的 value,或者遍歷某個 key 值範圍內的全部的 key-value 對。從內部看, SSTable 是一系列的數據塊(一般每一個塊的大小是 64KB,這個大小是能夠配置的)。 SSTable 使用塊索引(一般存儲在 SSTable 的最後)來定位數據塊;在打開 SSTable 的時候,索引被加載到內存。每次查找均可以經過一次磁盤搜索完成:首先使用二分查找法在內存中的索引裏找到數據塊的位置,而後再從硬盤讀取相應的數據塊。也能夠選擇把整個 SSTable 都放在內存中,這樣就沒必要訪問硬盤了。

 

  BigTable 還依賴一個高可用的、序列化的分佈式鎖服務組件,叫作 Chubby【8】。一個 Chubby 服務包括了 5 個活動的副本,其中的一個副本被選爲 Master,而且處理請求。只有在大多數副本都是正常運行的,而且彼此之間可以互相通訊的狀況下, Chubby 服務纔是可用的。當有副本失效的時候, Chubby 使用 Paxos 算法【9,23】來保證副本的一致性。 Chubby 提供了一個名字空間,裏面包括了目錄和小文件。每一個目錄或者文件能夠當成一個鎖,讀寫文件的操做都是原子的。 Chubby 客戶程序庫提供對 Chubby 文件的一致性緩存。每一個Chubby 客戶程序都維護一個與 Chubby 服務的會話。若是客戶程序不能在租約到期的時間內從新簽定會話的租約,這個會話就過時失效了9。當一個會話失效時,它擁有的鎖和打開的文件句柄都失效了。 Chubby 客戶程序能夠在文件和目錄上註冊回調函數,當文件或目錄改變、或者會話過時時,回調函數會通知客戶程序。

 

Bigtable 包括了三個主要的組件:連接到客戶程序中的庫、一個 Master 服務器和多個 Tablet 服務器。針對系統工做負載的變化狀況, BigTable 能夠動態的向集羣中添加(或者刪除) Tablet 服務器。

 

  Master 服務器主要負責如下工做:爲 Tablet 服務器分配 Tablets、檢測新加入的或者過時失效的 Table 服務器、對 Tablet 服務器進行負載均衡、以及對保存在 GFS 上的文件進行垃圾收集。除此以外,它還處理對模式的相關修改操做,例如創建表和列族。

相關文章
相關標籤/搜索