在雲中使用 MapReduce 和負載平衡

來源:互聯網
上載者:User

雲計算旨在通過 Internet 提供隨需應變的資源或服務,通常視資料中心的規模和可靠性水準而定。 MapReduce 是一個為並行處理大量資料而設計的程式設計模型,它將工作劃分為一個獨立任務組成的集合。 它是一種並行程式設計,由某種功能隨需應變的雲(如 Google 的 BigTable、Hadoop 和Sector)提供支援。

在本文中,將使用遵從 Randomized Hydrodynamic Load Balancing 技術(下文將詳細介紹)的負載平衡演算法。 利用虛擬化來降低成本和物理伺服器的實際數目;更重要的是,將使用虛擬化用來實現高效的物理電腦 CPU 利用。

要從本文獲取最多的知識,您應該大致瞭解雲計算的概念、Randomized Hydrodynamic Load Balancing 技術和 Hadoop MapReduce 程式設計模型。 最好對並行程式設計有一個基本的瞭解,瞭解 JAVA™ 或其他物件導向的語言的程式設計知識將很有説明。

在本文中,要實現 MapReduce 演算法,系統應裝有以下軟體:

1. Hadoop 0.20.1.

2. Eclipse IDE 3.0 以上(或 Rational Application Developer 7.1)。

3. Ubuntu 8.2 以上。

深入 MapReduce 演算法之前,我們將建立基本的雲架構、負載平衡、MapReduce 和並行程式設計 — 至少對本文這是足夠了。

雲架構:基本內容

圖 1 顯示了完整的系統詳圖,包括平臺、軟體,以及如何使用它們來實現本文的目標設置。

圖 1. 雲架構

您可以看到,我們使用 Ubuntu 9.04 和 8.2 作為作業系統;平臺是 Hadoop 0.20.1、Eclipse 3.3.1 和 Sun JAVA 6;程式設計語言使用 JAVA;指令碼語言使用 HTML、JSP 和 XML。

該雲架構有一個主節點和一些從屬節點。 在該實現中,維護主伺服器,獲取用戶端請求並根據請求的類型進行處理。

從圖 2 中可以看到,搜索請求轉發到 Hadoop NameNode。 然後,Hadoop NameNode 負責搜索和索引操作,它將啟動大量 Map 和 Reduce 進程。 完成特定的搜索關鍵字 MapReduce 操作之後,NameNode 將輸出值返回到伺服器並交付用戶端。

圖 2. Map 和 Reduce 函數執行搜索和索引

如果請求的是特定的軟體,則將基於客戶租戶 ID、支付會費、使用該特定軟體的資格以及軟體的租賃期完成驗證步驟。 然後,伺服器為該請求提供服務,並允許使用者使用特定的軟體組合。

在這裡提供 SaaS 的多租戶功能,單個軟體實例可以服務于多個租戶。 這樣,相同的軟體映射集合會基於租戶 ID 生成不同的實例生成。

這些服務意味著,用戶端將使用 Hadoop、Eclipse 等平臺以及在搜索檔或使用某些軟體時使用的作業系統。 此外,為了存儲其資料(資料庫或檔),在雲中,用戶端將不得不佔用一些資料中心(IaaS)的記憶體空間。 所有這些對終端使用者都是透明的。

Randomized Hydrodynamic Load Balancing:基本內容

負載平衡用來確保在使用其他資源時您現有的資源都不是空閒的。 若要平衡負載分佈,可以將負載從源節點(有多餘工作負載)的遷移到相對較輕的負載目標節點。

在運行時應用負載平衡時,它被稱之為動態負載平衡 — 這可以根據執行節點選擇直接實現或以反覆運算的方式實現:

1.反覆運算的方法通過幾個反覆運算步驟確定最終目標節點。

2.直接方法在一個步驟中選擇最終目標節點。

本文使用 Randomized Hydrodynamic Load Balancing 方法,這是一種同時利用了直接和反覆運算方法的混合方法。

MapReduce:基本內容

MapReduce 程式用於以並行方式計算大量資料。 這就需要在很多電腦之間分配工作負荷。 Hadoop 提供了一種系統的方法來實現這種程式設計范式。

計算需要輸入一組鍵/值對,生成一組輸出鍵/值對。 計算涉及的兩個基本操作:Map 和 Reduce。

使用者編寫的 Map 操作需要輸入並生成一組中間鍵/值對。 MapReduce 庫將所有與同一中間鍵 #1 相關聯的中間值組合到一起,並且將它們傳遞給 Reduce 功能。

同樣是使用者編寫的 Reduce 函數接受一個中間鍵 #1 和該鍵的一組值。 它將這些值合併形成可能較小的一組值。 通常每次 Reduce 調用只生成一個輸出值 0 或 1。 中間值通過反覆運算器(一種可以讓程式師遍歷所有集合元素的物件,忽略其具體的實現)提供給使用者的 Reduce 函數。 這樣,您就可以處理太大而無法放入記憶體的值清單。

以 WordCount 問題為例。 即計算大檔集中的每個單詞的匹配次數。 Mapper 和 Reducer 函數如代碼清單 1 所示。

清單 1. 解決 WordCount 問題的 Map 和 Reduce

mapper (filename, file-contents):

for each word in file-contents:

emit (word, 1)

reducer (word, values):

sum = 0

for each value in values:

sum = sum + value

emit (word, sum)

Map 函數發出每個單詞附有一個相關的出現次數計數。 Reduce 函數對發出的特定單詞計數求和。 這個基本的功能如果構建在集群之上,就可以很容易轉變為高速並行處理系統。

對之前完成的大量資料執行計算,這些資料通常在分散式環境中。 Hadoop 的獨特之處在于它簡單的程式設計模式 — 使使用者可以快速編寫和測試分散式系統 — 以及它的高效、自動分配資料和跨電腦處理,進而能夠利用 CPU 內核的底層並行度。

讓我們理清思路。 前文已經討論過,Hadoop 集群中有以下節點:

1.NameNode(雲主節點)。

2.DataNodes(從屬節點)。

集群中的節點已經預先載入了本地輸入檔。 啟動 MapReduce 進程時,NameNode 將使用 JobTracker 進程分配任務,它必須由 DataNodes 通過 TaskTracker 進程完成。 每個 DataNode 中將運行幾個 Map 進程,中間結果會提供給合器進程,生成一台電腦上檔的單詞計數(在 WordCount 的問題中)。 值被打亂髮送到 Reduce 進程,然後生成目標問題的最終輸出。

如何使用負載平衡

負載平衡有助於在某個節點的負載超出閾值水準時,將負載平均地分散到空閒的節點。 雖然在執行 MapReduce 演算法時負載平衡不夠明顯,但在進行大檔處理以及硬體資源利用至關重要的時候它是非常必要的。 一個顯著的作用是可以在資源緊張的情況下增加硬體利用率,提高性能。

在某些資料節點已滿或者新的空節點加入集群時,實現一個模組來平衡 Hadoop 分散式檔案系統集群上的磁碟空間使用方式。 達到閾值時將啟動平衡器(Class Balancer 工具);此參數是一個從 0 至 100% 的分數,預設值為 10%。 此選項為是否平衡集群設置目標;閾值越小,集群越平衡,同樣,平衡器運行的時間也越長。 (注:閾值可以很小到您不能平衡集群的狀態,因為應用程式可能同時寫入和刪除檔)

如果對於每個資料節點,節點佔用空間與總容量的比率(稱為節點利用率)不同于集群已用空間與總空間的比率(集群利用率),且不超過閾值,則認為該集群是平衡的。

該模組將把利用率高的資料節點的資料塊以反覆運算方式移動到利用率低的節點上;在每個反覆運算中,節點移動或接收不超過容量的閾值比例,每次反覆運算運行不超過 20 分鐘。

在此實現中,節點被分類為高利用、平均利用 和未充分利用。 根據每個節點的利用額,將負載在節點之間轉移以平衡集群。 模組工作方式如下:

1. 首選,它獲取鄰近節點詳細資訊:

1. 當 DataNode 的負載增加到閾值級別時,它將向該 NameNode 發送一個請求。

2. NameNode 獲得特定 DataNode 最鄰近節點的負載級別資訊。

3. NameNode 比較負載,然後將有關最空閒相鄰節點的詳細資訊發送到特定的 DataNode。

2. 接下來,DataNodes 開始工作:

1. 每個 DataNode 將自己負載量與其最近節點的負載量之和進行比較。

2. 如果 DataNode 的負載級別大於其鄰近節點,將隨機播放那麼負載目標節點(直接連續的節點及其他節點) 。

3. 然後將節點要求傳送到目標節點。

3. 最後,接收請求:

1. 每個節點將維護一個緩衝區接收負載請求。

2. 消息傳遞介面(MPI)管理此緩衝區。

3. 主執行緒會偵聽緩衝佇列,並服務其接收的請求。

4. 節點進入負載平衡執行階段。

評估性能

提供了不同的輸入檔集,每個檔集的大小不同,並在單節點和雙節點集群中執行 MapReduce 任務。 測量相應的執行時間,我們可以得出結論,到目前為止,在集群中運行 MapReduce 是處理大量輸入檔更有效的方式。

圖 3 中的關係圖說明瞭我們在各個節點上運行的性能結果。

圖 3. MapReduce 負載平衡在集群中更加有效

結束語

我們的 Hadoop MapReduce 和負載平衡的實驗可以得到兩個必然結論:

1.在雲環境中,MapReduce 結構提高了大型資料集的吞吐效率。 相反,您在非雲系統中不一定能看到如此的輸送量增加。

2.資料集較小時,MapReduce 和負載平衡不會對雲系統輸送量的增加產生明顯影響。

因此,在計畫在雲系統上處理大量資料時,考慮 MapReduce 樣式並行處理和負載平衡的組合。

【推薦閱讀】:1.基於Hadoop系統的MapReduce資料流程優化

2.Hadoop技術中心

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.