1. 程式人生 > >MapReduce和YARN的區別和聯絡

MapReduce和YARN的區別和聯絡

Hadoop 的最常見用法之一是 Web 搜尋。雖然它不是唯一的軟體框架應用程式,但作為一個並行資料處理引擎,它的表現非常突出。Hadoop 最有趣的方面之一是 Map and Reduce 流程,它受到Google開發的啟發。這個流程稱為建立索引,它將 Web爬行器檢索到的文字 Web 頁面作為輸入,並且將這些頁面上的單詞的頻率報告作為結果。然後可以在整個 Web 搜尋過程中使用這個結果從已定義的搜尋引數中識別內容。

MapReduce
最簡單的 MapReduce應用程式至少包含 3 個部分:一個 Map 函式、一個 Reduce 函式和一個 main 函式。main 函式將作業控制和檔案輸入/輸出結合起來。在這點上,Hadoop 提供了大量的介面和抽象類,從而為 Hadoop應用程式開發人員提供許多工具,可用於除錯和效能度量等。
MapReduce 本身就是用於並行處理大資料集的軟體框架。MapReduce 的根源是函式性程式設計中的 map 和 reduce 函式。它由兩個可能包含有許多例項(許多 Map 和 Reduce)的操作組成。Map 函式接受一組資料並將其轉換為一個鍵/值對列表,輸入域中的每個元素對應一個鍵/值對。Reduce 函式接受 Map 函式生成的列表,然後根據它們的鍵(為每個鍵生成一個鍵/值對)縮小鍵/值對列表。

這裡提供一個示例,幫助您理解它。假設輸入域是 one small step for man,one giant leap for mankind。在這個域上執行 Map 函式將得出以下的鍵/值對列表:

(one,1) (small,1) (step,1) (for,1) (man,1) (one,1) (giant,1) (leap,1) (for,1) (mankind,1)

如果對這個鍵/值對列表應用 Reduce 函式,將得到以下一組鍵/值對:

(one,2) (small,1) (step,1) (for,2) (man,1)(giant,1) (leap,1) (mankind,1)

結果是對輸入域中的單詞進行計數,這無疑對處理索引十分有用。但是,假設有兩個輸入域,第一個是 one small step for man,第二個是 one giant leap for mankind。您可以在每個域上執行 Map 函式和 Reduce 函式,然後將這兩個鍵/值對列表應用到另一個 Reduce 函式,這時得到與前面一樣的結果。換句話說,可以在輸入域並行使用相同的操作,得到的結果是一樣的,但速度更快。這便是 MapReduce 的威力;它的並行功能可在任意數量的系統上使用。

Hadoop

它是如何實現這個功能的?一個代表客戶機在單個主系統上啟動的 MapReduce應用程式稱為 JobTracker。類似於 NameNode,它是 Hadoop 叢集中惟一負責控制 MapReduce應用程式的系統。在應用程式提交之後,將提供包含在 HDFS 中的輸入和輸出目錄。JobTracker 使用檔案塊資訊(物理量和位置)確定如何建立其他 TaskTracker 從屬任務。MapReduce應用程式被複制到每個出現輸入檔案塊的節點。將為特定節點上的每個檔案塊建立一個惟一的從屬任務。每個 TaskTracker 將狀態和完成資訊報告給 JobTracker。

Hadoop 的這個特點非常重要,因為它並沒有將儲存移動到某個位置以供處理,而是將處理移動到儲存。這通過根據叢集中的節點數調節處理,因此支援高效的資料處理。

Hadoop是一種分散式資料和計算的框架。它很擅長儲存大量的半結構化的資料集。資料可以隨機存放,所以一個磁碟的失敗並不會帶來資料丟失。Hadoop也非常擅長分散式計算——快速地跨多臺機器處理大型資料集合。
MapReduce是處理大量半結構化資料集合的程式設計模型。程式設計模型是一種處理並結構化特定問題的方式。例如,在一個關係資料庫中,使用一種集合語言執行查詢,如SQL。告訴語言想要的結果,並將它提交給系統來計算出如何產生計算。還可以用更傳統的語言(C++,Java),一步步地來解決問題。這是兩種不同的程式設計模型,MapReduce就是另外一種。
MapReduce和Hadoop是相互獨立的,實際上又能相互配合工作得很好。