引言
雲計算(Cloud Computing)是一種新興的商業計算模型。 它將計算任務分佈在大量電腦構成的資源池上,使各種應用系統能夠根據需要獲取計算力、存儲空間和各種軟體服務。 雲計算是網格計算(Grid Computing)、分散式運算(Distributed Computing)、平行計算(ParallelComputing)、效用計算(Utility Computing)、 網路存儲(Network Storage Technologies)、虛擬化(Virtualization),負載均衡(Load Balance)等傳統電腦技術和網路技術發展融合的產物。
它的資料存儲是採用分散式存儲方式實現的,這就可以保證高可靠性、高可用性和經濟性,資料存儲的高可靠性是採用冗余存儲的方式來保證的,用可靠的軟體來彌補硬體的不足,從而提供廉價可靠的海量分散式存儲服務和計算服務。 另外,資料存儲技術必須具有高吞吐率和高傳輸率的特點。 這樣雲計算系統就可同時滿足大量使用者的需求,才能為大量使用者並行地提供服務。 雲計算的資料存儲系統最著名的是谷歌研發的非開源系統GFS(Google File System)和Hadoop開發團隊開發的開源系統HDFS(Hadoop Distributed FileSystem)。
1. MapReduce程式設計模型
平行計算技術是雲計算的核心技術,也是最具戰性的技術之一。 MapReduce是Google公司的核心計算模型,名字源于函數式程式設計模型中的兩項核心操作:Map和Reduce操作。 Map操作獨立地對每個元素進行操作,且操作沒有副作用; Reduce操作對N個Map結果進行歸約,也就是Map[1,2.。.,N]的結果是Reduce操作的參數。 在一個指令式語言中求值順序是確定的,每個函數都有可能會變更或依賴于外部狀態,所以必須有序地執行這些函數。 在MapReduce程式設計模型中,只要沒有函數修改或依賴千全域變數,N個Map操作的執行順序可以是無序的,這種特性使得MapReduce模型適合於對大規模資料進行並行處理。
在MapReduce計算模型中,有兩個關鍵過程:映射過程Map和聚集過程Reduce。 因此需要使用者提供兩個關鍵函數,映射(Map)函數和聚集(Reduce)函數,這兩個函數對一組輸人的鍵值對(key/value)進行計算,得出另一組輸出鍵值對,即有:
Map:(in_key, in_value)-{(keyj, valuej)j=l.。.k}
Reduce :(key,[valuel,。..,valuem])一(key, fina_value)
在不同的應用中,Map和Reduce的輸人參數和輸出結果是不相同的。 Map的輸入參數in_key和in_value,給S了Map函數要處理的是哪些資料。 每個Map函數計算完與後輸出結果一組鍵/值對,它們是經過Mad任務執行完成後所返回的中間結果。 系統在執行Reduce任務之前,先檢查前面Map任務返回的中間結果,根據Key進行分類處理,把相同key值所對應的value合併在一起把它們送給同一個Reduce任務進行處理,從而可以看出Reduce的輸入參數是(key ,[ valuel,...,valuem])。 Reduc任務主要對這些有著相同key值所對應的value值進行歸文書處理,在Reduce任務執行完成後輸出(key, finaLvalue)的f果。 一個key值對應了一個Reduce任務,把所有Reduce千務執行的結果合併連接在一起就形成了最終的輸出結果。
典型的MapReduce計算過程如圖1
圖1 MapReduce的工作流
(4)MapReduce庫把所有具有相同中間key值I的中間value值集合在一起後傳遞給reduce函數;
(5)使用者自訂的Reduce函數接受一個中間key的值I和相關的一個value值的集合。 Reduce函數將這些value值合併成一個較小的value值的集合。 正常的,每次Reduce函式呼叫只產生0或I個輸出value值。 可以通過一個反覆運算器把中間value值提供給Reduce函數,這樣就可以處理無法全部放入記憶體中的大量的value值的集合。
2. Hadoop框架的工作機制
Hadoop是Apache軟體基金會(Apache SoftwareFoundation)組織下的一個開源專案,提供分散式運算環境下的可靠、可擴展軟體。 Hadoop平臺擁有自己的分散式檔案系統(HDFS),具體實現採用MapReduce模式。 Hadoop採取檔案備份的方式,為每份資料製作若干拷貝,擁有較高的安全可靠性。 作為一個開源的分散式系統平臺,Hadoop除了擁有開源所帶來的更新速度快、應用廣泛等優勢外,還具有以下一些其它分散式雲計算框架所共有的優點:高度的可擴充性、經濟實用性、高速有效性、高可靠性。
HDFS採用Master/Slave架構,一個HDFS集群由一個命名節點((NameNode)和一組資料節點(DataNode)組成。 命名節點是一個中心伺服器,負責管理檔案系統的名字空間(NameSpace)以及用戶端對檔的訪問。 在集群系統中,一般在一個節點上運行一個資料節點,負責管理它所在節點上的資料存儲,並負責處理檔案系統用戶端的讀寫請求,在命名節點的統一調度下進行資料塊的創建、刪除和複製。 Hadoop還實現了Google的MapReduce分散式運算模型,MapReduce把應用程式的總任務分割成許多子任務,每個子任務可以在任何集群節點(資料節點,通常也作為計算節點)上並行處理。 HDFS創建了多份資料塊(Data Blocks)的副本(Replicas),以保證各個子任務節點計算的可靠性((Reliability)。 由於採用了分散式檔案系統和MapRedace模型,因此Hadoop框架具有高容錯性及對資料讀寫的高吞吐率,能自動處理失敗節點。 圖2是Hadoop集群系統架構的示意圖。
由圖2可知,HDFS是由一個命名節點和多個資料節點組成的。 資料節點存儲著檔案系統的中繼資料,它的作用就像是檔案系統的總指揮,維護檔案系統命名空間、規範客戶對於檔的存取和提供對於檔目錄的操作,資料節點中存儲著實際的資料,負責管理存儲節點上的存儲空間和來自客戶的讀寫請求。 資料節點也執行塊創建、刪除和來自命名節點的複製命令。
(責任編輯:蒙遺善)