?
??Google(谷歌)擁有全球最強大的搜索引擎。除了搜索業(yè)務,Google 還有 Google Maps、Google Earth、Gmail、YouTube 等其他業(yè)務。這些應用的共性在于數(shù)據(jù)量巨大,且要面向全球用戶提供實時服務,因此 Google 必須解決海量數(shù)據(jù)存儲和快速處理問題。Google 研發(fā)出了簡單而又高效的技術(shù),讓多達百萬臺的廉價計算機協(xié)同工作,共同完成這些任務,這些技術(shù)在誕生幾年后才被命名為 Google 云計算技術(shù)。Google 云計算技術(shù)包括:Google 文件系統(tǒng) GFS、分布式計算編程模型 MapReduce、分布式鎖服務 Chubby、分布式結(jié)構(gòu)化數(shù)據(jù)表 Bigtable、分布式存儲系統(tǒng) Megastore、分布式監(jiān)控系統(tǒng) Dapper、海量數(shù)據(jù)的交互式分析工具 Dremel,以及內(nèi)存大數(shù)據(jù)分析系統(tǒng) PowerDrill 等。
一、Google文件系統(tǒng)GFS
??Google 文件系統(tǒng)(Google File System,GFS)是一個大型的分布式文件系統(tǒng)。它為 Google 云計算提供海量存儲,并且與 Chubby、MapReduce 及 Bigtable 等技術(shù)結(jié)合十分緊密,處于所有核心技術(shù)的底層。GFS 不是一個開源的系統(tǒng),我們僅能從 Google 公布的技術(shù)文檔來獲得相關(guān)知識。
??當前主流分布式文件系統(tǒng)有 RedHat 的GFS(Global File System)、IBM 的 GPFS、Sun 的 Lustre 等。這些系統(tǒng)通常用于高性能計算或大型數(shù)據(jù)中心,對硬件設施條件要求較高。以 Lustre 文件系統(tǒng)為例,它只對元數(shù)據(jù)管理器 MDS 提供容錯解決方案,而對于具體的數(shù)據(jù)存儲節(jié)點 OST 來說,則依賴其自身來解決容錯的問題。例如,Lustre 推薦 OST 節(jié)點采用 RAID 技術(shù)或 SAN 存儲區(qū)域網(wǎng)來容錯,但由于 Lustre 自身不能提供數(shù)據(jù)存儲的容錯,一旦 OST 發(fā)生故障就無法恢復,因此對 OST 的穩(wěn)定性就提出了相當高的要求,從而大大增加了存儲的成本,而且成本會隨著規(guī)模的擴大線性增長。
??Google GFS 的新穎之處在于它采用廉價的商用機器構(gòu)建分布式文件系統(tǒng),同時將 GFS 的設計與 Google 應用的特點緊密結(jié)合,簡化實現(xiàn),使之可行,最終達到創(chuàng)意新穎、有用、可行的完美組合。GFS 將容錯的任務交給文件系統(tǒng)完成,利用軟件的方法解決系統(tǒng)可靠性問題,使存儲的成本成倍下降。GFS 將服務器故障視為正?,F(xiàn)象,并采用多種方法,從多個角度,使用不同的容錯措施,確保數(shù)據(jù)存儲的安全、保證提供不間斷的數(shù)據(jù)存儲服務。
(一)系統(tǒng)架構(gòu)
??GFS 的系統(tǒng)架構(gòu)如下圖所示。GFS 將整個系統(tǒng)的節(jié)點分為三類角色:Client(客戶端0、Master(主服務器)和 Chunk Server(數(shù)據(jù)塊服務器)。Client 是 GFS 提供給應用程序的訪問接口,它是一組專用接口,不遵守 POSIX 規(guī)范,以庫文件的形式提供。應用程序直接調(diào)用這些庫函數(shù),并與該庫鏈接在一起。Master 是 GFS 的管理節(jié)點,在邏輯上只有一個,它保存系統(tǒng)的元數(shù)據(jù),負責整個文件系統(tǒng)的管理,是 GFS 文件系統(tǒng)中的 “大腦” 。Chunk Server 負責具體的存儲工作。數(shù)據(jù)以文件的形式存儲在 Chunk Server 上,Chunk Server 的個數(shù)可以有多個,它的數(shù)目直接決定了GFS 的規(guī)模。GFS 將文件按照固定大小進行分塊,默認是64MB,每一塊稱為一個Chunk(數(shù)據(jù)塊),每個 Chunk 都有一個對應的索引號(Index)。
GFS將整個系統(tǒng)節(jié)點分為三類角色:
GFS的實現(xiàn)機制:
- 客戶端首先訪問Master節(jié)點,獲取交互的Chunk Server信息,然后訪問這些Chunk Server,完成數(shù)據(jù)存取工作。這種設計方法實現(xiàn)了控制流和數(shù)據(jù)流的分離。
- Client與Master之間只有控制流,而無數(shù)據(jù)流,極大地降低了Master的負載。
- Client與Chunk Server之間直接傳輸數(shù)據(jù)流,同時由于文件被分成多個Chunk進行分布式存儲,Client可以同時訪問多個Chunk Server,從而使得整個系統(tǒng)的I/O高度并行,系統(tǒng)整體性能得到提高。
GFS的特點:
1、采用中心服務器模式
- 可以方便地增加Chunk Server
- Master掌握系統(tǒng)內(nèi)所有Chunk Server的情況,方便進行負載均衡
- 不存在元數(shù)據(jù)的一致性問題
2、不緩存數(shù)據(jù)
- 文件操作大部分是流式讀寫,不存在大量重復讀寫,使用Cache對性能提高不大
- Chunk Server上數(shù)據(jù)存取使用本地文件系統(tǒng)從可行性看,Cache與實際數(shù)據(jù)的一致性維護也極其復雜
3、在用戶態(tài)下實現(xiàn)
- 利用POSIX編程接口存取數(shù)據(jù)降低了實現(xiàn)難度,提高通用性
- POSIX接口提供功能更豐富
- 用戶態(tài)下有多種調(diào)試工具
- Master和Chunk Server都以進程方式運行,單個進程不影響整個操作系統(tǒng)
- GFS和操作系統(tǒng)運行在不同的空間,兩者耦合性降低
4、只提供專用接口
- 降低了實現(xiàn)的難度。通常與 POSIX 兼容的接口需要在操作系統(tǒng)內(nèi)核一級實現(xiàn),而 GFS 是在應用層實現(xiàn)的。
- 采用專用接口可以根據(jù)應用的特點對應用提供一些特殊支持,如支持多個文件并發(fā)追加的接口等。
- 專用接口直接和 Client、 Master、Chunk Server 交互,減少了操作系統(tǒng)之間上下文的切換,降低了復雜度,提高了效率。
(二)容錯機制
1、Master容錯
- 命名空間(Name Space),也就是整個文件系統(tǒng)的目錄結(jié)構(gòu)。
- Chunk與文件名的映射表。
- Chunk副本的位置信息,每一個Chunk默認有三個副本。
??當Master發(fā)生故障時,在磁盤數(shù)據(jù)保存完好的情況下,可以迅速恢復以上元數(shù)據(jù)。為了防止Master徹底死機的情況,GFS還提供了Master遠程的實時備份。
2、Chunk Server容錯
- GFS采用副本的方式實現(xiàn)Chunk Server的容錯
- 每一個Chunk有多個存儲副本(默認為三個)
- 對于每一個Chunk,必須將所有的副本全部寫入成功,才視為成功寫入
- 相關(guān)的副本出現(xiàn)丟失或不可恢復等情況,Master自動將該副本復制到其他Chunk Server
- GFS中的每一個文件被劃分成多個Chunk,Chunk的默認大小是64MB
- 每一個Chunk以Block為單位進行劃分,大小為64KB,每一個Block對應一個32bit的校驗和
(三)系統(tǒng)管理技術(shù)
??GFS 是一個分布式文件系統(tǒng),包含從硬件到軟件的整套解決方案。除了上面提到的 GFS 的一些關(guān)鍵技術(shù)外,還有相應的系統(tǒng)管理技術(shù)來支持整個 GFS 的應用,這些技術(shù)可能不一定為 GFS 獨有。
二、分布式數(shù)據(jù)處理MapReduce
??MapReduce 是 Google 提出的一個軟件架構(gòu),是一種處理海量數(shù)據(jù)的并行編程模式,用于大規(guī)模數(shù)據(jù)集(通常大于1TB)的并行運算。Map(映射)、Reduce(化簡)的概念和主要思想,都是從函數(shù)式編程語言和矢量編程語言借鑒來的。正是由于 MapReduce 有函數(shù)式和矢量編程語言的共性,使得這種編程模式特別適合于非結(jié)構(gòu)化和結(jié)構(gòu)化的海量數(shù)據(jù)的搜索、挖掘、分析與機器智能學習等。
(一)產(chǎn)生背景
??Jeffery Dean 設計一個新的抽象模型, 封裝并行處理、容錯處理、本地化計算、負載均衡的細節(jié),還提供了一個簡單而強大的接口。這就是MapReduce。
??MapReduce 這種并行編程模式思想最早是在1995年提出的。與傳統(tǒng)的分布式程序設計相比,MapReduce 封裝了并行處理、容錯處理、本地化計算、負載均衡等細節(jié),還提供了一個簡單而強大的接口。MapReduce 把對數(shù)據(jù)集的大規(guī)模操作,分發(fā)給一個主節(jié)點管理下的各分節(jié)點共同完成,通過這種方式實現(xiàn)任務的可靠執(zhí)行與容錯機制。
(二)編程模型
- Map函數(shù)——對一部分原始數(shù)據(jù)進行指定的操作。每個 Map 操作都針對不同的原始數(shù)據(jù),因此 Map 與 Map 之間是互相獨立的,這使得它們可以充分并行化。
- Reduce操作——對每個 Map 所產(chǎn)生的一部分中間結(jié)果進行合并操作,每個 Reduce 所處理的 Map 中間結(jié)果是互不交叉的,所有 Reduce 產(chǎn)生的最終結(jié)果經(jīng)過簡單連接就形成了完整的結(jié)果集。
Map: (in_key, in_value) → {(keyj, valuej) | j = 1…k}
Reduce: (key, [value1,…,valuem]) → (key, final_value)
-
Map輸入?yún)?shù):in_key 和 in_value,它指明了 Map 需要處理的原始數(shù)據(jù)
-
Map輸出結(jié)果:一組 <key,value> 對,這是經(jīng)過 Map 操作后所產(chǎn)生的中間結(jié)果
-
Reduce輸入?yún)?shù):(key,[value1,…,valuem])
-
Reduce工作:對這些對應相同 key 的 value 值進行歸并處理
-
Reduce輸出結(jié)果:(key, final_value),所有 Reduce 的結(jié)果并在一起就是最終結(jié)果
(三)實現(xiàn)機制
(1)MapReduce 函數(shù)首先把輸入文件分成M塊
(2)分派的執(zhí)行程序中有一個主控程序 Master
(3)一個被分配了 Map 任務的 Worker 讀取并處理相關(guān)的輸入塊
(4)這些緩沖到內(nèi)存的中間結(jié)果將被定時寫到本地硬盤,這些數(shù)據(jù)通過分區(qū)函數(shù)分成R個區(qū)
(5)當 Maste r通知執(zhí)行 Reduce 的 Worker 關(guān)于中間 <key,value> 對的位置時,它調(diào)用遠程過程,從 Map Worker 的本地硬盤上讀取緩沖的中間數(shù)據(jù)
(6)Reduce Worker 根據(jù)每一個唯一中間 key 來遍歷所有的排序后的中間數(shù)據(jù),并且把 key 和相關(guān)的中間結(jié)果值集合傳遞給用戶定義的 Reduce 函數(shù)
(7)當所有的 Map 任務和 Reduce 任務都完成的時候,Master 激活用戶程序
??由于MapReduce在成百上千臺機器上處理海量數(shù)據(jù),所以容錯機制是不可或缺的??偟膩碚f,MapReduce通過重新執(zhí)行失效的地方來實現(xiàn)容錯。
1、Master失效
??Master會周期性地設置檢查點(checkpoint),并導出Master的數(shù)據(jù)。一旦某個任務失效,系統(tǒng)就從最近的一個檢查點恢復并重新執(zhí)行。由于只有一個Master在運行,如果Master失效了,則只能終止整個MapReduce程序的運行并重新開始。
2、Worker失效
??Master會周期性地給Worker發(fā)送ping命令,如果沒有Worker的應答,則Master認為Worker失效,終止對這個Worker的任務調(diào)度,把失效Worker的任務調(diào)度到其他Worker上重新執(zhí)行。
(四)案例分析
第一個步驟
??對原始的數(shù)據(jù)進行分割(Split),得到N個不同的數(shù)據(jù)分塊。
第二個步驟
??對每一個數(shù)據(jù)分塊都啟動一個Map進行處理。采用桶排序的方法,每個Map中按照首字母將字符串分配到26個不同的桶中。
第三個步驟
??對于Map之后得到的中間結(jié)果,啟動26個Reduce。按照首字母將Map中不同桶中的字符串集合放置到相應的Reduce中進行處理。文章來源:http://www.zghlxwxcb.cn/news/detail-842816.html
??從上述過程可以看出,由于能夠?qū)崿F(xiàn)處理過程的完全并行化,因此利用 MapReduce 處理海量數(shù)據(jù)是非常適合的。文章來源地址http://www.zghlxwxcb.cn/news/detail-842816.html
到了這里,關(guān)于Google云計算原理與應用(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!