MapReduce原理分析

2021-09-24 11:30:07 字數 2819 閱讀 1772

(底層儲存)分布式儲存,將龐大的任務進行分散到各個節點上,每個節點負責一小部分,處理起來更加方便。

hdfs底層依賴-----方便計算衍生出各種計算的東西-----到大資料發展到現在的技術的生態圈。

mapreduce是hadoop的核心元件之一,hadoop要實現分布式需要包括兩部分,一部分是分布式檔案系統hdfs,一部分是分布式計算框架mapreduce
原理解釋:在此引用一下奮鬥的小炎這個例子,簡單易懂

我問妻子:「你真的想要弄懂什麼是mapreduce?」 她很堅定的回答說「是的」。 我:

你是如何準備洋蔥辣椒醬的?(以下並非準確食譜,請勿在家嘗試) 妻子:

我會取乙個洋蔥,把它切碎,然後拌入鹽和水,最後放進混合研磨機裡研磨。這樣就能得到洋蔥辣椒醬了。但這和mapreduce有什麼關係? 我:

你等一下。讓我來編乙個完整的情節,這樣你肯定可以在15分鐘內弄懂mapreduce。 妻子: 好吧。

我:現在,假設你想用薄荷、洋蔥、番茄、辣椒、大蒜弄一瓶混合辣椒醬。你會怎麼做呢? 妻子:

我會取薄荷葉一撮,洋蔥乙個,番茄乙個,辣椒一根,大蒜一根,切碎後加入適量的鹽和水,再放入混合研磨機裡研磨,這樣你就可以得到一瓶混合辣椒醬了。

我: 沒錯,讓我們把mapreduce的概念應用到食譜上。map和reduce其實是兩種操作,我來給你詳細講解下。map(對映)

把洋蔥、番茄、辣椒和大蒜切碎,是各自作用在這些物體上的乙個map操作。所以你給map乙個洋蔥,map就會把洋蔥切碎。

同樣的,你把辣椒,大蒜和番茄一一地拿給map,你也會得到各種碎塊。 所以,當你在切像洋蔥這樣的蔬菜時,你執行就是乙個map操作。

map操作適用於每一種蔬菜,它會相應地生產出一種或多種碎塊,在我們的例子中生產的是蔬菜塊。在map操作中可能會出現有個洋蔥壞掉了的情況,你只要把壞洋蔥丟了就行了。所以,如果出現壞洋蔥了,map操作就會過濾掉壞洋蔥而不會生產出任何的壞洋蔥塊。reduce(化簡)這一階段,你將各種蔬菜碎都放入研磨機裡進行研磨,你就可以得到一瓶辣椒醬了。這意味要製成一瓶辣椒醬,你需要研磨所有的原料。因此,研磨機通常將map操作的蔬菜碎聚集在了一起。

妻子: 所以,這就是mapreduce? 我: 你可以說是,也可以說不是。

其實這只是mapreduce的一部分,mapreduce的強大在於分布式計算。 妻子: 分布式計算? 那是什麼?請給我解釋下吧。 我:

假設你參加了乙個辣椒醬比賽並且你的食譜贏得了最佳辣椒醬獎。得獎之後,辣椒醬食譜大受歡迎,於是你想要開始**自製品牌的辣椒醬。假設你每天需要生產10000瓶辣椒醬,你會怎麼辦呢?

妻子: 我會找乙個能為我大量提供原料的**商。 我:是的,就是那樣的。那你能否獨自完成製作呢?也就是說,獨自將原料都切碎?

僅僅一部研磨機又是否能滿足需要?而且現在,我們還需要**不同種類的辣椒醬,像洋蔥辣椒醬、青椒辣椒醬、番茄辣椒醬等等。 妻子:

當然不能了,我會僱傭更多的工人來切蔬菜。我還需要更多的研磨機,這樣我就可以更快地生產辣椒醬了。

我:沒錯,所以現在你就不得不分配工作了,你將需要幾個人一起切蔬菜。每個人都要處理滿滿一袋的蔬菜,而每乙個人都相當於在執行乙個簡單的map操作。每乙個人都將不斷地從袋子裡拿出蔬菜來,並且每次只對一種蔬菜進行處理,也就是將它們切碎,直到袋子空了為止。這樣,當所有的工人都切完,工作台上就有了洋蔥塊、番茄塊、和蒜蓉等等。

妻子:但是我怎麼會製造出不同種類的番茄醬呢?

我:現在你會看到mapreduce遺漏的階段——攪拌。mapreduce將所有輸出的蔬菜碎都攪拌在了一起,這些蔬菜碎都是在以key為基礎的map操作下產生的。攪拌將自動完成,你可以假設key是一種原料的名字,就像洋蔥一樣。

所以全部的洋蔥keys都會攪拌在一起,並轉移到研磨洋蔥的研磨器裡。這樣,你就能得到洋蔥辣椒醬了。同樣地,所有的番茄也會被轉移到標記著番茄的研磨器裡,並製造出番茄辣椒醬。

解釋

第一步:資料先發過來,將計算程式分發

第二步:提前先對資料進行清洗------去除髒資料

第三步:提前進行一次小的聚合

第四步:將小聚合之後的資料連通剩餘的資料進行運輸(shuffle)-----最影響效率,最浪費時間

第五步:在reduce進行乙個大合併,也就是最後一次合併

簡而言之:

1.資料進行切片

2.開始計算

2.1尋找過程–磁碟

2.1計算過程–記憶體

2.3結果 --磁碟

map

相當於乙個處理把資料有序傳送

suffle

相當於管道,傳輸資料

reduce

相當於工廠,把資料整理成乙個有序的,或者是最直後的成品

**解釋

1、1、新建專案—mapreduce project

2、把lib刪除,更換成jar包

3. 有乙個許可權問題 匯入我的nativeio包到src-----消除許可權衝突 ***********重點

4、開始編寫**

wordcount

4.1建立map和reduce類-----有直接對應的方法建立

4.2建立執行類—job

(1)map

job 1、配置檔案

2、將類方法寫入

3、input和output的路徑

4、boolean zt=job.waitforcompletion(true);判斷是否執行

mapreduce的工作原理分析

分布式計算的思想 合久必分,分久必合 哈哈 map reducce input 輸入 output 輸出 map端的含義 注意 假設hdfs的block大小為64m,採用textinputformat,現有乙個目錄,下面兩個檔案 大小分為1m和120m,mapreduce處理這個目錄下的資料時,預設...

MapReduce工作原理

本文的目錄 1.mapreduce作業執行流程 2.map reduce任務中shuffle和排序的過程 mapreduce作業詳細的執行流程 流程分析 1.在客戶端啟動乙個作業。2.向jobtracker請求乙個job id。3.將執行作業所需要的資源檔案複製到hdfs上,包括mapreduce程...

map reduce工作原理

下面的圖來自南京大學計算機系黃宜華老師開設的mapreduce課程的課件,這裡稍作整理和 總結。本文旨在對接觸了mapreduce之後,但是對mapreduce的工作流程仍不是很清楚的人員,當然包括博主自己,希望與大家一起學習。mapreduce借鑑了函式式程式語言lisp中的思想,lisp lis...