Google不再用 MapReduce了! Beam 帶你進入資料新世界

beam-architecture

AlphaGo完勝世界頂尖棋手的捷報下,機器學習(Machine Learning)儼然成為現今網路科技的顯學。機器學習涵蓋了跨領域的know-how、演算法以及數據。其中數據又是決定機器學習品質重要的一環。Google 深耕大數據分析及應用多年,無所不能的搜尋引擎就是最好的例子。在資料提取(data ingestion)、資料處理(data process)、資料分析(data analytics)以及資料視覺化(data virtualization)等,Google終將這些數據的工作流程轉化為一個一個簡單管理的元件,提供給Google Cloud Platform (GCP) 的使用者使用。

GCP中的大數據服務包含了:Cloud Pub/Sub、Cloud Dataflow、BigQuery以及Dataproc。其中Cloud Pub/Sub之於資料提取的管理;Cloud Dataflow之於資料處理的管理;BigQuery之於資料分析及資料倉儲(data warehouse);Dataproc之於整合Hadoop完整的生態系及Spark。

gcp-big-data

本文從資料處理作為切入,從簡述 Cloud Dataflow 的 programming framework 源頭 – Apache Beam 談起,並將Cloud Dataflow與現今常用的幾個大數據產品:Spark、Flink 做初步的比較,好讓資料工程師、資料科學家做進一步的了解。

Apache Beam的小歷史

Apache Beam 是由 Google 主導的一個開源(open source)專案。2003 年 Google 發布了重要的三篇大數據的論文:Google FS、MapReduce、BigTable,震驚了資料界,也奠定了Google 在網路科技霸主的地位。但是隨後當時的 Hadoop 之父- Doug Cutting 根據這些論文發展了 Hadoop 及 MapReduce、甚至到後來處理串流資料的 Spark 等,讓 Google 決定不單貢獻於內部專案,而想親身參與、和全世界一起打造大數據平台。Apache Beam 就是因應這樣的趨勢而誕生。

Apache Beam 的主要負責人 – Tyler Akidau 於他的部落格上說明為什麼要做 Apache Beam:

要為這個世界貢獻一個易用且強大的模型,這個模型既可以掌握批次處理又可以實作串流處理,而且能在不同平台上移轉實作。當然 Google 並不滿足於此,他將這樣的技術包裝於 Cloud Dataflow 中,讓使用 Apache Beam 的使用者,也可以在 GCP 上更方便地使用。我們從(如圖一)可以發現,從 Google 原本「惦惦呷三碗公」到之後於開源世界演進出 Hadoop、Spark, Flink 等產品,也算是耐人尋味。

The-Evolution-of-Apache-Beam

Beam, The Dataflow SDK

說了這麼多,統整一下 Apache Beam 的特點:

  1. 統一處理 batch 資料及 streaming 資料
  2. 能在任何 engine 上運行

這些為數據提供了統一的模型,同時包含資料提取、資料處理、資料整合。為了整合這些實作,Apache Beam 設計了 The Dataflow SDK (如圖二),整合目前市面上的所有大數據工具,無論是想使用MapReduce做batch檔案的處理、還是使用 Spark 處理 streaming 檔案都沒有關係。因為您只需專注於撰寫好 pipeline,在最後 runtime 執行時,選擇任何一款:Flink, Spark, Pipeline, Google Cloud Dataflow 都可以。

  1. Pipeline 第一 ‧ Runtime 第二:您僅需要專注於 Dataflow SDK。
  2. 可攜性:可在跨 runtime 之間攜帶,增加擴充性。
  3. 統一整合的模型:batch 資料與 streaming 資料都可以使用。
  4. 開發者工具:都是開發者導向的工具,包含程式庫(libraries)、開源工具等。

其中 pipeline為一個資料管線,該管線由一組可以讀取輸入的數據源,轉換數據(data transformation)以及輸出結果的操作所組成。管線中的數據和變換對於該管線是唯一的,並且屬於該管線。您的程序可以創建多個管線,但這些管線不能共享數據或轉換。

因此,Tyler Akidau 又說了:「streaming 資料流處理和 batch 資料流處理的未來在於 Apache Beam,而 runtime engine 的選擇權在於使用者。」

Dataflow

各種Runtime的相容能力

最後,我們來參考以下 Apache Beam 的 Skill Matrix,下圖展示了 Apache Beam pipeline 在不同 runtime 的相容能力。

matrix-1

matrix-2

matrix-3

matrix-4

簡而言之,眾多 runtime 中,Google Cloud Dataflow 及 Flink 是真正的「streaming導向的runtime」,Spark 是「micro-batch」,是把 batch 的時間變得很短來模擬 streaming,本身其實是 batch engine。另外 Beam 對 Flink 相容最好。以上表格是比較先前的資料,另有高手指點說明,上表 Flink “~” 的部分,其實都是打勾的,有興趣的朋友可以自行測試看看。其中無論是 Cloud Dataflow、Flink、Spark 等用來做 ETL、Pipeline 都不是什麼問題。當然,您也可以選擇是否要使用 Beam 這層框架來處理。

下篇文章會專講 Google Cloud Dataflow 的功能以及整合了哪些GCP原生的產品,來迅速、有效地解決您數據相關的問題,敬請期待!

參考資料:

[1]https://cloudplatform.googleblog.com/2016/01/Dataflow-and-open-source-proposal-to-join-the-Apache-Incubator.html?hl=zh_TW

[2]https://cloud.google.com/blog/big-data/2016/05/why-apache-beam-a-google-perspective

[3]https://beam.apache.org/documentation/runners/capability-matrix/#cap-summary-what

連絡我們