《分佈式技術原理與算法解析》學習筆記Day13

分佈式計算模式:MapReduce

什麼是分治法?

分治法是將一個複雜、難以直接解決的大問題,分割成一些規模小、可以比較簡單或者直接求解的子問題,這些子問題之間相互獨立且與原問題形式相同,遞歸的求解這些子問題,然後將子問題的解合併得到原問題的解。

適合採用分治法的問題有以下特徵:

  1. 問題規模比較大或者複雜,且問題可以分解爲幾個規模較小的、簡單的同類型問題進行求解。
  2. 子問題之間相互獨立,不包含公共子問題。
  3. 子問題的解可以合併得到原問題的解。

採用分治法的核心步驟:

  1. 分解原問題
  2. 求解子問題
  3. 合併解

什麼是MapReduce?

Google提出的MapReduce分佈式計算模型,是分治法的典型代表,它一開始被應用於搜索領域,後來被廣泛應用到解決各種海量數據的計算問題。

MapReduce分爲Map和Reduce兩個核心階段,其中Map對應”分“,即把複雜的任務分解爲若干”簡單的任務“來執行,Reduce對應着”合“,即對Map階段的結果進行彙總。

MapReduce拆分後的任務具有以下特徵:

  1. 相對於原始任務來說,拆分後的子任務和原任務是同質的。
  2. 多個子任務之間沒有依賴,可以獨立運行、並行計算。

MapReduce包括三大組件:

  1. Master,負責分配任務、協調任務,並未Mapper分配map()函數操作、爲Reducer分配reduce()函數操作。
  2. Mapper worker,負責Map函數功能,執行子任務。
  3. Reducer worker,負責Reduce函數功能,彙總各個子任務的結果。

整個MapReduce的工作流程可以以分爲5個階段:輸入、拆分、映射、化簡和輸出。

什麼是Fork-Join模式?

Fork-Join是Java等語言或者庫提供的原生多線程並行處理框架,採用線程級的分而治之的計算模式,充分利用多核CPU的優勢,以遞歸的方式把一個任務拆分成多個“小任務”,把多個“小任務”放在多個處理器上運行,即Fork操作,當多個“小任務”執行完成後,在將這些直結果合併起來即可得到原始任務的結果,即Join操作。

Fork-Join模式不能大規模擴展,只適用於在單個Java虛擬機運行,多個小任務雖然運行在不同的處理器上,但是可以互相通信。

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