系統設計入門:MapReduce

ChunJen Wang
jimmy-wang
Published in
May 15, 2022

是一種coding模式,透過各個cluster並行分布式算法。

MapReduce的組成步驟:

  1. Map:將資料分割成各個區塊(cluster),進行Map函數,並將其轉換成中間的key-value pairs。
  2. Shuffle:重新組織Map層的key-value pairs。
  3. Reduce:對重新洗牌的key-value pairs進行Reduce函數,並將其轉換為有意義的資料。

以Hadoop的MapReduce為例

假如今天想要計算一段字詞出現的頻率,其背後的運算邏輯是如何進行的?

(1) input資料: 可以是一段文字、一欄資料等等
(2) 分割資料
(3) 進行字詞比對,計算數量 (Mapping)
(4) 從新進行計算筆數 (Shuffing)
(5) 整合計算 (Reducer)
(6) output資料: 組合成字詞出現頻率表

不僅是把資料分割做計算!

試想把資料分割,進行Mapping在分布式的系統中,我們有好幾台server可以同時運作,透過分割、Mapping的過程,就可以把一個相當大的程序,直接分派到各台server上去執行。

原本集中在Master執行的工作,在Mapping後,分派到Slave上執行

現實上的挑戰:
選擇問題需要使用到的Mapping/Reduce function

實際上許多問題並不只是計算詞頻,但我們可以如何將執行工作進行MapReduce的結構,提升計算效率,需要依據要執行的。

也需要注意分割執行的大小。
如 HDFS塊(Hadoop Distributed File System)的大小默認為 64 MB。

並確保分割的執行的task有被正確執行,如Hadoop MapReduce會以一個Job作為最上層,底下分割出去的task則由task tracker監控,並確保每一段分割執行的task有被完成與其執行時間。

--

--

ChunJen Wang
jimmy-wang

嗨,歡迎你的到來,我目前在銀行擔任DS。過去曾做過銀行大型專案BA,也曾在轉職科技業DE中踢了鐵板,相信每一個人都有自己要走的路,而努力的過程,可以讓我們離心中理想更接近,如果我的文章能帶給你一些啟發與幫助,別忘了幫我在文章底下按下拍手~^^