MepReduce綜述

MapReduce

MapReduce 是一種計算模型,該模型可將大型數據處理任務分解成很多個計算單元,在服務器集羣中並行執行的任務。這些人物的計算結果可以合併在一起來計算最終的結果。
MapReduce編程模型是由谷歌(Googel)開發的。Googel通過一篇很有影響力的論文對這個計算模型進行了描述,名爲《MapReduce:大數據之上的簡化數據處理》。一年後,另一篇名爲《Google 文件系統》的論文介紹了Google文件系統。這兩篇論文啓發了道·卡丁(Doug Cutting)開發了Hadoop(分佈式文件系統)。

MapReduce這個術語來自於兩個基本的數據轉換操作:Map過程和Reduce過程。一個Map操作會將集合中的元素從一種形式轉換成另一種形式。在這個情況下,輸入的鍵值對會被轉換成零到多個鍵-值對輸出。其中輸入和輸出的鍵必須完全不同,而輸入和輸出的值則可能完全不同。

在MapReduce計算框架中,某個鍵的所有鍵-值對都會被分發到一個reduce操作中。確切的說,這個鍵和這個鍵所對應的值都會被傳遞到同一個reduce,reduce過程的目的是將值的集合轉換成一個值(例如對一組數值求和or平均值),或者轉換成另一個集合。這個reduce最終會產生一個鍵-值對。再次說明一下,輸入和輸出的鍵和值可能不同。需要說明的是,如果job不需要reduce過程的話,那麼也是可以無reduce過程的。

hadoop提供了一套基礎設施來處理大多數困難的工作以保證能夠執行成功。例如,hadoop決定如果將job分解成多個獨立的map和reduce任務(task)來執行,它就會對這個task進行調度併爲其分配合適的資源,決定將某個task分配到集羣中哪個位置(如果可能,通常是這個task所要處理的數據所在的位置,這樣可以最小化網絡開銷)。它會監控每個task以確保其成功完成,並重啓一些失敗的task。

爲了更清晰的介紹MapReduce,讓我們來看一個例子,Word Count算法已經被稱爲MapReduce計算框架中的"hello world"程序了。Word Count會返回在語料庫(單個或多個文件)中出現的所有的單詞以及單詞出現的次數。輸出內容會顯示每個單詞和他的頻數,每行顯示一條。按照正常的習慣,單詞(輸出的鍵)和頻數(輸出的值)通常使用製表符進行分割。

圖1-1 顯示了在MapReduce 計算框架中 Word Count程序是如何運行的。
這裏有很多內容要講,所以我們會從左到右來講解這張圖。
圖1-1種左邊的每個input(輸入)框內都表示一個單獨的文件,例子種有四個文件,其中第3個文件是空文件,未來便於簡單描述,其他3個文件都僅僅包含幾個單詞。
默認情況下,滅國文檔都會觸發一個Mapper程序進行處理。而在實際場景下,大文件可能會被劃分成多個部分,而每個部分都會被髮送給一個Mapper進行處理。同時,也有將多個小文件合併爲一個大文件的處理方法。

MapReduce計算框架中輸入和輸出的基本數據結構是鍵-值對。當Mapper進程啓動的時候,其將被會頻繁的調用來處理文件中的每行文本。每次調用傳遞給Mapper的鍵是文檔中這行的起始位置的字符偏移量。對應的值就是這行的文本。

在WordCount程序中,沒有使用字符偏移量。可以使用很多種當時進行分割,(例如,按照空格分隔是最簡單的方式,但是這樣會遺留下不需要的標點符號)最終這行文本會被分解成多個單詞。我們同事假定Mapper會將每個單詞轉換成小寫,因此對於“FUN”和“fun”會被認爲是同一個單詞。

最後,對於這行文本中的每個單詞,Mapper都會輸出一個鍵-值對,以單詞作爲鍵並以數字1 作爲值(這裏的1表示出現次數爲1次)。需要注意的是鍵和值的輸出數據類型和輸入數據類型是不同的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章