MapReduce 閱讀筆記

2021-03-02 GitChat精品課

原文:http://blog.luoyuanhang.com/2017/04/19/mapreduce-notes/

這篇文章是我閱讀 MapReduce 論文:《MapReduce: Simplified Data Processing on Large Clusters》的筆記,這篇筆記概述了 MapReduce 是什麼,它的工作流程,一些細節問題,以及我的個人理解與思考。

《MapReduce: Simplified Data Processing on Large Clusters》:

https://research.google.com/archive/mapreduce-osdi04.pdf

MapReduce 是什麼?

MapReduce 是 Google設計的一種用於大規模數據集的分布式模型,它具有支持並行計算、容錯、易使用等特點。它的設計目標如下:

支持並行

用於分布式

能夠進行錯誤處理(比如機器崩潰)

易於使用(程式設計師友好)

負載均衡

模型流程

MapReduce 模型主要分為 2 個部分:Map 和 Reduce。

在 Map 過程中,Map 函數會獲取輸入的數據,產生一個臨時中間值,它是一個 K/V 對,然後MapReduce Library 會按 Key 值給鍵值對(K/V)分組然後傳遞給 Reduce 函數。而後,Reduce 接收到了這些 K/V 對,會將它們合併。

以論文中的字數統計程序為例:

現在我們來考慮,如果我們有許多文檔,然後我們想要統計在這些文檔中每個字出現的次數,現在用 MapReduce 來解決這個問題。Map 函數所做的工作,就是進行分詞,產生一組形如下表的 K/V 鍵值對:

然後將這組鍵值對傳遞給 Reduce,由 Reduce 進行合併。

具體流程如下:

由用戶程序中調用的 MapReduce Library 將文件分成 M 塊(M 要遠大於 Map Worker 的數量,每塊大小16MB~64MB),此時,進入 MapReduce 過程;

由 Master 給空閒的 Worker 分配任務,共有 M 個 Map 任務,R 個 Reduce 任務;

Map Worker 讀取文件,將文件處理為 K/V 鍵值對,K/V 鍵值對緩存於內存中(此時存在一個問題,如果斷電怎麼辦?往下看後邊有解釋);

將緩存於內存的 K/V 鍵值對寫入磁碟,分成 R 堆(分堆方法有很多種,論文中提到了使用 Hash 散列函數),然後將結果發送給 Master;

Master 將這些 K/V 鍵值對的存儲地址告知 Reduce,Reduce Worker 通過 RPC(遠程過程調用)進行讀取,讀取完畢之後會根據 Key 值進行排序(這樣,相同 Key 值的就會在一起。但是存在一個問題,如果內存不夠大,排序該怎麼進行?可以使用外部排序);

Reduce Worker 將已經排序的結果進行遍歷,將每個 Key 值所對應的一組 Value,所組成的 <key, value[num]>傳遞給用戶所編寫的 reduce 函數進行處理;

所有的 Map,Reduce 任務都完成後,告知用戶程序,MapReduce 已經結束,返回用戶程序。

容錯處理(Fault-Tolerance)

MapReduce 中的容錯處理是非常重要的,因為MapReduce 是運行於分布式環境中的,在分布式環境中經常會有機器出現錯誤,我們不能讓個別機器的錯誤影響到整體。

Worker 崩潰

Master 通過定期給 Worker 發送心跳(heartbeat)來檢測 Worker 是否還在正常工作,如果 Worker 無應答或者是應答有誤,我們認定它已經宕機(fail)。如果正在工作的 Worker 宕機了,那麼運行在它上面的 map 任務會進行初始化(初始狀態為 idle,任務還有其他2種狀態,in-progress處理中,completed 已完成),重新被分配到正常的 Worker 上。

如果說 Map Worker 已經完成了一些工作,我們仍然要對運行在它上面的所有任務重新進行分配,這是為什麼呢?這裡同時可以解決上面的那個問題。因為 Map Worker 處理後的中間結果存在於內存中,或者是 local disk 中,一旦它宕機,這些數據就獲取不到了。

但是對於 Reduce Worker,它完成的任務不用重做,因為它處理後的結果是保存在全局存儲中的。

如果,在 Map Worker A 宕機之後,它所做的任務被重新分配給了 Map Worker B,後邊的 Reduce Worker 會被告知,A 已經宕機,要去 B 去讀取數據。

Master 崩潰

如果說 MapReduce 的 Master 宕機了,又該如何處理呢?

MapReduce 中的 Master 會定期進行 checkpoint 備份,如果 Master 宕機,會根據之前的 checkpoint 進行恢復,但是恢復期間,MapReduce 任務會中斷。

一些細節問題

因為用戶的 reduce 函數是 deterministic 的,所以即使有多個 Reduce Worker 都執行了同一個任務,但是它們執行的結果都是一樣的,並不影響最後的結果。

正是因為 reduce 函數是 non-deterministic 的,本來每次執行的結果也不確定,所以更不會產生影響。

Input 文件保存於 GFS 中,GFS 會將它們分塊保存(每塊16MB~64MB),GFS 會對每個文件有3個備份,備份在不同的機器上。

遵循就『近』原則,將任務分配給離任務所保存的位置最『近』的 Worker,這裡對『近』的定義是網絡層面上的,比如說在同一個交換機下的兩個機器就是距離『近』的。

一開始將文件分塊時,分為 M 塊,遠大於 Map Worker 的數量就有助於負載均衡。同時,這樣做還有一個好處,就是當一個 Worker 宕機的時候,可以將任務迅速分配開來,分到多個 Worker 上去。如果 M 比較小,有可能當一個 Worker 宕機時,它的任務不夠分配到剩下的 Worker 中,會有 Worker 閒置。

MapReduce 有一種機制應對這種情況:MapReduce 會對未完成的任務(in-progress) 定時執行備份執行操作(即,把這些正在某些 Worker 上執行但未完成的任務再次分配給其他 Worker 去執行),不論這個任務被哪個 Worker 完成都會被標記為已完成。

MapReduce 給用戶提供了一個 Combiner 函數,這個函數可以將結果在發送到網絡之前進行合併,例如發送鍵值對<」by」, 3>。

相關焦點

  • 【MIT 6.824】學習筆記 1: MapReduce
    ▲ 點擊上方"多顆糖"關注公眾號2021 年的 MIT 6.824 開課了,記錄和分享一下自己的學習筆記ReferenceMapReduce 論文:https://pdos.csail.mit.edu/6.824/papers/mapreduce.pdfMIT 6.824 2021 視頻:https://www.youtube.com/watch?
  • HBase與mapreduce集成
    在公司中,大多數都是hbase和mapreduce共同進行業務操作,hbase多數都是讀寫操作,hbase和hadoop在內部已經封裝好了,我們要做的就是調用。使用下命令統計rowkey/opt/bigdata/hadoop-2.7.3/bin/yarn jar hbase-server-1.2.1.jar rowcounter tt運行成功結果顯示出來了org.apache.hadoop.hbase.mapreduce.RowCounter
  • 【實驗任務】MapReduce社交好友推薦算法
    org.apache.hadoop.fs.FileSystem;  import org.apache.hadoop.fs.Path;  import org.apache.hadoop.io.LongWritable;  import org.apache.hadoop.io.Text;  import org.apache.hadoop.mapreduce.Job
  • 獨家 | 一文讀懂Hadoop(三):Mapreduce
    讀者可以通過閱讀「一文讀懂Hadoop」系列文章,對Hadoop技術有個全面的了解,它涵蓋了Hadoop官網的所有知識點,並且通俗易懂,英文不好的讀者完全可以通過閱讀此篇文章了解Hadoop。本期內容為大家詳解Mapreduce:Mapreduce是一個計算框架,既然是做計算的框架,那麼表現形式就是有個輸入(input),mapreduce操作這個輸(input),通過本身定義好的計算模型,得到一個輸出(output),這個輸出就是我們所需要的結果。
  • 小築筆記——工作、學習、閱讀、資料、靈感筆記
    今天呢,給大家帶來一款針對一些經常喜歡記筆記的用戶而打造的記筆記工具,小築筆記特殊的記筆記格式可以讓用戶反覆觀看而不讓,用戶寫起筆記來也很方便快捷。 小築筆記app是一款專門用於資料保存管理的軟體,該軟體是適合於學生或者工作者,是可以將自己的筆記、工作內容可以進行很好的整理,非常方便。小築筆記,樹形結構,無限分層,自由排序。利於分析分解、梳理知識、思想、事情。整潔清晰,為長久的積累、使用而設計。
  • Hive與MapReduce相關排序及自定義UDF函數
    Hive和mapreduce相關的排序和運行的參數1.設置每個reduce處理的數據量(單位是字節)我們在hive中查看下配置文件hive-site.xml.template
  • 如何做好文獻閱讀筆記
    本節內容劉教授將為大家講述如何做好文獻閱讀筆記。撰寫論文時,大家肯定要先讀論文,一方面要了解你研究領域的前言,另一方面也會從別人的文章中獲得一些寫作經驗,這些文獻中的研究內容還可以作為你當前研究的重要證據。做好文獻閱讀筆記,第一是提高閱讀效率,第二是幫助思考。那麼要做好文獻筆記有什麼好的方法嗎?
  • 語文課:課外閱讀筆記如何記錄的四個注意事項(閱讀筆記篇)
    這裡就分享一個課外閱讀記錄筆記的方法幫助學生們快速提升自己的閱讀量。第一個閱讀筆記注意事項:每閱讀完一篇文章的一段就記錄一次筆記。課外閱讀的文章一般都很長,都快趕上一篇短篇小說了。那麼,閱讀的時候就可以分段落的記錄筆記,把每一段主要講解的內容總結出來就可以了。
  • 如何有效閱讀一本書——讀書筆記在閱讀中的使用
    閱讀是件讓人愉悅的事。今天讀了奧野宣之的《如何有效閱讀一本書》,對如何閱讀又有了新的認識。通過做筆記吸取書中營養,讓書中的知識轉化為自己的「智慧」,這才是讀書的真正的意義。《如何有效閱讀一本書》我認為是專門為了解決功能性閱讀的方法的書。書中談到做筆記,而且還強調是用紙質的筆記本。這個我不是特別認可,我認為一款好的筆記本軟體要勝過紙質筆記本太多了。就像我現在用的OneNote,簡直是學習讀書的好幫手。我最近在用OneNote做讀書筆記,發現確實好用,尤其是在功能性閱讀上。
  • 閱讀筆記方法之康奈爾筆記法
    我們說過在讀書的時候做筆記是一種提高閱讀效率,增強閱讀效果的好方法。很多同學的讀書筆記僅僅限於摘抄下書中的段落詞句,也就是注意了積累,但是沒有自己的思考,這樣的讀書方法也是不正確的。今天,我要介紹一種記讀書筆記的方法-康奈爾筆記法。
  • 電子閱讀時代做筆記沒用?
    無論你是在手機上、電子書閱讀器上、臺式機上、筆記本電腦上、一沓鬆散的電子書列印稿或者是一幅捲軸上看到的《遠大前程》,它都是一本書。在以上任何一種載體中,它都還是《遠大前程》—考慮到人們對電子閱讀時代即將來臨的普遍憂慮,它也還是蘊含著深刻含義的同一本書,這是值得強調的一點。
  • 《洋蔥閱讀法》筆記二
    第三章劍士:快速閱讀場景導入:快速閱讀的訣竅一天讀完一本書、一個小時讀完一本書,甚至30分鐘讀完一本書的秘訣有兩種方法:一種方法是從第一頁開始看,逐句逐頁地閱讀,每次的閱讀時間大概是30分鐘;另一種方法同樣也是30分鐘的閱讀時間,我們先用8分鐘時間了解一下目錄和序言,剩下的22分鐘直接閱讀從書中挑出的感興趣的章節或比較重要的章節
  • 一線教師的閱讀忠告:無筆記,不讀書
    01 前幾天,寫了一篇關於閱讀的文章。有朋友留言說,「閱讀應該有正確的方法、有筆記,所謂無筆記不讀書。這樣方能儘量儘快吸收其精華。泛泛而讀,則是走馬觀花。」而吾生也有涯,如果所有的書都精讀,只會讓自己的閱讀量變小。比如諸葛亮讀書,就「觀其大略」,和「務於精純」的朋友們不同。陶淵明在《五柳先生傳》中則自況云:「好讀書,不求甚解」。泛讀可以增加閱讀的廣度,亦是對一本書要不要精讀的一種檢視和判斷,這是閱讀的基礎。
  • /英語筆記/英語閱讀的解題邏輯&技巧
    英語拿分的大頭在閱讀,所謂得閱讀者得天下。
  • 孩子不會閱讀摘抄做筆記?做筆記到底多重要?好多家長沒意識到!
    閱讀為什麼要做筆記?我們有諺語「好記性不如爛筆頭」,做筆記是世世代代人流傳下來的寶貴經驗,經得起推敲。閱讀要做筆記與情緒記憶相關舉個例子,曾有人對老師這個群體做過調查:曾經問過滿屋子的教師,他們是否在學校裡有過不愉快的經歷。描述了學生經歷過的各種各樣的可怕的、悲傷的、恐怖的或者卑微的事情,這些經歷給學生造成的影響會伴隨他們很多年。
  • 假期讀書計劃制定【附閱讀筆記模板】
    如需閱讀筆記模板電子列印版讀書筆記有多種,主要有「記在文章裡」和「單獨記在讀書筆記」上兩大類。前一種諸如批註、圈畫之類,我今天推薦的是單獨記在筆記本上,而且有圖表格式。不管是哪一類,做讀書筆記是為了更好地「積累」、「思考」和「應用」。哇,學齡前都不會寫字,記什麼筆記啊!陶子你這也是在「拔高超綱」嗎?noooo,放心,拔高超綱之類我是最排斥的。
  • MIT6.824分布式系統(2020春)及MapReduce
    文檔:https://pdos.csail.mit.edu/6.824/labs/lab-mr.htmlMapReduce論文:http://static.googleusercontent.com/media/research.google.com/zh-CN//archive/mapreduce-osdi04
  • 【碎片化閱讀方法筆記】
    【碎片化閱讀】利用碎片化的時間,閱讀碎片化的內容進行碎片化的吸收,分享碎片化的輸出【我的收穫】解決了「書太難」的問題01 拆書:我感覺書薄了,心裡有個聲音說我可以閱讀,我有信心產生問題:內容太理論,我的大象走神犯困了,第一章讀完沒有任何印象。
  • 新版FMEA英中對照閱讀筆記
    製作FMEA閱讀筆記的目的是讓想看AIAG VDA FMEA書籍的相關人員有一個閱讀理解起來比較清楚明白,簡單方便、
  • 《如何有效閱讀一本書》記筆記的方法,如何使用讀書筆記|乾貨
    重要的是不管篇幅多少,都要下點功夫讓自己對讀過的書有印象,即使只記下這本書的作者,書名,閱讀時的情景或是做些摘抄都好,要堅持寫讀書筆記,這是最有效的讀書方法。」讓自己讀過的每一本書都有紮實的收穫。關於讀書的速度,有了收穫之後再去訓練讀書速度或鍛鍊嚴密的邏輯思考能力。