面向大数据处理的数据流编程模型和工具综述
點擊上方藍字關(guān)注我們
面向大數(shù)據(jù)處理的數(shù)據(jù)流編程模型和工具綜述
鄒驍鋒,?陽王東,?容學(xué)成,?李肯立,?李克勤
湖南大學(xué)信息科學(xué)與工程學(xué)院,湖南 長沙 410008
論文引用格式:
鄒驍鋒,?陽王東,?容學(xué)成,?李肯立,?李克勤.面向大數(shù)據(jù)處理的數(shù)據(jù)流編程模型和工具綜述.?大數(shù)據(jù)[J], 2020, 6(3):59-72
ZOU X F, YANG W D, RONG X C, LI K L, LI K Q.A survey of dataflow programming models and tools for big data processing.?Big Data Research[J], 2020, 6(3): 59-72
1 引言
自21世紀(jì)以來,移動互聯(lián)網(wǎng)、物聯(lián)網(wǎng)和云計算等新的信息化技術(shù)被廣泛應(yīng)用,這些新興的技術(shù)在應(yīng)用過程中產(chǎn)生了海量的數(shù)據(jù)。隨著海量數(shù)據(jù)的產(chǎn)生,處理海量數(shù)據(jù)的新的大數(shù)據(jù)處理技術(shù)被廣泛研究,在大型計算機集群上使用分布式并行計算技術(shù)構(gòu)建的分布式大數(shù)據(jù)處理平臺也得到快速發(fā)展,從最初的Hadoop及其生態(tài)系統(tǒng)發(fā)展到基于內(nèi)存計算的Flink、Storm、Spark等。基于傳統(tǒng)的數(shù)據(jù)庫技術(shù),對大數(shù)據(jù)離線批處理分析的研究較多,相關(guān)應(yīng)用也較為成熟。但是隨著實時產(chǎn)生的數(shù)據(jù)增多,對流式數(shù)據(jù)(如視頻)進行實時性分析的需求也越來越普遍,這些實時性強的應(yīng)用領(lǐng)域的海量數(shù)據(jù)規(guī)模對目前的大數(shù)據(jù)處理平臺提出了極大的挑戰(zhàn)。經(jīng)典的應(yīng)用場景包括網(wǎng)站日志查詢、城市實時監(jiān)控、物聯(lián)網(wǎng)傳感器網(wǎng)絡(luò)、自動化運維系統(tǒng)的異常檢測等。在這些場景下,數(shù)據(jù)流持續(xù)不斷地產(chǎn)生,并以大量、快速、時變的方式到達系統(tǒng),需要系統(tǒng)快速可靠地進行處理。例如,一個城市交通檢測系統(tǒng)中包含大量的攝像頭,它們分布在不同的路口,每個攝像頭收集當(dāng)前路口的交通信息,持續(xù)地產(chǎn)生數(shù)據(jù)流,并將數(shù)據(jù)流發(fā)送到計算機系統(tǒng)進行處理。接收到數(shù)據(jù)流的計算機系統(tǒng)對數(shù)據(jù)流進行分析,進而監(jiān)控城市道路的實時交通狀態(tài),以便最快地基于狀態(tài)采取相應(yīng)行動。因此,高通量、低時延是實時數(shù)據(jù)流計算系統(tǒng)的核心指標(biāo)。
目前數(shù)據(jù)流計算采用的是數(shù)據(jù)流模型(dataflow model)。數(shù)據(jù)流模型將整個計算任務(wù)抽象為數(shù)據(jù)流圖,以數(shù)據(jù)驅(qū)動的方式處理計算,以數(shù)據(jù)流為中心實現(xiàn)業(yè)務(wù)的處理過程。數(shù)據(jù)流計算模式將需要處理的數(shù)據(jù)分配到計算資源上,實現(xiàn)數(shù)據(jù)的計算與通信分離,并通過數(shù)據(jù)的到達來激發(fā)計算任務(wù)的調(diào)度和資源的分配,利用流水線的并行特性充分地挖掘數(shù)據(jù)流處理中潛在的并行性,進而充分發(fā)揮計算資源的性能,并提高資源間負(fù)載的均衡性。用戶面向數(shù)據(jù)流描述數(shù)據(jù)計算的處理邏輯,在程序執(zhí)行過程中,系統(tǒng)會通過數(shù)據(jù)觸發(fā)機制,自發(fā)地處理在計算過程中由數(shù)據(jù)依賴引發(fā)的計算順序問題,在編程過程中減少了因為數(shù)據(jù)依賴問題而產(chǎn)生的同步和阻塞操作,降低了并行編程的難度。在分布式并行編程領(lǐng)域,程序員使用數(shù)據(jù)流編程模型,不需要對底層的分布式系統(tǒng)有深入的了解和控制,只需把重點放在領(lǐng)域應(yīng)用業(yè)務(wù)流程描述上,關(guān)注數(shù)據(jù)流程的處理過程即可,真正做到了面向領(lǐng)域編程。
本文首先比較了傳統(tǒng)軟件工程中面向數(shù)據(jù)流的分析和設(shè)計方法;隨后詳細(xì)地描述了幾種目前大數(shù)據(jù)處理平臺提供的數(shù)據(jù)流編程模型的結(jié)構(gòu)定義和模型參考,并分析了兩者的差異和不足,總結(jié)了數(shù)據(jù)流編程模型的主要特征和關(guān)鍵要素;最后分析了目前數(shù)據(jù)流編程的主要方式以及與主流編程工具的結(jié)合,針對大數(shù)據(jù)處理的數(shù)據(jù)流計算業(yè)務(wù)需求,給出了可視化數(shù)據(jù)流編程工具的基本框架和編程模式。
2 傳統(tǒng)軟件工程中面向數(shù)據(jù)流的分析和設(shè)計方法
軟件工程中傳 統(tǒng)的結(jié) 構(gòu)化設(shè) 計(structured design,SD)提供了一種面向數(shù)據(jù)流的設(shè)計方法,該方法提供了針對業(yè)務(wù)需求的邏輯模型處理數(shù)據(jù)流的描述方式,并能夠根據(jù)數(shù)據(jù)流處理的邏輯模型導(dǎo)出系統(tǒng)的軟件模塊結(jié)構(gòu)。在軟件開發(fā)過程中,面向數(shù)據(jù)流方法將需求分析階段生成的數(shù)據(jù)流圖(data flow diagram,DFD)映射成表達軟件系統(tǒng)結(jié)構(gòu)的軟件模塊結(jié)構(gòu)圖。在面向數(shù)據(jù)流的分析方法中,數(shù)據(jù)流圖用于描述系統(tǒng)中信息的處理加工和流動情況。在DFD中,系統(tǒng)的輸入數(shù)據(jù)流經(jīng)過一系列的變換最終成為系統(tǒng)的輸出數(shù)據(jù)流,在這個過程中流動的就是信息流。DFD能夠從業(yè)務(wù)的需求層面描述信息處理的邏輯模型,但是不能描述系統(tǒng)的執(zhí)行模式。
2.1 傳統(tǒng)軟件工程中面向數(shù)據(jù)流的概念
面向數(shù)據(jù)流的分析和設(shè)計方法,數(shù)據(jù)流可劃分為以下2種類型。
(1)變換流
數(shù)據(jù)通過輸入通路進入系統(tǒng),進入系統(tǒng)的數(shù)據(jù)流在變換中心加工處理后變換成另一種數(shù)據(jù)流,再通過輸出通路輸出。具有這些特征的數(shù)據(jù)流被稱為變換流。針對變換流的DFD通常由3個部分組成:輸入、變換(加工處理)、輸出。
(2)事務(wù)流
數(shù)據(jù)通過輸入通路到達某一個處理步驟,在處理期間,系統(tǒng)會判定輸入數(shù)據(jù)的類型,選擇某個動作序列執(zhí)行。這種類型的數(shù)據(jù)流被稱為事務(wù)流,對事務(wù)流的處理單元叫作事務(wù)中心,事務(wù)流的處理路徑從事務(wù)中心呈輻射狀流出。事務(wù)流的DFD主要由以下3個部分組成:輸入通路(輸入的數(shù)據(jù)稱為事務(wù))、事務(wù)判定、根據(jù)事務(wù)類型選取一條執(zhí)行路徑。
2.2 數(shù)據(jù)流圖
面向數(shù)據(jù)流的分析和設(shè)計方法中的DFD是描述系統(tǒng)中數(shù)據(jù)流的處理過程的一種圖形化工具,它體現(xiàn)了一個系統(tǒng)把業(yè)務(wù)輸入轉(zhuǎn)換為業(yè)務(wù)輸出所需的數(shù)據(jù)流加工處理過程,DFD的組成要素如圖1所示,包括數(shù)據(jù)源點和數(shù)據(jù)匯點、數(shù)據(jù)流、數(shù)據(jù)加工或處理、數(shù)據(jù)存儲。利用DFD描述基于公式的即時家教系統(tǒng)的數(shù)據(jù)流處理過程如圖2所示。
圖1???DFD的組成要素
圖2???基于公式的即時家教系統(tǒng)的數(shù)據(jù)流處理過程
3 數(shù)據(jù)流模型
數(shù)據(jù)流模型(與馮·諾依曼模型的結(jié)構(gòu)不同)于20世紀(jì)60年代末由麻省理工學(xué)院的Dennis團隊提出。
根據(jù)對數(shù)據(jù)的處理方式,數(shù)據(jù)流模型可以分為2種:靜態(tài)數(shù)據(jù)流模型和動態(tài)數(shù)據(jù)流模型。靜態(tài)數(shù)據(jù)流模型的計算單元處理的數(shù)據(jù)集合是受到限制的,因此可以在編譯期間對數(shù)據(jù)的處理進行優(yōu)化;動態(tài)數(shù)據(jù)流模型的計算單元處理的數(shù)據(jù)集合是沒有限制的。
數(shù)據(jù)流模型可以分為2個層面:一個層面是數(shù)據(jù)流的編程模型,其面向應(yīng)用需求描述數(shù)據(jù)流的處理邏輯;另一個層面是數(shù)據(jù)流的執(zhí)行模型,其面向執(zhí)行環(huán)境描述數(shù)據(jù)流的計算過程。數(shù)據(jù)流編程模型能夠利用數(shù)據(jù)流處理的并行性以及數(shù)據(jù)流流向的單一性,大大簡化編程人員的編程任務(wù)。
圖3???數(shù)據(jù)流圖
近幾年,國內(nèi)外研究人員對數(shù)據(jù)流編程模型、語言及工具進行了一系列研究。Li A等人提出了一種在GPU上細(xì)粒度并行的數(shù)據(jù)流編程模型。Halbwachs N等人提出了一種同步數(shù)據(jù)流編程語言LUSTER。蘇志超等人在神威?太湖之光超級計算機上設(shè)計了一種能高效地利用GPU片上計算資源的方法,有效地解決了數(shù)據(jù)流執(zhí)行的并行計算問題,這種基于數(shù)據(jù)流的編程模型被稱為SunwayFlow。針對異構(gòu)并行計算機集群硬件平臺存在多級并行結(jié)構(gòu)的問題,楊瑞瑞等人基于數(shù)據(jù)流應(yīng)用程序和CPU/GPU異構(gòu)計算特性,設(shè)計并實現(xiàn)了一個面向CPU-GPU異構(gòu)協(xié)同的數(shù)據(jù)流編程模型。為了提高面向數(shù)據(jù)流的應(yīng)用程序開發(fā)的可編程性,張維維等人進一步提出了一種新的數(shù)據(jù)流編程模型——COStream,它提供了數(shù)據(jù)流編程語言和編譯工具,大大降低了并行編程的難度。
4 基于數(shù)據(jù)流的編程模型
數(shù)據(jù)流編程語言以數(shù)據(jù)為核心,對施加在數(shù)據(jù)流上的面向業(yè)務(wù)領(lǐng)域的數(shù)據(jù)處理功能模塊進行定義,把數(shù)據(jù)流的傳遞流動與數(shù)據(jù)流的處理進行分離,充分利用數(shù)據(jù)流的天然并行性,發(fā)揮數(shù)據(jù)流模型的并行性。數(shù)據(jù)流編程模型是專門針對流處理器設(shè)計的編程模型,它以數(shù)據(jù)流程序語言為基礎(chǔ),能清晰地描述數(shù)據(jù)流程序的業(yè)務(wù)邏輯,并針對分布式并行環(huán)境描述其業(yè)務(wù)程序的執(zhí)行模式。目前主要有Apache Beam、SWARM、St reamIt、COStream、TensorFlow等數(shù)據(jù)流編程模型。
4.1 Apache Beam
Beam是 Apache軟件基金會(Apache Software Foundation,ASF)的項目。2017年5月17日ASF發(fā)布了其第一個穩(wěn)定版2.0.0。目前的最新版本為2.16.0。Beam項目主要對數(shù)據(jù)流處理(包含有界數(shù)據(jù)集和無界數(shù)據(jù)集)的編程范式和接口進行了統(tǒng)一定義。基于Beam開發(fā)的數(shù)據(jù)流處理程序可以在多種分布式計算引擎上執(zhí)行。Beam的架構(gòu)如圖4所示。
圖4???Beam的架構(gòu)
Be am編程模型主要由以下3個部分構(gòu)成。
(1)Modes
Modes是Beam的模型,也是數(shù)據(jù)來源的I/O,由多種數(shù)據(jù)源或倉庫的I/O組成,數(shù)據(jù)源支持批處理和流處理。
(2)Pipeline
Pipeline是Beam的管道,這個管道現(xiàn)在是唯一的。管道可以看成數(shù)據(jù)流的傳遞和存儲通道,它的作用是連接數(shù)據(jù)和Runtimes平臺。所有的批處理或流處理都要通過這個管道把數(shù)據(jù)傳輸?shù)胶蠖说挠嬎闫脚_。管道可以連接多種數(shù)據(jù)源,也可以把數(shù)據(jù)流傳遞給不同的計算平臺。
(3)Runtimes
Runtimes是大數(shù)據(jù)計算或處理平臺,目前支持Direct Pipeline、Apache Spark、Apache Flink和Google Cloud Dataflow 4種大數(shù)據(jù)框架。其中Direct Pipeline僅支持本地,Apache Spark和Apache Flink同時支持本地和云端。Google Cloud Dataflow僅支持云端。
Beam提供了以下2個數(shù)據(jù)流編程的組件。
(1)Beam SDK
Beam SDK定義了提供一個統(tǒng)一的編程接口給上層應(yīng)用的開發(fā)者,開發(fā)者可以利用提供的API開發(fā)分布式數(shù)據(jù)流處理的業(yè)務(wù)邏輯。開發(fā)者可以直接通過Beam SDK的接口開發(fā)數(shù)據(jù)流加工處理程序,不需要了解底層具體的大數(shù)據(jù)平臺開發(fā)接口。Beam SDK對批處理的有界數(shù)據(jù)集和流處理的無界數(shù)據(jù)集都使用相同的類,并且使用相同的轉(zhuǎn)換操作進行處理。
(2)Beam Pipeline Runner
Beam Pipeline Runner對用Beam SDK編寫的數(shù)據(jù)流處理程序進行編譯,并將其轉(zhuǎn)換為具體大數(shù)據(jù)計算平臺上的可執(zhí)行的代碼。從編程模式上來說,Beam分為3個部分:第一部分是利用Beam模型構(gòu)建數(shù)據(jù)處理管道;第二部分是利用Beam SDK實現(xiàn)管道中數(shù)據(jù)處理的邏輯;第三部分是把包含數(shù)據(jù)處理邏輯的數(shù)據(jù)管道通過Beam Pipeline Runner編譯成可在具體計算平臺上執(zhí)行的程序,在編譯時,需要制定可執(zhí)行的計算平臺。最后把編譯好的程序部署到分布式計算引擎上運行。
利用Apache Beam實現(xiàn)對輸入的字符串?dāng)?shù)據(jù)流的單詞計數(shù),如圖5所示。數(shù)據(jù)流計算流程如下。
● 格式化輸入的文本數(shù)據(jù)。
● 將文本行轉(zhuǎn)換成單個單詞。
● 統(tǒng)計每個單詞出現(xiàn)的次數(shù)。
● 格式化輸出單詞計數(shù)的結(jié)果。
圖5???基于Apache Beam 的單詞計數(shù)數(shù)據(jù)流圖
4.2 SWARM
SWARM是一個運行時系統(tǒng),其核心的執(zhí)行模型是基于Codelet的動態(tài)數(shù)據(jù)流模型。它的目的是允許應(yīng)用程序在單核、多核或眾核計算機上良好運行,并且允許應(yīng)用程序在計算集群或廣域網(wǎng)之間以及不同類型的計算硬件之間透明地遷移。這將允許應(yīng)用程序更輕松、更廣泛地擴展,并使直接擴展軟件路徑成為可能。SWARM的模型適用于共享存儲和分布式存儲的并行計算機系統(tǒng)。
SWARM運行時系統(tǒng)采用數(shù)據(jù)流模型Codelet作為最基本的執(zhí)行和調(diào)度單元。一個Codelet由以下4個部分組成。
● run fork,描述將被執(zhí)行的任務(wù),并推進程序執(zhí)行的狀態(tài)。
● cancelfork,描述錯誤發(fā)生時,回退程序的狀態(tài)的方式。
● 描述上下文環(huán)境的類型,存儲codelet的狀態(tài)等信息。
● 輸入數(shù)據(jù)的類型描述。
當(dāng)創(chuàng)建一個Codelet實例時,會將該Codelet與上下文(context)框架關(guān)聯(lián)。在給runfork提供輸入數(shù)據(jù)或者在給cancalfork提供錯誤數(shù)據(jù)時,Codelet實例會進入就緒(enabeld)狀態(tài),能夠被調(diào)度器調(diào)度。調(diào)度器選中準(zhǔn)備就緒的Codelet,并分發(fā)給計算單元執(zhí)行,此時Codelet的狀態(tài)轉(zhuǎn)換為 激活(active)狀態(tài)。Codelet在執(zhí)行期間處于激活狀態(tài)時,該執(zhí)行進程不會被阻塞,直至執(zhí)行結(jié)束,結(jié)束后Codelet就進入完成(completed)狀態(tài)。
Codelet模型的第一個官方實現(xiàn)的運行時系統(tǒng)是SWARM,它為后續(xù)關(guān)于Codelet模型的實現(xiàn)等研究工作提供了很好的啟示和參考意義。但SWARM還不成熟,運行時系統(tǒng)的適應(yīng)性只是一個較為初步的、實驗性的工作,其作為支撐數(shù)據(jù)流編程模型的實現(xiàn)還不完善,需要進一步研究。
4.3 StreamIt
StreamIt以Java語言程序為基礎(chǔ),根據(jù)同步數(shù)據(jù)流(synchronous data flow,SDF)模型進行數(shù)據(jù)流擴展,利用管道(pipeline)、拼接(splitjoin)和反饋循環(huán)(feedback loop)3種層次性的結(jié)構(gòu)幫助編程人員對業(yè)務(wù)應(yīng)用進行并行抽象。其最初是麻省理工學(xué)院針對RAW處理器開發(fā)的一種編程模型,后來延伸到數(shù)據(jù)流編程領(lǐng)域。
SDF模型由計算任務(wù)節(jié)點和邊構(gòu)成,其中數(shù)據(jù)流計算任務(wù)節(jié)點的最基本單元是actor,邊表示計算任務(wù)節(jié)點之間的數(shù)據(jù)流動,在邊上設(shè)置2個權(quán)值參數(shù)表示輸入流和輸出流的速率。在SDF模型中,actor分為2類:有狀態(tài)和無狀態(tài)。有狀態(tài)的actor需要保存執(zhí)行狀態(tài)參數(shù),以便為下次執(zhí)行提供參數(shù);無狀態(tài)的actor則不需要保存執(zhí)行狀態(tài)參數(shù)。計算任務(wù)節(jié)點actor采用數(shù)據(jù)驅(qū)動的方式執(zhí)行,當(dāng)足夠的數(shù)據(jù)到達輸入邊時,actor會被激活,并執(zhí)行生成數(shù)據(jù)到輸出邊。StreamIt模型針對SDF模型提供了基本運算單元(filter)和核心模塊(work),其中filter與SDF中的actor對應(yīng),work函數(shù)促使filter中計算任務(wù)的實現(xiàn)。StreamIt模型針對特定的處理器以及SDF模型中計算和通信隔離的機制,挖掘應(yīng)用程序的深度并行性,在基于數(shù)據(jù)流的處理過程中構(gòu)建面向數(shù)據(jù)流的編程模型,支持高級語言Java目標(biāo)代碼,并提供一定的并行化機制。
StreamIt模型是一種天然的并行編程模型,在程序設(shè)計過程中蘊含一些瓶頸問題。filter有時執(zhí)行的代碼量很小,但是數(shù)據(jù)傳輸量很大,導(dǎo)致程序性能降低。有狀態(tài)的filter是串行執(zhí)行的,即前面的filter沒有執(zhí)行完成時,后面的filter無法工作;在實際程序設(shè)計中,設(shè)計人員設(shè)計加入了過多無用的filter,造成過長的串行流水線結(jié)構(gòu),影響系統(tǒng)的整體效率。當(dāng)某個filter中的具有高度并行性的語句經(jīng)過普通處理器執(zhí)行后仍然得不到很高的加速,經(jīng)過編譯后還存在大量的并行循環(huán)執(zhí)行語句時,這些語句中通常包含大量的浮點計算指令,往往會花費大量運行時間,而它們的運行仍然是串行方式。SteamIt模型為了提高并行度,會結(jié)合處理器數(shù)目將若干并行任務(wù)劃分為相應(yīng)區(qū)域,實際的問題是過多的劃分將導(dǎo)致額外開銷的加大,而過小的劃分則會增加執(zhí)行時間。
針對這些問題,StreamIt模型的研究圍繞精簡Pipeline、局部自動并行化、串并行自動拆分、多進多出filter等技術(shù)進行開展。目前,對于filter節(jié)點輸入與輸出端口來說,可以是一對一、一對多或多對一的。不過對于不同類型的數(shù)據(jù)流程序來說,節(jié)點為多進多出更符合程序固有模式。
4.4 COStream
COStream是一種層次型數(shù)據(jù)流編程模型,將SDF模型作為執(zhí)行模型,利用DAG描述應(yīng)用處理過程。COStream主要由數(shù)據(jù)流(stream)、操作(operator)和組合(composite)3個語法單元組成。
連接數(shù)據(jù)流圖中的各個計算單元邊的抽象stream是由一系列token組成的數(shù)據(jù)序列,stream為SDF中的actor提供可并行處理的數(shù)據(jù)流。數(shù)據(jù)流圖中的計算節(jié)點用operator表示。COStream定義了composite結(jié)構(gòu),將不同節(jié)點連接構(gòu)造成數(shù)據(jù)流圖。composite結(jié)構(gòu)屬于高層次的復(fù)合結(jié)構(gòu),可以由一個或多個operator組成可重用的子數(shù)據(jù)流圖,是對SDF中可復(fù)用子圖的抽象。
目前COStream已成功應(yīng)用在網(wǎng)絡(luò)媒體等領(lǐng)域,但是存在一些局限性:COStream是以C語言為基礎(chǔ)擴展而成的,需要對COStream語法進行進一步的完善與擴展,以提高語言的表達能力。楊秋吉等人在COStream的基礎(chǔ)上提出了面向Storm的編譯優(yōu)化框架 。
4.5 TensorFlow
TensorFlow是一個針對深度學(xué)習(xí)的特定的數(shù)據(jù)流編程模型,它通過一些內(nèi)置的函數(shù)將整個計算過程組成一張數(shù)據(jù)流圖,用于數(shù)值計算。圖6給出了一個簡單的數(shù)據(jù)流計算過程圖的例子,節(jié)點表示數(shù)學(xué)操作,邊表示2個節(jié)點之間依賴的多維數(shù)組(即張量)。TensorFlow根據(jù)數(shù)據(jù)流圖,自動地將計算任務(wù)調(diào)度到相應(yīng)的計算資源上進行計算。用戶使用TensorFlow提供的接口構(gòu)造數(shù)據(jù)流圖,描述業(yè)務(wù)的計算任務(wù)。
圖6???TensorFlow數(shù)據(jù)流圖
TensorFlow的框架十分靈活,具有良好的可移植性,TensorFlow目前支持多種計算平臺,包括臺式計算機、服務(wù)器、集群、移動端、云端服務(wù)器等。TensorFlow針對機器學(xué)習(xí)中的核心算法——梯度下降法中的求解微分運算進行優(yōu)化,以實現(xiàn)機器學(xué)習(xí)算法在TensorFlow中的高效執(zhí)行。TensorFlow簡化了用戶構(gòu)建的深度學(xué)習(xí)的網(wǎng)絡(luò)模型,只需要定義模型的結(jié)構(gòu)和目標(biāo)函數(shù)即可形成一個網(wǎng)絡(luò)模型,在網(wǎng)絡(luò)模型的執(zhí)行過程中,TensorFlow會自動計算相關(guān)的微分導(dǎo)數(shù),實現(xiàn)參數(shù)求解。同時,TensorFlow支持多種語言,它提供了Python、C++、Java接口構(gòu)建用戶程序,打破了編程語言的限制。
近幾年TensorFlow在機器學(xué)習(xí)領(lǐng)域得到了廣泛應(yīng)用,特別是在深度學(xué)習(xí)領(lǐng)域取得了長足的發(fā)展。但是TensorFlow的本質(zhì)并不是一個通用的分布式計算框架,它需要用戶在客戶端顯示指定集群信息,另外需要手動拉起進程(worker)等任務(wù)(task),在資源管理和使用方面有很多不便。因此,TensorFlow由于其用途單一、分布式能力弱、對大規(guī)模數(shù)據(jù)處理支持不足的特點,難以充分發(fā)揮大規(guī)模并行計算機系統(tǒng)的高性能計算算力。同時TensorFlow只是在任務(wù)調(diào)度的過程中使用了數(shù)據(jù)流的思想,其任務(wù)粒度比Codelet模型粗,任務(wù)的并發(fā)度比Codelet模型低。
4.6 小結(jié)
針對數(shù)據(jù)流的編程模型,傳統(tǒng)的軟件工程提供了一個利用數(shù)據(jù)流描述業(yè)務(wù)處理流程的需求分析方法。谷歌公司的開源項目Apache Beam為數(shù)據(jù)流編程結(jié)構(gòu)提供了一個參考,提供了一個完整的數(shù)據(jù)流編程模型,還提供了基于Java和Python的接口開發(fā)包。也有些直接利用傳統(tǒng)的編程語言(如Python和Java)描述數(shù)據(jù)流執(zhí)行的模型(如DAG),這些模型缺乏統(tǒng)一的數(shù)據(jù)流編程模型定義。另外,TensorFlow提供了一個針對深度學(xué)習(xí)的特定的數(shù)據(jù)流編程模型,其提供的編程模型通過一些內(nèi)置的函數(shù)構(gòu)建數(shù)據(jù)流計算圖,但是粒度很小,基本接近數(shù)據(jù)流執(zhí)行模型。目前主要的數(shù)據(jù)流編程模型的特征對比見表1。
5 基于數(shù)據(jù)流的編程工具
傳統(tǒng)的基于數(shù)據(jù)流的編程工具有2類:一類是軟件工程中針對面向數(shù)據(jù)流的分析而設(shè)計的實例化(case)工具;另一類是面向運算級別的數(shù)據(jù)流編程工具。第一類是對業(yè)務(wù)模型的描述,相對于編程而言較為抽象,難以直接生產(chǎn)數(shù)據(jù)流程序;第二類偏向于對數(shù)據(jù)流執(zhí)行模式的描述,其粒度較細(xì),生產(chǎn)的代碼接近于可執(zhí)行的指令結(jié)構(gòu)。目前針對大數(shù)據(jù)處理平臺的數(shù)據(jù)流編程模型的編程工具主要分為3種形式。第一種形式是提供一個獨立的圖形化編輯器,可以通過可視化的模式構(gòu)建數(shù)據(jù)流模型,從而提供數(shù)據(jù)流模型對應(yīng)的代碼。這種工具一般基于一個固定的框架構(gòu)建數(shù)據(jù)流模型。第二種形式是在一種開發(fā)工具中提供一個插件,實現(xiàn)數(shù)據(jù)流程序的編寫,并且利用開發(fā)工具提供的功能實現(xiàn)編譯和運行集成。第三種形式是提供一套數(shù)據(jù)流編程模型的函數(shù)庫,調(diào)用函數(shù)庫中的函數(shù)構(gòu)建數(shù)據(jù)流模型。
5.1 圖形化數(shù)據(jù)流編程工具LabVIEW
LabVIEW針對虛擬儀器程序提供面向數(shù)據(jù)流的模型構(gòu)建和運行的一整套軟件工具,包括采集、分析、顯示和存儲數(shù)據(jù)等一系列操作。LabVIEW中的程序框圖上的節(jié)點表示計算任務(wù),只有所有必要輸入端的數(shù)據(jù)到達后才開始執(zhí)行。節(jié)點執(zhí)行后產(chǎn)生輸出端數(shù)據(jù),并將該數(shù)據(jù)傳遞給數(shù)據(jù)流路徑中的下一個節(jié)點。數(shù)據(jù)流流動的過程描述了程序框圖上虛擬儀器程序和函數(shù)的執(zhí)行順序。數(shù)據(jù)流計算圖如圖7所示。
圖7???數(shù)據(jù)流計算圖示例
5.2 COStream數(shù)據(jù)流程序圖形編輯器
COStream圖形編譯器是一個針對COStream編程語言的可視化編程工具,它將程序的編寫、編譯與運行集成在一起,方便用戶進行數(shù)據(jù)流模型的構(gòu)建,簡化了開發(fā)過程。
COStream圖形編輯器主要包含程序同步數(shù)據(jù)流圖編輯和框架代碼生成2個部分,以開源集成開發(fā)環(huán)境(Eclipse)插件的形式集成在Eclipse中。數(shù)據(jù)流圖編輯器包含圖形的繪制連接、圖形編輯工具和圖形管理功能。框架代碼生成部分能夠自動根據(jù)數(shù)據(jù)流圖生成簡潔的框架代碼,并提供一定的框架優(yōu)化策略。使用COStream圖形編輯器可以通過簡單的同步數(shù)據(jù)流編輯,生成對應(yīng)的COStream代碼,減少程序員的開發(fā)工作量,提高了代碼編寫的效率,并利用一些策略提高了生產(chǎn)代碼的質(zhì)量。COStream圖形編輯器的圖形繪制和代碼生成如圖8所示。
圖8???COStream圖形編輯器的圖形繪制和代碼生成
5.3 Oceanus-ML
Oceanus-ML旨在提供一套端到端(數(shù)據(jù)接入數(shù)據(jù)處理-特征工程-模型訓(xùn)練-模型評估)的在線學(xué)習(xí)解決方案。Oceanus-ML包含多樣的數(shù)據(jù)處理函數(shù),集成了豐富的在線學(xué)習(xí)及深度學(xué)習(xí)算法,用戶通過簡單的拖曳、填寫參數(shù),即可搭建完整的訓(xùn)練框架,并可輕松完成模型的訓(xùn)練、評估、流程部署。
對于用戶來說,構(gòu)建應(yīng)用邏輯時,只需向畫布中拖曳算子、填寫參數(shù)、按邏輯連接算子,即可生成一個在線學(xué)習(xí)畫布應(yīng)用。
5.4 Sucuri數(shù)據(jù)流編程庫
Sucuri是一個簡單的Python庫,它用簡單合理的語法提供了數(shù)據(jù)流編程。若要使用Sucuri庫對應(yīng)用程序進行并行化處理,程序員僅需識別其代碼的并行化候選者,并實例化數(shù)據(jù)流圖即可,其中每個節(jié)點均與此類函數(shù)之一關(guān)聯(lián),并且節(jié)點之間的邊緣描述了函數(shù)之間的數(shù)據(jù)依賴性。程序員可以使用Sucuri庫進行數(shù)據(jù)流編程,實現(xiàn)代表重要的并行編程模式的2個基準(zhǔn),并在多核集群上執(zhí)行。Sucuri數(shù)據(jù)流編程庫構(gòu)建的數(shù)據(jù)流圖和代碼如圖9所示。
圖9???Sucuri數(shù)據(jù)流編程庫構(gòu)建的數(shù)據(jù)流圖和代碼
5.5 小結(jié)
目前的方法是將Apache Beam的函數(shù)庫作為第三方函數(shù)庫嵌入Java或者Python開發(fā)工具,在源代碼級編寫數(shù)據(jù)流程序,然后把編好的Java程序提交到Spark平臺運行。但Apache Beam沒有提供一種可視化開發(fā)工具。不同的數(shù)據(jù)流編程工具針對不同的領(lǐng)域,有些工具針對專用領(lǐng)域,有些工具面向通用領(lǐng)域,在易用性和可擴展性方面各有差異。上述數(shù)據(jù)流編程工具的特征對比見表2。
6 結(jié)束語
隨著大數(shù)據(jù) 2.0 時代的到來,大數(shù)據(jù)的應(yīng)用從簡單的批處理擴展到了實時處理、流處理、交互式查詢和機器學(xué)習(xí)。早期的處理模型(map/reduce)早已力不從心,而且也很難應(yīng)用到處理流程長且復(fù)雜的數(shù)據(jù)流水線上。另外,近年來涌現(xiàn)出很多大數(shù)據(jù)應(yīng)用組件,如HBase、Hive、Kafka、Spark、Flink等。開發(fā)者經(jīng)常要用到不同的技術(shù)、框架、API、開發(fā)語言和 SDK應(yīng)對復(fù)雜應(yīng)用的開發(fā),這大大增加了編程的難度。隨著大數(shù)據(jù)應(yīng)用的迅速發(fā)展,支持?jǐn)?shù)據(jù)流計算的大數(shù)據(jù)處理平臺日漸成熟,面向大規(guī)模分布式數(shù)據(jù)流應(yīng)用的編程成為快速開發(fā)和部署數(shù)據(jù)流應(yīng)用系統(tǒng)的關(guān)鍵,要滿足面向大數(shù)據(jù)處理的數(shù)據(jù)流編程需求,需要符合以下3個特征。
● 能夠?qū)訕I(yè)務(wù)需求,提供類似軟件工程中DFD的豐富的數(shù)據(jù)流模型的業(yè)務(wù)描述能力,并且數(shù)據(jù)流編程模型能夠適應(yīng)不同的用戶使用場景,提供與執(zhí)行無關(guān)的抽象的統(tǒng)一編程模型。
● 能夠?qū)硬煌膱?zhí)行平臺。數(shù)據(jù)流編程模型產(chǎn)生的代碼能夠部署到具體的大數(shù)據(jù)處理平臺上,通過其數(shù)據(jù)流執(zhí)行引擎進行自動解釋和執(zhí)行,不再需要開發(fā)人員的人工轉(zhuǎn)換。
● 提供能夠與執(zhí)行環(huán)境適配、可擴展、可視化的數(shù)據(jù)流編程工具。編程工具能夠?qū)雸?zhí)行環(huán)境的參數(shù)和算子,提供直觀可拖曳的數(shù)據(jù)流模型圖的構(gòu)建,并能夠自動實現(xiàn)數(shù)據(jù)流模型圖和數(shù)據(jù)流程序代碼之間的轉(zhuǎn)換。
作者簡介
鄒驍鋒(1996-),男,湖南大學(xué)信息科學(xué)與工程學(xué)院博士生,主要研究方向為并行計算、數(shù)據(jù)挖掘和機器學(xué)習(xí) 。
陽王東(1974-),男,湖南大學(xué)信息科學(xué)與工程學(xué)院教授,主要研究方向為分布式并行計算、機器學(xué)習(xí) E-mail:yangwangdong@163.com。
容學(xué)成(1996-),男,湖南大學(xué)信息科學(xué)與工程學(xué)院碩士生,主要研究方向為大數(shù)據(jù)和機器學(xué)習(xí) 。
李肯立(1970-),男,博士,湖南大學(xué)信息科學(xué)與工程學(xué)院教授,主要研究方向為高性能計算、人工智能和大數(shù)據(jù) 。
李克勤(1963-),男,博士,湖南大學(xué)信息科學(xué)與工程學(xué)院教授,主要研究方向為并行計算、邊緣計算和大數(shù)據(jù) 。
大數(shù)據(jù)期刊
《大數(shù)據(jù)(Big Data Research,BDR)》雙月刊是由中華人民共和國工業(yè)和信息化部主管,人民郵電出版社主辦,中國計算機學(xué)會大數(shù)據(jù)專家委員會學(xué)術(shù)指導(dǎo),北京信通傳媒有限責(zé)任公司出版的期刊,已成功入選中文科技核心期刊、中國計算機學(xué)會會刊、中國計算機學(xué)會推薦中文科技期刊,并被評為2018年國家哲學(xué)社會科學(xué)文獻中心學(xué)術(shù)期刊數(shù)據(jù)庫“綜合性人文社會科學(xué)”學(xué)科最受歡迎期刊。
關(guān)注《大數(shù)據(jù)》期刊微信公眾號,獲取更多內(nèi)容
往期文章回顧
《大數(shù)據(jù)》2020年第3期目次&摘要
專題導(dǎo)讀:數(shù)據(jù)資產(chǎn)化探索
數(shù)據(jù)資產(chǎn)化框架初探
基于利潤最大化的數(shù)據(jù)資產(chǎn)價值評估模型
基于區(qū)塊鏈的數(shù)據(jù)市場
數(shù)據(jù)資產(chǎn)標(biāo)準(zhǔn)研究進展與建議
面向價值實現(xiàn)的數(shù)據(jù)資產(chǎn)管理體系構(gòu)建
總結(jié)
以上是生活随笔為你收集整理的面向大数据处理的数据流编程模型和工具综述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BUUCTF-WEB:[强网杯 2019
- 下一篇: 【2017年第1期】CCF大专委2017