iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 19
0

規模化 Data Pipeline

主旨:了解如何大規模的執行 data pipeline

MapReduce

在講到規模化 data pipeline 之前,我們必須要介紹到一個重要的資料處理框架:MapReduce,MapReduce 是 Google 在 2004 所發表一篇重要研究論文(天知道他們已經在內部使用這項技術多久了,所以說 Google 裡面一堆黑科技,真的可比做是當年半導體界的 Intel 啊...),而後續有許多專案使用的這項技術如 Apache Pardo。

在 MapReduce 中處理資料,一開始便是將資料分割,每塊被分割的資料將被分散儲存在運算叢集中,而在這樣的框架中運行 job,你要撰寫 Map 和 Reduce 兩個函式。

一個 Map 函式應該是 stateless,以便可以將其安排跨叢集中的節點來做平行運行,每個 Map 都從此運行的節點上讀取數據、處理數據並產生輸出。Map 運行的輸出會在不同節點間洗牌後傳進下一個階段:Reduce。

而 Reduce 的部分則可以視為是對資料做聚合的操作,這類聚合的操作例如像計算資料內的個數、加總等等。

當 Reduce 的動作結束後,資料處理的結果就是 pipeline 的輸出,下圖是整個運作過程的示意:

另外 Map 的關係也不見得只限於1對1,也可以是多對多,下面使用 beam.Map()beam.FlatMap() 分別作為例子:

若你很習慣 GroupByKey 的用法,這邊也可以使用 beam.GroupByKey()

不過 Combine PerKey 是更常見的操作,它包含了洗牌和 Reduce 的步驟來幫助你實現聚合運算例如說加總、計算,下面是 Combine 的例子。

[GCP Lab實作-13]:MapReduce in Dataflow

這個實作中,我們將學會:

  • 在 Dataflow 中使用 pipeline 選項
  • 實現 mapping transformations
  • 實現 reduce aggregations

[Part 1]:辨別 Map 和 Reduce 操作並且執行 pipeline

  1. 和昨天 lab 前面1~4步驟一樣,直到打開 code editor,點進這次的程式 is_popular.py

  1. 一開始程式碼內容是和輸入參數有關的,例如說 --input 和 --output-prefix:

  1. 後面則是 pipeline 的操作,包含了要讀取的資料、從裡面尋找關鍵字 import 並且建立 mapping 關係( beam.FlatMap() )、加總、取出前5名,到最後的輸出:

  1. 看完程式碼之後,就來執行看看並且看看結果,可以看到前5名的結果:
./is_popular.py

cat /tmp/output-*

  1. 接著試試看改變輸入參數,再執行程式看結果如何,可以看到多出檔名開頭有 myoutput 的結果檔案:
./is_popular.py --output_prefix=/tmp/myoutput

ls -lrt /tmp/myoutput*


今天介紹了在 Dataflow pipeline 中,Map 和 Reduce 操作,明天我們將介紹 “使用Cloud Dataprep做資料前處理”。


上一篇
鐵人賽Day18 - Feature Engineering (2/6)
下一篇
鐵人賽Day20 - Feature Engineering (4/6)
系列文
Machine Learning with TensorFlow on Google Cloud Platform30

尚未有邦友留言

立即登入留言