介紹
Google Cloud Dataflow是一種構建、管理和優化復雜數據處理流水線的方法,集成了許多內部技術,如用於數據高效並行化處理的Flume和具有良好容錯機制流處理的MillWheel。Dataflow當前的API還只有Java版本(其實Flume本身是提供Java/C++/Python多種接口的,MillWheel也提供Java/C++的API)。
相比原生的map-reduce模型,Dataflow有幾個優點:
- 可以構建復雜的pipeline,在這不妨引用Google雲平台的產品營銷總監Brian Goldfarb的話
Cloud Dataflow可以用於處理批量數據和流數據兩種。在一個世界性事件(比如演講當中的世界杯事件)中,實時分析上百萬twitter數據。在流水線的一個部階段責讀取tweet,下一個階段負責抽取標簽。另一個階段對tweet分類(基於情感,正面負面或者其他方面)。下一個階段過濾關鍵詞等等。相比之下,Map/Reduce這個用來處理大數據的較早模型,處理這種實時數據已經力不從心,而且也很難應用到這種很長很復雜的數據流水線上。
-
不需手工配置和管理MapReduce集群。自動進行代碼優化和資源調度,使得開發者的主要精力可以放在業務邏輯本身
-
支持從Batch到Streaming模式的無縫切換:
假設我們要根據用戶在twitter上產生的內容,來實現一個hashtags自動補全的功能
 代碼幾乎和數據流一一對應,和單機程序的編寫方式差別不大  Dataflow將數據抽象為一個PCollections (“parallel collections”),PCollection可以是一個內存中的集合,從[Cloud Storage](https://cloud.google.com/products/cloud-storage/)讀進來,從[BigQuery](https://cloud.google.com/products/bigquery/)table中查詢得到,從[Pub/Sub](https://developers.google.com/pubsub/)以流的方式讀入,或者從用戶代碼中計算得到。 為了對PCollection進行處理,Dataflow提供了許多PTransforms (“parallel transforms”),例如ParDo (“parallel do”) 對於PCollection中每一個元素分別進行指定操作(類似MapReduce中的Map和Reduce函數,或者SQL中的WHERE),GroupByKey對一個key-value pairs的PCollection進行處理,將相同key的pairs group到一起(類似MapReduce中的Shuffle步驟,或者SQL中的GROUP BY和JOIN)。 此外,用戶還可以將這些基本操作組合起來定義新的transformations。Dataflow本身也提供了一些常用的組合transformations,如Count, Top, and Mean。 這是一個經典的批處理的例子  轉化為streaming做法只需改動數據源。如果我們現在希望模型提供的是最新的熱詞,考慮數據的時效性,只需額外添加一行設置數據window的操作,比如說60min以前的數據我們就不要了 
Example: Auto completing hashtags Prefix Suggestions ar #argentina, #arugularocks, #argylesocks arg #argentina, #argylesocks, #argonauts arge #argentina, #argentum, #argentine
Dashboard:
還可以在developer console中了解流水線中每個環節執行的情況,每個流程框基本對應着一行代碼
生態系統:
BigQuery作為存儲系統是Dataflow的一個補充,經過Dataflow清洗和處理過的數據,可以在BigQuery中存下來,同時Dataflow也可以讀取BigQuery以進行表連接等操作。如果想在Dataflow上使用一些開源資源(比如說Spark中的機器學習庫),也是很方便的
為了配合Dataflow,Google Cloud Platform還為開發者提供了一系列工具,包括雲保存,雲調試,雲追蹤和雲監控。
比較
- Cascading/Twitter Scalding:
- 傳統Map-reduce只能處理單一的流,而Dataflow可以構建整個pipeline,自動優化和調度,Dataflow乍一聽感覺非常像Hadoop上的Cascading(Java)/Scalding(Scala)。
- 它們的編程模型很像,Dataflow也可以很方便做本地測試,可以傳一個模擬集合,在上面去迭代計算結果,這一點是傳統Map-reduce望塵莫及的。
- Twitter Summingbird:
而將批處理和流處理無縫連接的思想又聽起來很像把Scalding和Strom無縫連接起來的twitter summingbird(Scala).- Spark:
- Spark也有可以構建復雜的pipeline做一代碼優化和任務調度的好處,但目前還需要程序員來配置資源分配。
- Spark在設計分布式數據集API時,模擬了Scala集合的操作API,使得額外的語法學習成本比Dataflow要低。
- 不過Dataflow似乎並沒有提內存計算的事兒,而這一點可以說是Spark最本質的特征。不過它支持將Spark作為Open Source工具,連入Cloud框架作為補充。
- 分布式計算中除了Batch和Streaming,Graph也是一個重要的問題,Spark在這方面有GraphX,Dataflow在未來也會將處理Graph處理(Pregel)這塊整合進去。
參考
本文的內容主要基於官方資料
Sneak peek: Google Cloud Dataflow, a Cloud-native data processing service
Google I/O 2014 - The dawn of "Fast Data"(國內用戶下載)
鏈接
Google Announces Cloud Dataflow Beta at Google I/O
Google Launches Cloud Dataflow, A Managed Data Processing Service
Mapreduce successor google cloud dataflow is a game changer for hadoop thunder
論文
FlumeJava: Easy, Efficient Data-Parallel Pipelines,PLDI,2010
轉載請注明出處:
十分鍾了解分布式計算:Google Dataflow