本次Talk的題目是Google Cloud Dataflow:from concepts to practice。
Dataflow這個概念第一次與開發(fā)者見面是在2014年6月的Google I/O大會上,同年12月,Google首先公布了Dataflow的Java SDK及SDK的源代碼。2015年3月初,Dataflow正式上線,作為一個云服務(wù)產(chǎn)品出現(xiàn)在Google Cloud產(chǎn)品線中并提供Alpha版本的試用申請。
在傳統(tǒng)的MapReduce大數(shù)據(jù)并行處理中,單一的MapReduce節(jié)點無法滿足復(fù)雜的業(yè)務(wù)需求,因此多數(shù)的大數(shù)據(jù)處理是以MapReduce多節(jié)點管道方式搭建的。這需要開發(fā)者編寫額外的代碼將多個MapReduce節(jié)點連接起來并管理各節(jié)點的狀態(tài)和相互之間的數(shù)據(jù)傳輸,同時還要維護一個很大的服務(wù)器集群;另外,大數(shù)據(jù)的實時計算也給MapReduce帶來了極大的挑戰(zhàn)。這是Google開發(fā)Dataflow的初衷。作為Google Cloud的一個產(chǎn)品,Dataflow可以與App Engine、Compute Engine,Google Storage、Google Datastore、Google Cloud SQL云存儲服務(wù)結(jié)合,快速搭建一個較為完整的實時大數(shù)據(jù)并行處理系統(tǒng)。Dataflow簡化了系統(tǒng)開發(fā)的流程,開發(fā)者使用SDK在本地開發(fā)、測試和調(diào)試并隨時將代碼提交到云服務(wù)上測試和運行。Dataflow會自動對用戶的流處理系統(tǒng)進行優(yōu)化并分發(fā)到多個計算節(jié)點上并發(fā)執(zhí)行。
用戶開發(fā)的大數(shù)據(jù)系統(tǒng)可從Google提供的多種存儲服務(wù)和Pub/Sub服務(wù)中讀取數(shù)據(jù)進行處理后再寫入到指定的存儲服務(wù)或Pub/Sub服務(wù)中。由于Google的存儲服務(wù)采用了成熟的業(yè)界標(biāo)準(zhǔn),因此用戶同樣可以將Hadoop、Spark等產(chǎn)品集成到Dataflow中。
Dataflow底層依賴于兩個技術(shù):FlumeJava和MillWheel。與2003年的Map-Reduce、BigTable等概念類似,Google研究院于2010年和2013年分別發(fā)表的兩篇論文介紹FlumeJava和MillWheel,在此之前,這兩個項目在Google內(nèi)部均有一定程度的成功實踐。
在FlumeJava發(fā)布之后,有不少媒體稱其為下一代的MapReduce(個人認為這個評價過高)。FlumeJava是一個Java庫,提供了一個更簡單的大數(shù)據(jù)并行處理框架和工具,其底層的算法模型還是MapReduce。FlumeJava在更高的層面上對MapReduce管道進行數(shù)據(jù)和流程的抽象,同時提供了內(nèi)置的流程優(yōu)化策略。FlumeJava將數(shù)據(jù)模型抽象為PCollection<T>和PTable<K,V>兩個泛型數(shù)據(jù)結(jié)構(gòu),并在這兩個數(shù)據(jù)結(jié)構(gòu)上定義了parallelDo(),groupByKey(),combineValues()和flatten()四個操作原語,同時在這四個操作原語的基礎(chǔ)上定義了count(),join()和top()等常用操作。通過與傳統(tǒng)MapReduce、專家優(yōu)化的MapReduce作對比,F(xiàn)lumeJava在所需要的代碼行數(shù),方法個數(shù)和執(zhí)行時間上均優(yōu)于傳統(tǒng)MapReduce并同專家優(yōu)化的MapReduce系統(tǒng)不相上下。也就表明通過FlumeJava,普通開發(fā)者能在更短時間內(nèi)就開發(fā)出專家級的MapReduce系統(tǒng)。
Dataflow的另外一個底層技術(shù)是MillWheel,其提供了帶容錯機制的實時數(shù)據(jù)處理模型。從Google研究院發(fā)表的論文來看,MillWheel是一種模型和算法而沒有提供可編程框架,因此目前我們沒有機會了解其代碼層面的實現(xiàn)。從原理上講,MillWheel內(nèi)置容錯機制,采用低水位(low watermarks)機制避免因網(wǎng)絡(luò)延遲等因素導(dǎo)致的數(shù)據(jù)流順序不一致的問題。實時數(shù)據(jù)處理是近幾年的熱點,市面上已有的產(chǎn)品包括Storm,Spark Streaming,Yahoo S3,Samza等。與這四者的對比顯示MillWheel基本上是這幾種產(chǎn)品特性的整合。
了解了FlumeJava和MillWheel的基本概念和原理,我們就更容易理解Dataflow的運行機制和特性。Dataflow可以簡單的認為是二者的集成,但是我相信Google肯定花費了大量的精力來優(yōu)化二者以及與整個Google Cloud產(chǎn)品線的集成。
上圖是Dataflow的一個示例代碼,開發(fā)了一個大家耳熟能詳?shù)腤ord Count應(yīng)用。通過代碼可以看出基于Dataflow編寫并發(fā)的大數(shù)據(jù)處理管道更容易也更簡單。通過Dataflow提供的SDK可以很方便的把改代碼提交到云服務(wù)上執(zhí)行,并通過Developer Console進行監(jiān)控和管理。
小結(jié):Google Dataflow是為了解決傳統(tǒng)MapReduce應(yīng)對復(fù)雜業(yè)務(wù)流程的困難并結(jié)合實時數(shù)據(jù)分析的需求而開發(fā)的云服務(wù),給開發(fā)者提供了一個快速開發(fā)、測試、debug和生產(chǎn)運行、監(jiān)控的SDK、工具及云服務(wù),其本身沒有創(chuàng)造性的理論或算法模型。由于是FlumeJava和MillWheel的集成,并可以調(diào)用Google Cloud提供的存儲和Pub/Sub服務(wù),因此可以在批處理和實時計算二者之間進行無縫地切換。目前的缺陷是版本還不穩(wěn)定;Google Cloud本身提供的服務(wù)還比較少;發(fā)布時間尚短,沒有一個較為成功的商業(yè)案例。但是,Google作為直接開啟大數(shù)據(jù)潮流的先驅(qū),其提供的大數(shù)據(jù)平臺還是值得我們?nèi)パ芯亢吞剿鞯摹?/span>
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/weixin_45932629/article/details/103315968