Google Dataflow
十分鐘了解分布式計(jì)算:Google Dataflow
介紹
Google Cloud Dataflow是一種構(gòu)建、管理和優(yōu)化復(fù)雜數(shù)據(jù)處理流水線的方法,集成了許多內(nèi)部技術(shù),如用于數(shù)據(jù)高效并行化處理的Flume和具有良好容錯(cuò)機(jī)制流處理的MillWheel。Dataflow當(dāng)前的API還只有Java版本(其實(shí)Flume本身是提供Java/C++/Python多種接口的)。
相比原生的map-reduce模型,Dataflow有幾個(gè)優(yōu)點(diǎn):
可以構(gòu)建復(fù)雜的pipeline,在這不妨引用Google云平臺(tái)的產(chǎn)品營(yíng)銷(xiāo)總監(jiān)Brian Goldfarb的話
Cloud Dataflow可以用于處理批量數(shù)據(jù)和流數(shù)據(jù)兩種。在一個(gè)世界性事件(比如演講當(dāng)中的世界杯事件)中,實(shí)時(shí)分析上百萬(wàn)twitter數(shù)據(jù)。在流水線的一個(gè)部階段責(zé)讀取tweet,下一個(gè)階段負(fù)責(zé)抽取標(biāo)簽。另一個(gè)階段對(duì)tweet分類(lèi)(基于情感,正面負(fù)面或者其他方面)。下一個(gè)階段過(guò)濾關(guān)鍵詞等等。相比之下,Map/Reduce這個(gè)用來(lái)處理大數(shù)據(jù)的較早模型,處理這種實(shí)時(shí)數(shù)據(jù)已經(jīng)力不從心,而且也很難應(yīng)用到這種很長(zhǎng)很復(fù)雜的數(shù)據(jù)流水線上。
不需手工配置和管理MapReduce集群。自動(dòng)進(jìn)行代碼優(yōu)化和資源調(diào)度,使得開(kāi)發(fā)者的主要精力可以放在業(yè)務(wù)邏輯本身
支持從Batch到Streaming模式的無(wú)縫切換: 假設(shè)我們要根據(jù)用戶在twitter上產(chǎn)生的內(nèi)容,來(lái)實(shí)現(xiàn)一個(gè)hashtags自動(dòng)補(bǔ)全的功能
Example: Auto completing hashtags Prefix Suggestions ar #argentina, #arugularocks, #argylesocks arg #argentina, #argylesocks, #argonauts arge #argentina, #argentum, #argentine 代碼幾乎和數(shù)據(jù)流一一對(duì)應(yīng),和單機(jī)程序的編寫(xiě)方式差別不大Dataflow將數(shù)據(jù)抽象為一個(gè)PCollections (“parallel collections”),PCollection可以是一個(gè)內(nèi)存中的集合,從Cloud Storage讀進(jìn)來(lái),從BigQuerytable中查詢得到,從Pub/Sub以流的方式讀入,或者從用戶代碼中計(jì)算得到。 為了對(duì)PCollection進(jìn)行處理,Dataflow提供了許多PTransforms (“parallel transforms”),例如ParDo (“parallel do”) 對(duì)于PCollection中每一個(gè)元素分別進(jìn)行指定操作(類(lèi)似MapReduce中的Map和Reduce函數(shù),或者SQL中的WHERE),GroupByKey對(duì)一個(gè)key-value pairs的PCollection進(jìn)行處理,將相同key的pairs group到一起(類(lèi)似MapReduce中的Shuffle步驟,或者SQL中的GROUP BY和JOIN)。 此外,用戶還可以將這些基本操作組合起來(lái)定義新的transformations。Dataflow本身也提供了一些常用的組合transformations,如Count, Top, and Mean。 這是一個(gè)經(jīng)典的批處理的例子轉(zhuǎn)化為streaming做法只需改動(dòng)數(shù)據(jù)源。如果我們現(xiàn)在希望模型提供的是最新的熱詞,考慮數(shù)據(jù)的時(shí)效性,只需額外添加一行設(shè)置數(shù)據(jù)window的操作,比如說(shuō)60min以前的數(shù)據(jù)我們就不要了
Dashboard: 還可以在developer console中了解流水線中每個(gè)環(huán)節(jié)執(zhí)行的情況,每個(gè)流程框基本對(duì)應(yīng)著一行代碼
生態(tài)系統(tǒng): BigQuery作為存儲(chǔ)系統(tǒng)是Dataflow的一個(gè)補(bǔ)充,經(jīng)過(guò)Dataflow清洗和處理過(guò)的數(shù)據(jù),可以在BigQuery中存下來(lái),同時(shí)Dataflow也可以讀取BigQuery以進(jìn)行表連接等操作。如果想在Dataflow上使用一些開(kāi)源資源(比如說(shuō)Spark中的機(jī)器學(xué)習(xí)庫(kù)),也是很方便的
為了配合Dataflow,Google Cloud Platform還為開(kāi)發(fā)者提供了一系列工具,包括云保存,云調(diào)試,云追蹤和云監(jiān)控。
比較
Cascading/Twitter Scalding: 1) 傳統(tǒng)Map-reduce只能處理單一的流,而Dataflow可以構(gòu)建整個(gè)pipeline,自動(dòng)優(yōu)化和調(diào)度,Dataflow乍一聽(tīng)感覺(jué)非常像Hadoop上的Cascading(Java)/Scalding(Scala)。 2) 它們的編程模型很像,Dataflow也可以很方便做本地測(cè)試,可以傳一個(gè)模擬集合,在上面去迭代計(jì)算結(jié)果,這一點(diǎn)是傳統(tǒng)Map-reduce望塵莫及的。
Twitter Summingbird: 而將批處理和流處理無(wú)縫連接的思想又聽(tīng)起來(lái)很像把Scalding和Strom無(wú)縫連接起來(lái)的twittersummingbird(Scala).
Spark: 1)Spark也有可以構(gòu)建復(fù)雜的pipeline做一代碼優(yōu)化和任務(wù)調(diào)度的好處,但目前還需要程序員來(lái)配置資源分配。 2) Spark在設(shè)計(jì)分布式數(shù)據(jù)集API時(shí),模擬了Scala集合的操作API,使得額外的語(yǔ)法學(xué)習(xí)成本比Dataflow要低。 3) 不過(guò)Dataflow似乎并沒(méi)有提內(nèi)存計(jì)算的事兒,而這一點(diǎn)可以說(shuō)是Spark最本質(zhì)的特征。不過(guò)它支持將Spark作為Open Source工具,連入Cloud框架作為補(bǔ)充。 4) 分布式計(jì)算中除了Batch和Streaming,Graph也是一個(gè)重要的問(wèn)題,Spark在這方面有GraphX,Dataflow在未來(lái)也會(huì)將處理Graph處理這塊整合進(jìn)去。
參考
本文的內(nèi)容主要基于官方資料
Sneak peek: Google Cloud Dataflow, a Cloud-native data processing service
Google I/O 2014 - The dawn of "Fast Data"(國(guó)內(nèi)用戶下載)
鏈接
Google Cloud Dataflow 簡(jiǎn)單理解
Cloud Dataflow :云計(jì)算時(shí)代的新計(jì)算模式
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
MillWheel: Fault-Tolerant Stream Processing at Internet Scale,Very Large Data Bases (2013), pp. 734-746
轉(zhuǎn)載請(qǐng)注明出處:十分鐘了解分布式計(jì)算:Google Dataflow
總結(jié)
以上是生活随笔為你收集整理的Google Dataflow的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 之前没有祠堂(祖祠),2022年想申请新
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?