玉門市恒翔油脂有限公司坐落于中國(guó)第一個(gè)石油基地――玉門,是生產(chǎn)各類真空油脂和特種潤(rùn)滑脂的專業(yè)公司,集研究、開(kāi)發(fā)、生產(chǎn)于一體的生產(chǎn)經(jīng)營(yíng)企業(yè),具有幾十年專業(yè)生產(chǎn)真空油脂和特種潤(rùn)滑脂的生產(chǎn)經(jīng)驗(yàn)。

TECHNOLOGY

技術(shù)與應(yīng)用

大數(shù)據(jù)流式計(jì)算關(guān)鍵技術(shù)及系統(tǒng)實(shí)例

2015-10-08 10:18 來(lái)源: 作者:

  軟件學(xué)報(bào)大數(shù)據(jù)流式計(jì)算:關(guān)鍵技術(shù)及系統(tǒng)實(shí)例bookmark0孫大為張廣艷U鄭緯民1bookmark1中國(guó)科學(xué)院軟件研究所版權(quán)所有。

  清華大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系,北京100084)2(符號(hào)計(jì)算與知識(shí)工程教育部重點(diǎn),批量計(jì)算首先進(jìn)行數(shù)據(jù)的存儲(chǔ),然后再對(duì)存儲(chǔ)的靜態(tài)數(shù)據(jù)進(jìn)行集中計(jì)算。Hadoop是典型的大數(shù)據(jù)批量計(jì)算架構(gòu),由HDFS分布式文件系統(tǒng)負(fù)責(zé)靜態(tài)數(shù)據(jù)的存儲(chǔ),并通過(guò)MapReduce將計(jì)算邏輯分配到各數(shù)據(jù)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)計(jì)算和價(jià)值發(fā)現(xiàn);如所示,流式計(jì)算中,無(wú)法確定數(shù)據(jù)的到來(lái)時(shí)刻和到來(lái)順序,也無(wú)法將全部數(shù)據(jù)存儲(chǔ)起來(lái)。因此,不再進(jìn)行流式數(shù)據(jù)的存儲(chǔ),而是當(dāng)流動(dòng)的數(shù)據(jù)到來(lái)后在內(nèi)存中直接進(jìn)行數(shù)據(jù)的實(shí)時(shí)計(jì)算。如Twitter的Storm、Yahoo的S4就是典型的流式數(shù)據(jù)計(jì)算架構(gòu),數(shù)據(jù)在任務(wù)拓?fù)渲斜挥?jì)算,并輸出有價(jià)值的信息。

  流式計(jì)算和批量計(jì)算分別適用于不同的大數(shù)據(jù)應(yīng)用場(chǎng)景:對(duì)于先存儲(chǔ)后計(jì)算,實(shí)時(shí)性要求不高,同時(shí),數(shù)據(jù)的準(zhǔn)確性、全面性更為重要的應(yīng)用場(chǎng)景,批量計(jì)算模式更合適;對(duì)于無(wú)需先存儲(chǔ),可以直接進(jìn)行數(shù)據(jù)計(jì)算,實(shí)時(shí)性要求很嚴(yán)格,但數(shù)據(jù)的精確度要求稍微寬松的應(yīng)用場(chǎng)景,流式計(jì)算具有明顯優(yōu)勢(shì)。流式計(jì)算中,數(shù)據(jù)往往是最近一個(gè)時(shí)間窗口內(nèi)的,因此數(shù)據(jù)延遲往往較短,實(shí)時(shí)性較強(qiáng),但數(shù)據(jù)的精確程度往往較低。流式計(jì)算和批量計(jì)算具有明顯的優(yōu)劣互補(bǔ)特征,在多種應(yīng)用場(chǎng)合下可以將兩者結(jié)合起來(lái)使用。通過(guò)發(fā)揮流式計(jì)算的實(shí)時(shí)性優(yōu)勢(shì)和批量計(jì)算的計(jì)算精度優(yōu)勢(shì),滿足多種應(yīng)用場(chǎng)景在不同階段的數(shù)據(jù)計(jì)算要求。

  目前,關(guān)于大數(shù)據(jù)批量計(jì)算相關(guān)技術(shù)的研究相對(duì)成熟,形成了以Google的MapReduce編程模型、開(kāi)源的Hadoop計(jì)算系統(tǒng)為代表的高效、穩(wěn)定的批量計(jì)算系統(tǒng),在理論上和實(shí)踐中均取得了顯著成果。關(guān)于流式計(jì)算的早期研究往往集中在數(shù)據(jù)庫(kù)環(huán)境中開(kāi)展數(shù)據(jù)計(jì)算的流式化,數(shù)據(jù)規(guī)模較小,數(shù)據(jù)對(duì)象比較單一。由于新時(shí)期的流式大數(shù)據(jù)呈現(xiàn)出實(shí)時(shí)性、易失性、突發(fā)性、無(wú)序性、無(wú)限性等特征,對(duì)系統(tǒng)提出了很多新的更高的要求。2010年,Yahoo推出S4流式計(jì)算系統(tǒng),2011年,Twitter推出Storm流式計(jì)算系統(tǒng),在一定程度上推動(dòng)了大數(shù)據(jù)流式計(jì)算技術(shù)的發(fā)展和應(yīng)用。但是,這些系統(tǒng)在可伸縮性、系統(tǒng)容錯(cuò)、狀態(tài)一致性、負(fù)載均衡、數(shù)據(jù)吞吐量等諸多方面仍然存在著明顯不足。如何構(gòu)建低延遲、高吞吐且持續(xù)可靠運(yùn)行的大數(shù)據(jù)流式計(jì)算系統(tǒng),是當(dāng)前亟待解決的問(wèn)題。

  本文以大數(shù)據(jù)流式計(jì)算系統(tǒng)的設(shè)計(jì)、優(yōu)化和挑戰(zhàn)為核心,系統(tǒng)地梳理和分析了當(dāng)前大數(shù)據(jù)流式計(jì)算系統(tǒng)的研究和發(fā)展現(xiàn)狀,總結(jié)了在金融銀行業(yè)應(yīng)用、互聯(lián)網(wǎng)應(yīng)用和物聯(lián)網(wǎng)應(yīng)用這三大典型領(lǐng)域中,流式大數(shù)據(jù)所呈現(xiàn)出的實(shí)時(shí)性、易失性、突發(fā)性、無(wú)序性、無(wú)限性等特征。給出了理想的大數(shù)據(jù)流式計(jì)算系統(tǒng)在系統(tǒng)結(jié)構(gòu)、數(shù)據(jù)傳輸、應(yīng)用接口、高可用技術(shù)等方面應(yīng)該具有的關(guān)鍵技術(shù)特性,論述并對(duì)比了5款大數(shù)據(jù)流式計(jì)算系統(tǒng),即,Twitter的Storm系統(tǒng)、Yahoo的S4系統(tǒng)、Facebook的DataFreewayandPuma系統(tǒng)、Linkedin的Kafka系統(tǒng)、Microsoft的TimeStream系統(tǒng)。闡述了大數(shù)據(jù)流式計(jì)算系統(tǒng)在可伸縮性、系統(tǒng)容錯(cuò)、狀態(tài)一致性、負(fù)載均衡、數(shù)據(jù)吞吐量等方面所面臨的技術(shù)挑戰(zhàn)。本文工作為構(gòu)建低延遲、高吞吐且持續(xù)可靠運(yùn)行的大數(shù)據(jù)流式計(jì)算系統(tǒng)提供了一些指導(dǎo)性原則,彌補(bǔ)了當(dāng)前關(guān)于大數(shù)據(jù)流式計(jì)算的研究成果不足的局面。

  本文第1節(jié)分析大數(shù)據(jù)流式計(jì)算的典型應(yīng)用領(lǐng)域及其特征。第2節(jié)論述設(shè)計(jì)優(yōu)良的大數(shù)據(jù)流式計(jì)算系統(tǒng)在系統(tǒng)結(jié)構(gòu)、數(shù)據(jù)傳輸、應(yīng)用接口、高可用技術(shù)等方面應(yīng)該滿足的關(guān)鍵技術(shù)要求。第3節(jié)分析對(duì)比5款比較典型的大數(shù)據(jù)流式計(jì)算系統(tǒng)。第4節(jié)具體闡述大數(shù)據(jù)流式計(jì)算在系統(tǒng)的可伸縮性、系統(tǒng)容錯(cuò)、狀態(tài)一致性、負(fù)載均衡、數(shù)據(jù)吞吐量等方面所面臨的新的挑戰(zhàn)。最后,第5節(jié)對(duì)全文進(jìn)行總結(jié)。

  1應(yīng)用場(chǎng)景及數(shù)據(jù)特征大數(shù)據(jù)流式計(jì)算主要用于對(duì)動(dòng)態(tài)產(chǎn)生的數(shù)據(jù)進(jìn)行實(shí)時(shí)計(jì)算并及時(shí)反饋結(jié)果,但往往不要求結(jié)果絕對(duì)精確的應(yīng)用場(chǎng)景。在數(shù)據(jù)的有效時(shí)間內(nèi)獲取其價(jià)值,是大數(shù)據(jù)流式計(jì)算系統(tǒng)的首要設(shè)計(jì)目標(biāo),因此,當(dāng)數(shù)據(jù)到來(lái)后將立即對(duì)其進(jìn)行計(jì)算,而不再對(duì)其進(jìn)行緩存等待后續(xù)全部數(shù)據(jù)到來(lái)再進(jìn)行計(jì)算。

  1.1應(yīng)用場(chǎng)景大數(shù)據(jù)流式計(jì)算的應(yīng)用場(chǎng)景較多,本文按照數(shù)據(jù)產(chǎn)生方式、數(shù)據(jù)規(guī)模大小以及技術(shù)成熟度高低這3個(gè)不同維度,選擇金融銀行業(yè)應(yīng)用、互聯(lián)網(wǎng)應(yīng)用和物聯(lián)網(wǎng)應(yīng)用這3種典型應(yīng)用場(chǎng)景,用于分析說(shuō)明大數(shù)據(jù)流式計(jì)算的基本特征。從數(shù)據(jù)產(chǎn)生方式上看,它們分別是被動(dòng)產(chǎn)生數(shù)據(jù)、主動(dòng)產(chǎn)生數(shù)據(jù)和自動(dòng)產(chǎn)生數(shù)據(jù);從數(shù)據(jù)規(guī)模上看,它們處理的數(shù)據(jù)分別是小規(guī)模、中規(guī)模和大規(guī)模;從技術(shù)成熟度上看,它們分別是成熟度高、成熟度中和成熟度低的數(shù)據(jù)。

  金融銀行業(yè)的應(yīng)用在金融銀行領(lǐng)域的日常運(yùn)營(yíng)過(guò)程中,往往會(huì)產(chǎn)生大量數(shù)據(jù),這些數(shù)據(jù)的時(shí)效性往往較短。因此,金融銀行領(lǐng)域是大數(shù)據(jù)流式計(jì)算最典型的應(yīng)用場(chǎng)景之一,也是大數(shù)據(jù)流式計(jì)算最早的應(yīng)用領(lǐng)域。在金融銀行系統(tǒng)內(nèi)部,每時(shí)每刻都有大量的往往是結(jié)構(gòu)化的數(shù)據(jù)在各個(gè)系統(tǒng)間流動(dòng),并需要實(shí)時(shí)計(jì)算。同時(shí),金融銀行系統(tǒng)與其他系統(tǒng)也有著大量的數(shù)據(jù)流動(dòng),這些數(shù)據(jù)不僅有結(jié)構(gòu)化數(shù)據(jù),也會(huì)有半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)。通過(guò)對(duì)這些大數(shù)據(jù)的流式計(jì)算,發(fā)現(xiàn)隱含于其中的內(nèi)在特征,可以幫助金融銀行系統(tǒng)進(jìn)行實(shí)時(shí)決策。

  在金融銀行的實(shí)時(shí)監(jiān)控場(chǎng)景中,大數(shù)據(jù)流式計(jì)算往往體現(xiàn)出了自身的優(yōu)勢(shì)。如:風(fēng)險(xiǎn)管理。包括信用卡詐騙、保險(xiǎn)詐騙、證券交易詐騙、程序交易等,需要實(shí)時(shí)跟蹤發(fā)現(xiàn);營(yíng)銷管理。如,根據(jù)客戶信用卡消費(fèi)記錄,掌握客戶的消費(fèi)習(xí)慣和偏好,預(yù)測(cè)客戶未來(lái)的消費(fèi)需求,并為其推薦個(gè)性化的金融產(chǎn)品和服務(wù);商業(yè)智能。如,掌握金融銀行系統(tǒng)內(nèi)部各系統(tǒng)的實(shí)時(shí)數(shù)據(jù),實(shí)現(xiàn)對(duì)全局狀態(tài)的監(jiān)控和優(yōu)化,并提供決策支持。

  互聯(lián)網(wǎng)領(lǐng)域的應(yīng)用隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,特別是Web 2.0時(shí)代的到來(lái),用戶可以實(shí)時(shí)分享和提供各類數(shù)據(jù)。不僅使得數(shù)據(jù)量大為增加,也使得數(shù)據(jù)更多地以半結(jié)構(gòu)化和非結(jié)構(gòu)化的形態(tài)呈現(xiàn)。據(jù)統(tǒng)計(jì),目前互聯(lián)網(wǎng)中75%的數(shù)據(jù)來(lái)源于個(gè)人,主要以圖片、音頻、視頻數(shù)據(jù)形式存在,需要實(shí)時(shí)分析和計(jì)算這些大量、動(dòng)態(tài)的數(shù)據(jù)。

  在互聯(lián)網(wǎng)領(lǐng)域中,大數(shù)據(jù)流式計(jì)算的典型應(yīng)用場(chǎng)景包括:搜索引擎。搜索引擎提供商們往往會(huì)在反饋給客戶的搜索頁(yè)面中加入點(diǎn)擊付費(fèi)的廣告信息。插入什么廣告、在什么位置插入這些廣告才能得到最佳效果,往往需要根據(jù)客戶的查詢偏好、瀏覽歷史、地理位置等綜合語(yǔ)義進(jìn)行決定。而這種計(jì)算對(duì)于搜索服務(wù)器而言往往是大量的:一方面,每時(shí)每刻都會(huì)有大量客戶進(jìn)行搜索請(qǐng)求;另一方面,數(shù)據(jù)計(jì)算的時(shí)效性極低,需要保證極短的響應(yīng)時(shí)間;社交網(wǎng)站。需要實(shí)時(shí)分析用戶的狀態(tài)信息,及時(shí)提供最新的用戶分享信息到相關(guān)的朋友,準(zhǔn)確地推薦朋友,推薦主題,提升用戶體驗(yàn),并能及時(shí)發(fā)現(xiàn)和屏蔽各種欺騙行為。

  物聯(lián)網(wǎng)領(lǐng)域的應(yīng)用在物聯(lián)網(wǎng)環(huán)境中,各個(gè)傳感器產(chǎn)生大量數(shù)據(jù)。這些數(shù)據(jù)通常包含時(shí)間、位置、環(huán)境和行為等內(nèi)容,具有明顯的顆粒性。由于傳感器的多元化、差異化以及環(huán)境的多樣化,這些數(shù)據(jù)呈現(xiàn)出鮮明的異構(gòu)性、多樣性、非結(jié)構(gòu)化、有噪聲、高增長(zhǎng)率等特征。所產(chǎn)生的數(shù)據(jù)量之密集、實(shí)時(shí)性之強(qiáng)、價(jià)值密度之低是前所未有的,需要進(jìn)行實(shí)時(shí)、高效的計(jì)算。

  在物聯(lián)網(wǎng)領(lǐng)域中,大數(shù)據(jù)流式計(jì)算的典型應(yīng)用場(chǎng)景包括:智能交通。通過(guò)傳感器實(shí)時(shí)感知車輛、道路的狀態(tài),并分析和預(yù)測(cè)一定范圍、一段時(shí)間內(nèi)的道路流量情況,以便有效地進(jìn)行分流、調(diào)度和指揮;環(huán)境監(jiān)控。通過(guò)傳感器和移動(dòng)終端,對(duì)一個(gè)地區(qū)的環(huán)境綜合指標(biāo)進(jìn)行實(shí)時(shí)監(jiān)控、遠(yuǎn)程查看、智能聯(lián)動(dòng)、遠(yuǎn)程控制,系統(tǒng)地解決綜合環(huán)境問(wèn)題。

  這些對(duì)計(jì)算系統(tǒng)的實(shí)時(shí)性、吞吐量、可靠性等方面都提出很高要求。

  大數(shù)據(jù)流式計(jì)算的3種典型應(yīng)用場(chǎng)景的對(duì)比見(jiàn)表1.從數(shù)據(jù)的產(chǎn)生方式看,金融銀行領(lǐng)域的數(shù)據(jù)往往是在系統(tǒng)中被動(dòng)產(chǎn)生的,互聯(lián)網(wǎng)領(lǐng)域的數(shù)據(jù)往往是人為主動(dòng)產(chǎn)生的,物聯(lián)網(wǎng)領(lǐng)域的數(shù)據(jù)往往是由傳感器等設(shè)備自動(dòng)產(chǎn)生的;從數(shù)據(jù)的規(guī)模來(lái)看:金融銀行領(lǐng)域的數(shù)據(jù)與互聯(lián)網(wǎng)、物聯(lián)網(wǎng)領(lǐng)域的數(shù)據(jù)相比較少;物聯(lián)網(wǎng)領(lǐng)域的數(shù)據(jù)規(guī)模是最大的,但受制于物聯(lián)網(wǎng)的發(fā)展階段,當(dāng)前實(shí)際擁有數(shù)據(jù)規(guī)模最大的是互聯(lián)網(wǎng)領(lǐng)域;從技術(shù)成熟度來(lái)看:金融銀行領(lǐng)域的流式大數(shù)據(jù)應(yīng)用最為成熟,從早期的復(fù)雜事件處理開(kāi)始就呈現(xiàn)了大數(shù)據(jù)流式計(jì)算的思想;互聯(lián)網(wǎng)領(lǐng)域的發(fā)展,將大數(shù)據(jù)流式計(jì)算真正推向歷史舞臺(tái);物聯(lián)網(wǎng)領(lǐng)域的發(fā)展為大數(shù)據(jù)流式計(jì)算提供了重要的歷史機(jī)遇。

  金融銀行互聯(lián)網(wǎng)物聯(lián)網(wǎng)動(dòng)動(dòng)動(dòng)被主自小中大高中低表1大數(shù)據(jù)流式計(jì)算應(yīng)用場(chǎng)景對(duì)比1.2流式大數(shù)據(jù)特征用有向無(wú)環(huán)圖(directedacyclicgraph,簡(jiǎn)稱DAG)描述了大數(shù)據(jù)流的計(jì)算過(guò)程,其中,圓形表示數(shù)據(jù)的計(jì)算節(jié)點(diǎn),箭頭表示數(shù)據(jù)的流動(dòng)方向。

  與大數(shù)據(jù)批量計(jì)算不同,大數(shù)據(jù)流式計(jì)算中的數(shù)據(jù)流主要體現(xiàn)了如下5個(gè)特征:流式大數(shù)據(jù)是實(shí)時(shí)產(chǎn)生、實(shí)時(shí)計(jì)算,結(jié)果反饋往往也需要保證及時(shí)性。流式大數(shù)據(jù)價(jià)值的有效時(shí)間往往較短,大部分?jǐn)?shù)據(jù)到來(lái)后直接在內(nèi)存中進(jìn)行計(jì)算并丟棄,只有少量數(shù)據(jù)才被長(zhǎng)久保存到硬盤中。這就需要系統(tǒng)有足夠的低延遲計(jì)算能力,可以快速地進(jìn)行數(shù)據(jù)計(jì)算,在數(shù)據(jù)價(jià)值有效的時(shí)間內(nèi),體現(xiàn)數(shù)據(jù)的有用性。對(duì)于時(shí)效性特別短、潛在價(jià)值又很大的數(shù)據(jù)可以優(yōu)先計(jì)算。

  在大數(shù)據(jù)流式計(jì)算環(huán)境中,數(shù)據(jù)流往往是到達(dá)后立即被計(jì)算并使用,只有極少數(shù)的數(shù)據(jù)才會(huì)被持久化地保存下來(lái),大多數(shù)數(shù)據(jù)往往會(huì)被直接丟棄。數(shù)據(jù)的使用往往是一次性的、易失的,即使重放,得到的數(shù)據(jù)流和之前的數(shù)據(jù)流往往也是不同的。這就需要系統(tǒng)具有一定的容錯(cuò)能力,要充分地利用好僅有的一次數(shù)據(jù)計(jì)算機(jī)會(huì),盡可能全面、準(zhǔn)確、有效地從數(shù)據(jù)流中得出有價(jià)值的信息。

  在大數(shù)據(jù)流式計(jì)算環(huán)境中,數(shù)據(jù)的產(chǎn)生完全由數(shù)據(jù)源確定,由于不同的數(shù)據(jù)源在不同時(shí)空范圍內(nèi)的狀態(tài)不統(tǒng)一且發(fā)生動(dòng)態(tài)變化,導(dǎo)致數(shù)據(jù)流的速率呈現(xiàn)出了突發(fā)性的特征。前一時(shí)刻數(shù)據(jù)速率和后一時(shí)刻數(shù)據(jù)速率可能會(huì)有巨大的差異,這就需要系統(tǒng)具有很好的可伸縮性,能夠動(dòng)態(tài)適應(yīng)不確定流入的數(shù)據(jù)流,具有很強(qiáng)的系統(tǒng)計(jì)算能力和大數(shù)據(jù)流量動(dòng)態(tài)匹配的能力。一方面,在突發(fā)高數(shù)據(jù)流速的情況下,保證不丟棄數(shù)據(jù),或者識(shí)別并選擇性地丟棄部分不重要的數(shù)據(jù);另一方面,在低數(shù)據(jù)速率的情況下,保證不會(huì)太久或過(guò)多地占用系統(tǒng)資源。

  在大數(shù)據(jù)流式計(jì)算環(huán)境中,各數(shù)據(jù)流之間、同一數(shù)據(jù)流內(nèi)部各數(shù)據(jù)元素之間是無(wú)序的:一方面,由于各個(gè)數(shù)據(jù)源之間是相互獨(dú)立的,所處的時(shí)空環(huán)境也不盡相同,因此無(wú)法保證數(shù)據(jù)流間的各個(gè)數(shù)據(jù)元素的相對(duì)順序;另一方面,即使是同一個(gè)數(shù)據(jù)流,由于時(shí)間和環(huán)境的動(dòng)態(tài)變化,也無(wú)法保證重放數(shù)據(jù)流和之前數(shù)據(jù)流中數(shù)據(jù)元素順序的一致性。這就需要系統(tǒng)在數(shù)據(jù)計(jì)算過(guò)程中具有很好的數(shù)據(jù)分析和發(fā)現(xiàn)規(guī)律的能力,不能過(guò)多地依賴數(shù)據(jù)流間的內(nèi)在邏輯或者數(shù)據(jù)流內(nèi)部的內(nèi)在邏輯。

  無(wú)限性在大數(shù)據(jù)流式計(jì)算中,數(shù)據(jù)是實(shí)時(shí)產(chǎn)生、動(dòng)態(tài)增加的,只要數(shù)據(jù)源處于活動(dòng)狀態(tài),數(shù)據(jù)就會(huì)一直產(chǎn)生和持續(xù)增加下去??梢哉f(shuō),潛在的數(shù)據(jù)量是無(wú)限的,無(wú)法用一個(gè)具體確定的數(shù)據(jù)實(shí)現(xiàn)對(duì)其進(jìn)行量化。系統(tǒng)在數(shù)據(jù)計(jì)算過(guò)程中,無(wú)法保存全部數(shù)據(jù):一方面,硬件中沒(méi)有足夠大的空間來(lái)存儲(chǔ)這些無(wú)限增長(zhǎng)的數(shù)據(jù);另一方面,也沒(méi)有合適的軟件來(lái)有效地管理這么多數(shù)據(jù);并且,需要系統(tǒng)具有很好的穩(wěn)定性,保證系統(tǒng)長(zhǎng)期而穩(wěn)定地運(yùn)行。

  表2對(duì)比了大數(shù)據(jù)流式計(jì)算和大數(shù)據(jù)批量計(jì)算的需求。

  表2大數(shù)據(jù)流式、批量需求對(duì)比性能指標(biāo)大數(shù)據(jù)流式計(jì)算大數(shù)據(jù)批量計(jì)算計(jì)算方式實(shí)時(shí)批量常駐空間內(nèi)存硬盤時(shí)效性短長(zhǎng)有序性無(wú)有數(shù)據(jù)量無(wú)限有限數(shù)據(jù)速率突發(fā)穩(wěn)定是否可重現(xiàn)難易移動(dòng)對(duì)象數(shù)據(jù)移動(dòng)程序移動(dòng)數(shù)據(jù)精確度較低較高2大數(shù)據(jù)流式計(jì)算關(guān)鍵技術(shù)針對(duì)具有實(shí)時(shí)性、易失性、突發(fā)性、無(wú)序性、無(wú)限性等特征的流式大數(shù)據(jù),理想的大數(shù)據(jù)流式計(jì)算系統(tǒng)應(yīng)該表現(xiàn)出低延遲、高吞吐、持續(xù)穩(wěn)定運(yùn)行和彈性可伸縮等特性,這其中離不開(kāi)系統(tǒng)架構(gòu)、數(shù)據(jù)傳輸、編程接口、高可用技術(shù)等關(guān)鍵技術(shù)的合理規(guī)劃和良好設(shè)計(jì)。

  2.1系統(tǒng)架構(gòu)系統(tǒng)架構(gòu)是系統(tǒng)中各子系統(tǒng)間的組合方式,屬于大數(shù)據(jù)計(jì)算所共有的關(guān)鍵技術(shù),大數(shù)據(jù)流式計(jì)算需要選擇特定的系統(tǒng)架構(gòu)進(jìn)行流式計(jì)算任務(wù)的部署。當(dāng)前,大數(shù)據(jù)流式計(jì)算系統(tǒng)采用的系統(tǒng)架構(gòu)可以分為無(wú)中心節(jié)點(diǎn)的對(duì)稱式系統(tǒng)架構(gòu)(如S4,Puma等系統(tǒng))以及有中心節(jié)點(diǎn)的主從式架構(gòu)(如Storm系統(tǒng)):對(duì)稱式架構(gòu)。如所示:系統(tǒng)中各個(gè)節(jié)點(diǎn)的功能是相同的,具有良好的可伸縮性;但由于不存在中心節(jié)點(diǎn),在資源調(diào)度、系統(tǒng)容錯(cuò)、負(fù)載均衡等方面需要通過(guò)分布式協(xié)議實(shí)現(xiàn)。例如,S4通過(guò)Zookeeper實(shí)現(xiàn)系統(tǒng)容錯(cuò)、負(fù)載均衡等功能;主從式系統(tǒng)架構(gòu)。如所示:系統(tǒng)存在一個(gè)主節(jié)點(diǎn)和多個(gè)從節(jié)點(diǎn),主節(jié)點(diǎn)負(fù)責(zé)系統(tǒng)資源的管理和任務(wù)的協(xié)調(diào),并完成系統(tǒng)容錯(cuò)、負(fù)載均衡等方面的工作;從節(jié)點(diǎn)負(fù)責(zé)接收來(lái)自于主節(jié)點(diǎn)的任務(wù),并在計(jì)算完成后進(jìn)行反饋。各個(gè)從節(jié)點(diǎn)間沒(méi)有數(shù)據(jù)往來(lái),整個(gè)系統(tǒng)的運(yùn)行完全依賴于主節(jié)點(diǎn)控制。

  2.2數(shù)據(jù)傳輸數(shù)據(jù)傳輸是指完成有向任務(wù)圖到物理計(jì)算節(jié)點(diǎn)的部署之后,各個(gè)計(jì)算節(jié)點(diǎn)之間的數(shù)據(jù)傳輸方式。在大數(shù)據(jù)流式計(jì)算環(huán)境中,為了實(shí)現(xiàn)高吞吐和低延遲,需要更加系統(tǒng)地優(yōu)化有向任務(wù)圖以及有向任務(wù)圖到物理計(jì)算節(jié)點(diǎn)的映射方式。如所示,在大數(shù)據(jù)流式計(jì)算環(huán)境中,數(shù)據(jù)的傳輸方式分為主動(dòng)推送方式(基于push方式)和被動(dòng)拉取方式(基于pull方式):主動(dòng)推送方式。在上游節(jié)點(diǎn)產(chǎn)生或計(jì)算完數(shù)據(jù)后,主動(dòng)將數(shù)據(jù)發(fā)送到相應(yīng)的下游節(jié)點(diǎn),其本質(zhì)是讓相關(guān)數(shù)據(jù)主動(dòng)尋找下游的計(jì)算節(jié)點(diǎn),當(dāng)下游節(jié)點(diǎn)報(bào)告發(fā)生故障或負(fù)載過(guò)重時(shí),將后續(xù)數(shù)據(jù)流推送到其他相應(yīng)節(jié)點(diǎn)。主動(dòng)推送方式的優(yōu)勢(shì)在于數(shù)據(jù)計(jì)算的主動(dòng)性和及時(shí)性,但由于數(shù)據(jù)是主動(dòng)推送到下游節(jié)點(diǎn),往往不會(huì)過(guò)多地考慮到下游節(jié)點(diǎn)的負(fù)載狀態(tài)、工作狀態(tài)等因素,可能會(huì)導(dǎo)致下游部分節(jié)點(diǎn)負(fù)載不夠均衡;被動(dòng)拉取方式。只有下游節(jié)點(diǎn)顯式進(jìn)行數(shù)據(jù)請(qǐng)求,上游節(jié)點(diǎn)才會(huì)將數(shù)據(jù)傳輸?shù)较掠喂?jié)點(diǎn),其本質(zhì)是讓相關(guān)數(shù)據(jù)被動(dòng)地傳輸?shù)较掠斡?jì)算節(jié)點(diǎn)。被動(dòng)拉取方式的優(yōu)勢(shì)在于下游節(jié)點(diǎn)可以根據(jù)自身的負(fù)載狀態(tài)、工作狀態(tài)適時(shí)地進(jìn)行數(shù)據(jù)請(qǐng)求,但上游節(jié)點(diǎn)的數(shù)據(jù)可能未必得到及時(shí)的計(jì)算。

  大數(shù)據(jù)流式計(jì)算的實(shí)時(shí)性要求較高,數(shù)據(jù)需要得到及時(shí)處理,往往選擇主動(dòng)推送的數(shù)據(jù)傳輸方式。當(dāng)然,主動(dòng)推送方式和被動(dòng)拉取方式不是完全對(duì)立的,也可以將兩者進(jìn)行融合,從而在一定程度上實(shí)現(xiàn)更好的效果。

  2.3編程接口編程接口是方便用戶根據(jù)流式計(jì)算的任務(wù)特征,通過(guò)有向任務(wù)圖來(lái)描述任務(wù)內(nèi)在邏輯和依賴關(guān)系,并編程實(shí)現(xiàn)任務(wù)圖中各節(jié)點(diǎn)的處理功能。用戶策略的定制、業(yè)務(wù)流程的描述和具體應(yīng)用的實(shí)現(xiàn),需要通過(guò)大數(shù)據(jù)流式計(jì)算系統(tǒng)提供的應(yīng)用編程接口。良好的應(yīng)用編程接口可以方便用戶實(shí)現(xiàn)業(yè)務(wù)邏輯,可以減少用戶的編程工作量,并降低用戶系統(tǒng)功能的實(shí)現(xiàn)門檻。

  當(dāng)前,大多數(shù)開(kāi)源大數(shù)據(jù)流式計(jì)算系統(tǒng)均提供了類似于MapReduce的類MR用戶編程接口。例如:Storm提供Spout和Bolt應(yīng)用編程接口,用戶只需要定制Spout和Bolt的功能,并規(guī)定數(shù)據(jù)流在各個(gè)Bolt間的內(nèi)在流向,明確數(shù)據(jù)流的有向無(wú)環(huán)圖,其他具體細(xì)節(jié)的實(shí)現(xiàn)方式用戶不需要太多關(guān)心,即可滿足對(duì)流式大數(shù)據(jù)的高效、實(shí)時(shí)計(jì)算;也有部分大數(shù)據(jù)流式計(jì)算系統(tǒng)為用戶提供了類SQL的應(yīng)用編程接口,并給出了相應(yīng)的組件,便于應(yīng)用功能的實(shí)現(xiàn);StreamBase系統(tǒng)不僅為用戶提供了類SQL的應(yīng)用編程接口來(lái)描述計(jì)算過(guò)程,也借助圖形化用戶視窗為用戶提供了豐富的組件。

  2.4高可用技術(shù)大數(shù)據(jù)批量計(jì)算將數(shù)據(jù)事先存儲(chǔ)到持久設(shè)備上,節(jié)點(diǎn)失效后容易實(shí)現(xiàn)數(shù)據(jù)重放;而大數(shù)據(jù)流式計(jì)算對(duì)數(shù)據(jù)不進(jìn)行持久化存儲(chǔ)。因此,批量計(jì)算中的高可用技術(shù)不完全適用于流式計(jì)算環(huán)境,需要根據(jù)流式計(jì)算新特征及其新的高可用要求,有針對(duì)性地研究更加輕量、高效的高可用技術(shù)和方法。

  大數(shù)據(jù)流式計(jì)算系統(tǒng)高可用是通過(guò)狀態(tài)備份和故障恢復(fù)策略實(shí)現(xiàn)的。當(dāng)故障發(fā)生后,系統(tǒng)根據(jù)預(yù)先定義的策略進(jìn)行數(shù)據(jù)的重放和恢復(fù)。按照實(shí)現(xiàn)策略,可以細(xì)分為被動(dòng)等待(passivestandby)、主動(dòng)等待(activestandby)和上游備份(upstreambackup)這3種策略:如所示:主節(jié)點(diǎn)5進(jìn)行數(shù)據(jù)計(jì)算,副本節(jié)點(diǎn)5'處于待命狀態(tài),系統(tǒng)會(huì)定期地將主節(jié)點(diǎn)5上的最新的狀態(tài)備份到副本節(jié)點(diǎn)5'上。出現(xiàn)故障時(shí),系統(tǒng)從備份數(shù)據(jù)中進(jìn)行狀態(tài)恢復(fù)。被動(dòng)等待策略支持?jǐn)?shù)據(jù)負(fù)載較高、吞吐量較大的場(chǎng)景,但故障恢復(fù)時(shí)間較長(zhǎng),可以通過(guò)對(duì)備份數(shù)據(jù)的分布式存儲(chǔ)縮短恢復(fù)時(shí)間。該方式更適合于精確式數(shù)據(jù)恢復(fù),可以很好地支持不確定性計(jì)算應(yīng)用,在當(dāng)前流式數(shù)據(jù)計(jì)算中應(yīng)用最為廣泛。

  如所示:系統(tǒng)在為主節(jié)點(diǎn)5傳輸數(shù)據(jù)的同時(shí),也為副本節(jié)點(diǎn)5'傳輸一份數(shù)據(jù)副本。以主節(jié)點(diǎn)5為主進(jìn)行數(shù)據(jù)計(jì)算,當(dāng)主節(jié)點(diǎn)5出現(xiàn)故障時(shí),副本節(jié)點(diǎn)5'完全接管主節(jié)點(diǎn)5的工作,主副節(jié)點(diǎn)需要分配同樣的系統(tǒng)資源。

  該種方式故障恢復(fù)時(shí)間最短,但數(shù)據(jù)吞吐量較小,也浪費(fèi)了較多的系統(tǒng)資源。在廣域網(wǎng)環(huán)境中,系統(tǒng)負(fù)載往往不是過(guò)大時(shí),主動(dòng)等待策略是一個(gè)比較好的選擇,可以在較短的時(shí)間內(nèi)實(shí)現(xiàn)系統(tǒng)恢復(fù)。

  如所示:每個(gè)主節(jié)點(diǎn)均記錄其自身的狀態(tài)和輸出數(shù)據(jù)到日志文件,當(dāng)某個(gè)主節(jié)點(diǎn)5出現(xiàn)故障后,上游主節(jié)點(diǎn)會(huì)重放日志文件中的數(shù)據(jù)到相應(yīng)副本節(jié)點(diǎn)5'中,進(jìn)行數(shù)據(jù)的重新計(jì)算。上游備份策略所占用的系統(tǒng)資源最小,在無(wú)故障期間,由于副本節(jié)點(diǎn)5'保持空閑狀態(tài),數(shù)據(jù)的執(zhí)行效率很高。但由于其需要較長(zhǎng)的時(shí)間進(jìn)行恢復(fù)狀態(tài)的重構(gòu),故障的恢復(fù)時(shí)間往往較長(zhǎng)。如當(dāng)需要恢復(fù)時(shí)間窗口為30分鐘的聚類計(jì)算,就需要重放該30分鐘內(nèi)的所有元組。可見(jiàn),對(duì)于系統(tǒng)資源比較稀缺、算子狀態(tài)較少的情況,上游備份策略是一個(gè)比較好的選擇方案。

  上游備份策略表3從5個(gè)方面詳細(xì)對(duì)比了上述3種高可用策略,實(shí)際應(yīng)用中可以根據(jù)具體環(huán)境進(jìn)行選擇。

  表33種高可用策略對(duì)比性能指標(biāo)被動(dòng)等待策略主動(dòng)等待策略上游備份策略系統(tǒng)性能低高恢復(fù)速度中高低資源使用中高低精準(zhǔn)恢復(fù)是否適用范圍局域網(wǎng)廣域網(wǎng)局域網(wǎng)或廣域網(wǎng)2.5其他關(guān)鍵技術(shù)此外,大數(shù)據(jù)流式計(jì)算系統(tǒng)也離不開(kāi)其他相關(guān)關(guān)鍵技術(shù)的支持,包括:系統(tǒng)故障恢復(fù)。快速地實(shí)現(xiàn)從故障狀態(tài)到一種正確狀態(tài)的恢復(fù),滿足系統(tǒng)的高效運(yùn)行需求;系統(tǒng)資源調(diào)度。實(shí)現(xiàn)對(duì)系統(tǒng)中資源的最佳利用,提高資源的利用率,保證任務(wù)的完成和能耗的節(jié)省;負(fù)載均衡策略。實(shí)現(xiàn)對(duì)系統(tǒng)中的任務(wù)的動(dòng)態(tài)、合理的分配,動(dòng)態(tài)適應(yīng)系統(tǒng)負(fù)載情況,保證系統(tǒng)中的任務(wù)均衡和穩(wěn)定地運(yùn)行;數(shù)據(jù)在任務(wù)拓?fù)渲械穆酚刹呗?。促進(jìn)系統(tǒng)中負(fù)載均衡策略的高效實(shí)現(xiàn)、數(shù)據(jù)的合理流動(dòng)及快速處理。

  3系統(tǒng)實(shí)例分析文選擇當(dāng)前比較典型的、應(yīng)用較為廣泛的、具有代表性的前5款大數(shù)據(jù)流式計(jì)算系統(tǒng)進(jìn)行實(shí)例分析。

  Storm是Twitter支持開(kāi)發(fā)的一款分布式的、開(kāi)源的、實(shí)時(shí)的、主從式大數(shù)據(jù)流式計(jì)算系統(tǒng),最新版本是Storm0.8.2,使用的協(xié)議為EclipsePublicLicense1.0,其核心部分使用了高效流式計(jì)算的函數(shù)式語(yǔ)言Clojure編寫,極大地提高了系統(tǒng)性能。但為了方便用戶使用,支持用戶使用任意編程語(yǔ)言進(jìn)行項(xiàng)目的開(kāi)發(fā)。

  任務(wù)拓?fù)洌╰opology)是Storm的邏輯單元,一個(gè)實(shí)時(shí)應(yīng)用的計(jì)算任務(wù)將被打包為任務(wù)拓?fù)浜蟀l(fā)布,任務(wù)拓?fù)湟坏┨峤缓髮?huì)一直運(yùn)行著,除非顯式地去中止。一個(gè)任務(wù)拓?fù)涫怯梢幌盗蠸pout和Bolt構(gòu)成的有向無(wú)環(huán)圖,通過(guò)數(shù)據(jù)流(stream)實(shí)現(xiàn)Spout和Bolt之間的關(guān)聯(lián),如0所示。其中,Spout負(fù)責(zé)從外部數(shù)據(jù)源不間斷地讀取數(shù)據(jù),并以Tuple元組的形式發(fā)送給相應(yīng)的Bolt;Bolt負(fù)責(zé)對(duì)接收到的數(shù)據(jù)流進(jìn)行計(jì)算,實(shí)現(xiàn)過(guò)濾、聚合、查詢等具體功能,可以級(jí)聯(lián),也可以向外發(fā)送數(shù)據(jù)流。

  數(shù)據(jù)流是Storm對(duì)數(shù)據(jù)進(jìn)行的抽象,它是時(shí)間上無(wú)窮的Tuple元組序列,如1所示,數(shù)據(jù)流是通過(guò)流分組(streamgrouping)所提供的不同策略實(shí)現(xiàn)在任務(wù)拓?fù)渲辛鲃?dòng)。此外,為了滿足確保消息能且僅能被計(jì)算1次的需求,Storm還提供了事務(wù)任務(wù)拓?fù)洹?/P>

  作業(yè)級(jí)容錯(cuò)機(jī)制用戶可以為一個(gè)或多個(gè)數(shù)據(jù)流作業(yè)(以下簡(jiǎn)稱數(shù)據(jù)流)進(jìn)行編號(hào),分配一個(gè)唯一的ID,Storm可以保障每個(gè)編號(hào)的數(shù)據(jù)流在任務(wù)拓?fù)渲斜煌耆珗?zhí)行。所謂的完全執(zhí)行,是指由該ID綁定的源數(shù)據(jù)流以及由該源數(shù)據(jù)流后續(xù)生成的新數(shù)據(jù)流經(jīng)過(guò)任務(wù)拓?fù)渲忻恳粋€(gè)應(yīng)該到達(dá)的Bolt,并被完全執(zhí)行。如2所示,兩個(gè)數(shù)據(jù)流被分配一個(gè)TD=1,當(dāng)且僅當(dāng)兩個(gè)數(shù)據(jù)流分別經(jīng)過(guò)Bolt 2,最終都到達(dá)Bolt3并均被完全處理后,才表明數(shù)據(jù)流被完全執(zhí)行。

  Storm通過(guò)系統(tǒng)級(jí)組件Acker實(shí)現(xiàn)對(duì)數(shù)據(jù)流的全局計(jì)算路徑的跟蹤,并保證該數(shù)據(jù)流被完全執(zhí)行。其基本原理是為數(shù)據(jù)流中的每個(gè)分組進(jìn)行編號(hào),并通過(guò)異或運(yùn)算來(lái)實(shí)現(xiàn)對(duì)其計(jì)算路徑的跟蹤。

  作業(yè)級(jí)容錯(cuò)的基本原理是:作業(yè)級(jí)容錯(cuò)的基本流程是:在Spout中,系統(tǒng)會(huì)為數(shù)據(jù)流的每個(gè)分組生成一個(gè)唯一的64位整數(shù),作為該分組的根ID.根ID會(huì)被傳遞給Acker及后續(xù)的Bolt作為該分組單元的唯一標(biāo)識(shí)符。同時(shí),無(wú)論是Spout還是Bolt,每次新生成一個(gè)分組的時(shí)候,都會(huì)重新賦予該分組一個(gè)新的64位的整數(shù)的ID.Spout發(fā)送完某個(gè)數(shù)據(jù)流對(duì)應(yīng)的源分組后,并告知Acker自己所發(fā)射分組的根ID及生成的那些分組的新ID,而B(niǎo)olt每次接受到一個(gè)輸入分組并計(jì)算完之后,也將告知Acker自己計(jì)算的輸入分組的ID及新生成的那些分組的ID,Acker只需要對(duì)這些ID做一個(gè)簡(jiǎn)單的異或運(yùn)算,就能判斷出該根ID對(duì)應(yīng)的消息單元是否計(jì)算完成。

  Storm采用主從系統(tǒng)架構(gòu),如3所示,在一個(gè)Storm系統(tǒng)中有兩類節(jié)點(diǎn)(即,一個(gè)主節(jié)點(diǎn)Nimbus、多個(gè)從主節(jié)點(diǎn)Nimbus運(yùn)行在master環(huán)境中,是無(wú)狀態(tài)的,負(fù)責(zé)全局的資源分配、任務(wù)調(diào)度、狀態(tài)監(jiān)控和故障檢測(cè):一方面,主節(jié)點(diǎn)Nimbus接收客戶端提交來(lái)的任務(wù),驗(yàn)證后分配任務(wù)到從節(jié)點(diǎn)Supervisor上,同時(shí)把該任務(wù)的元信息寫入Zookeeper目錄中;另一方面,主節(jié)點(diǎn)Nimbus需要通過(guò)Zookeeper實(shí)時(shí)監(jiān)控任務(wù)的執(zhí)行情況,當(dāng)出現(xiàn)故障時(shí)進(jìn)行故障檢測(cè),并重啟失敗的從節(jié)點(diǎn)Supervisor和工作進(jìn)程Worker;從節(jié)點(diǎn)Supervisor運(yùn)行在slaves環(huán)境中,也是無(wú)狀態(tài)的,負(fù)責(zé)監(jiān)聽(tīng)并接受來(lái)自于主節(jié)點(diǎn)Nimbus所分配的任務(wù),并啟動(dòng)或停止自己所管理的工作進(jìn)程Worker,其中,工作進(jìn)程Worker負(fù)責(zé)具體任務(wù)的執(zhí)行。一個(gè)完整的任務(wù)拓?fù)渫煞植荚诙鄠€(gè)從節(jié)點(diǎn)Supervisor上的Worker進(jìn)程來(lái)協(xié)調(diào)執(zhí)行,每個(gè)Worker都執(zhí)行且僅執(zhí)行任務(wù)拓?fù)渲械囊粋€(gè)子集。在每個(gè)Worker內(nèi)部,會(huì)有多個(gè)Executor,每個(gè)Executor對(duì)應(yīng)一個(gè)線程。Task負(fù)責(zé)具體數(shù)據(jù)的計(jì)算,即,用戶所實(shí)現(xiàn)的Spout/Blot實(shí)例。每個(gè)Executor會(huì)對(duì)應(yīng)一個(gè)或多個(gè)Task,因此,系統(tǒng)中Executor的數(shù)量總是小于等于Task的數(shù)量。

  Zookeeper是一個(gè)針對(duì)大型分布式系統(tǒng)的可靠協(xié)調(diào)服務(wù)和元數(shù)據(jù)存儲(chǔ)系統(tǒng),通過(guò)配置Zookeeper集群,可以使用Zookeeper系統(tǒng)所提供的高可靠性服務(wù)。Storm系統(tǒng)引入Zookeeper,極大地簡(jiǎn)化了Nimbus,Supervisor,Worker之間的設(shè)計(jì),保障了系統(tǒng)的穩(wěn)定性。Zookeeper在Storm系統(tǒng)中具體實(shí)現(xiàn)了以下功能:⑷存儲(chǔ)客戶端提交的任務(wù)拓?fù)湫畔?、任?wù)分配信息、任務(wù)的執(zhí)行狀態(tài)信息等,便于主節(jié)點(diǎn)Nimbus監(jiān)控任務(wù)的執(zhí)行情況;(b)存儲(chǔ)從節(jié)點(diǎn)Supervisor、工作進(jìn)程Worker的狀態(tài)和心跳信息,便于主節(jié)點(diǎn)Nimbus監(jiān)控系統(tǒng)各節(jié)點(diǎn)運(yùn)行狀態(tài);(c)存儲(chǔ)整個(gè)集群的所有狀態(tài)信息和配置信息,便于主節(jié)點(diǎn)Nimbus監(jiān)控Zookeeper集群的狀態(tài),在出現(xiàn)主Zookeeper節(jié)點(diǎn)掛掉后可以重新選取一個(gè)節(jié)點(diǎn)作為主Zookeeper節(jié)點(diǎn),并進(jìn)行恢復(fù)。

  3Storm系統(tǒng)架構(gòu)Storm系統(tǒng)的主要特征為:⑻簡(jiǎn)單編程模型。用戶只需編寫Spout和Bolt部分的實(shí)現(xiàn),因此極大地降低了實(shí)時(shí)大數(shù)據(jù)流式計(jì)算的復(fù)雜性;(b)支持多種編程語(yǔ)言。默認(rèn)支持ClojureJava,Ruby和Python,也可以通過(guò)添加相關(guān)協(xié)議實(shí)現(xiàn)對(duì)新增語(yǔ)言的支持;(c)作業(yè)級(jí)容錯(cuò)性??梢员WC每個(gè)數(shù)據(jù)流作業(yè)被完全執(zhí)行;(d)水平可擴(kuò)展。計(jì)算可以在多個(gè)線程、進(jìn)程和服務(wù)器之間并發(fā)執(zhí)行;(e)快速消息計(jì)算。通過(guò)ZeroMQ作為其底層消息隊(duì)列,保證了消息能夠得到快速的計(jì)算。

  Storm系統(tǒng)存在的不足主要包括:資源分配沒(méi)有考慮任務(wù)拓?fù)涞慕Y(jié)構(gòu)特征,無(wú)法適應(yīng)數(shù)據(jù)負(fù)載的動(dòng)態(tài)變化;采用集中式的作業(yè)級(jí)容錯(cuò)機(jī)制,在一定程度上限制了系統(tǒng)的可擴(kuò)展性。

  S4是Yahoo支持開(kāi)發(fā)的一款分布式的、可擴(kuò)展的、可插拔的、對(duì)稱的大數(shù)據(jù)流式計(jì)算系統(tǒng),最新版本是S4處理單元PE(processingelement)如4所示,是S4中的基本計(jì)算單元,由4個(gè)組件構(gòu)成,即:(a)函數(shù)。實(shí)現(xiàn)了與該處理單元PE相對(duì)應(yīng)的功能和配置;(b)事件類型。規(guī)定了該處理單元PE所接收的事件類型;(c)主鍵。規(guī)定了該處理單元PE所關(guān)心的事件主鍵;(d)鍵值。規(guī)定了該處理單元PE所匹配的鍵值。

 ?。ê瘮?shù))(事件類型)(主鍵)(鍵值)4處理單元PE處理單元PE只關(guān)心與其事件類型相匹配的事件,并僅僅處理與其主鍵、鍵值相一致的事件,即,只有事件類型、主鍵、鍵值全部匹配后,處理單元PE才會(huì)處理該類事件。當(dāng)一個(gè)新事件沒(méi)有可以匹配的處理單元PE時(shí),系統(tǒng)將會(huì)為該事件新創(chuàng)建一個(gè)處理單元PE.因此,需要高效、動(dòng)態(tài)地創(chuàng)建、管理和刪除處理單元PE;同時(shí),處理單元PE的類型設(shè)計(jì)及其拓?fù)浣Y(jié)構(gòu)也需要更合理地規(guī)劃。

  有一類處理單元PE位于S4的輸入層,它們沒(méi)有主鍵、鍵值,只需事件類型相匹配,即對(duì)該類事件進(jìn)行處理。

  通常情況下,該類處理單元PE所計(jì)算的事件為原始輸入事件,其輸出事件會(huì)被新增主鍵、鍵值,以便后續(xù)處理單元PE進(jìn)行計(jì)算。

  在S4系統(tǒng)中,數(shù)據(jù)流是由事件的有序序列構(gòu)成的,其中,分別表示該類型事件的若干個(gè)和若干個(gè)和都是tap/e-va/Me式即,fcey=va/Me的元組值。事件在各個(gè)處理單元PE中被計(jì)算,在處理單元PE之間流動(dòng),處理單元PE之間的邏輯構(gòu)成了一個(gè)有向無(wú)環(huán)圖。

  5描述了一個(gè)統(tǒng)計(jì)Topi熱點(diǎn)單詞的實(shí)例。

  在5所示的有向無(wú)環(huán)圖中,節(jié)點(diǎn)表示處理單元PE,實(shí)現(xiàn)對(duì)數(shù)據(jù)流的計(jì)算和新數(shù)據(jù)流的輸出,有向邊表示事件的有序序列(r,4)及其流向。在該實(shí)例中,實(shí)現(xiàn)了對(duì)于流式數(shù)據(jù)中的Topr熱點(diǎn)單詞的統(tǒng)計(jì),其數(shù)據(jù)流的具體內(nèi)容見(jiàn)表4,其中,數(shù)據(jù)流1是初始化數(shù)據(jù)流,因此其主鍵值為空,鍵值為實(shí)時(shí)流入的文本數(shù)據(jù),在處理單元PE1中被分割為各個(gè)單詞,形成了新的數(shù)據(jù)流,其事件類型為單詞統(tǒng)計(jì),主鍵為word=x,鍵值為counts,并分別分流到處理單元PE2、處理單元PE3、處理單元PE4等節(jié)點(diǎn)中進(jìn)行計(jì)算,并再次形成了新的數(shù)據(jù)流,其事件類型為單詞數(shù)更新,主鍵為SortID=x,鍵值為word=y,count=z,并分別分流到處理單元PE5、處理單元PE6、處理單元PE7等節(jié)點(diǎn)中進(jìn)行計(jì)算,最后在處理單元PE8中進(jìn)行匯總和排序,得出當(dāng)前的Topr個(gè)熱點(diǎn)單詞。

  表4數(shù)據(jù)流內(nèi)容數(shù)據(jù)流事件類型主鍵鍵值查詢無(wú)單詞統(tǒng)計(jì)單詞數(shù)更新匯總降序輸出無(wú)在S4的處理節(jié)點(diǎn)Pnode中,如6所示,由處理空間和傳輸空間組成,其中,84處理節(jié)點(diǎn)空間在處理空間中,事件監(jiān)聽(tīng)系統(tǒng)主要用于監(jiān)聽(tīng)并分發(fā)接收到的事件計(jì)算請(qǐng)求,并由調(diào)度分配系統(tǒng)將事件分配到處理單元集PEC(processingelementcontainer)上進(jìn)行計(jì)算,處理單元集PEC以適當(dāng)?shù)捻樞蛘{(diào)用適當(dāng)?shù)奶幚韱卧狿E,并保證每個(gè)主鍵A:e>的處理單元PE都會(huì)被映射到一個(gè)確定的處理節(jié)點(diǎn)Pnode上。

  之后,處理節(jié)點(diǎn)Pnode或者發(fā)出輸出事件,或者向傳輸層請(qǐng)求協(xié)助,向指定邏輯節(jié)點(diǎn)發(fā)送消息。其中,處理單元集PEC由一個(gè)處理節(jié)點(diǎn)Pnode中內(nèi)部的多個(gè)處理單元PE組成。處理單元PE是事件計(jì)算的最小單元,接受一個(gè)或多個(gè)來(lái)自于事件源或其他處理單元PE的事件進(jìn)行計(jì)算,之后,分發(fā)一個(gè)或多個(gè)計(jì)算后的事件到其他處理單元PE或輸出結(jié)果。各個(gè)處理單元PE間相互獨(dú)立,它們之間通過(guò)事件構(gòu)成關(guān)聯(lián),事件在各處理單元PE間以數(shù)據(jù)流的形式進(jìn)行傳輸;在傳輸空間中,主要通過(guò)路由管理、負(fù)載均衡、集群管理、容錯(cuò)管理等實(shí)現(xiàn)對(duì)事件流的路由選擇、負(fù)載均衡、邏輯影射、故障恢復(fù)到備用節(jié)點(diǎn)等方面的管理和功能,并通過(guò)Zookeeper系統(tǒng)在S4集群節(jié)點(diǎn)間實(shí)現(xiàn)一致性協(xié)作。S4通過(guò)插件式的架構(gòu)來(lái)動(dòng)態(tài)選擇信息傳輸協(xié)議,對(duì)于控制信息,通常采用可靠傳輸協(xié)議,如TCP,保障控制信息傳輸?shù)目煽啃浴?duì)于數(shù)據(jù)信息,通常采用不可靠傳輸協(xié)議,如UDP,保障數(shù)據(jù)信息的高吞吐量。

  系統(tǒng)架構(gòu)處理單元集PEC用戶空間S4采用了對(duì)等式系統(tǒng)架構(gòu),如7所示。

 ?。ㄐ阅鼙O(jiān)控(客戶適配器)c配置維護(hù)(T名字服務(wù))7S4系統(tǒng)結(jié)構(gòu)在一個(gè)S4系統(tǒng)中,由用戶空間、資源調(diào)度空間和S4處理節(jié)點(diǎn)空間組成,其中,在用戶空間中,多個(gè)用戶可以通過(guò)本地的客戶端驅(qū)動(dòng)實(shí)現(xiàn)服務(wù)的請(qǐng)求訪問(wèn);在資源調(diào)度空間中,為用戶提供了客戶適配器,通過(guò)TCP/IP協(xié)議實(shí)現(xiàn)用戶的客戶端驅(qū)動(dòng)與客戶適配器間的連接和通信,多個(gè)用戶可以并發(fā)地與多個(gè)客戶適配器進(jìn)行服務(wù)請(qǐng)求;在S4處理節(jié)點(diǎn)空間中,提供了多個(gè)處理節(jié)點(diǎn)Pnode,進(jìn)行用戶服務(wù)請(qǐng)求的計(jì)算。各個(gè)處理節(jié)點(diǎn)間保持相對(duì)的獨(dú)立性、對(duì)等性和高并發(fā)性,極大地提高了系統(tǒng)的性能,并通過(guò)Hash方式將事件路由到一個(gè)或多個(gè)目標(biāo)處理節(jié)點(diǎn)Pnode上。

  S4系統(tǒng)存在的不足主要包括:當(dāng)數(shù)據(jù)流到達(dá)速度超過(guò)一定界限時(shí),到達(dá)速度越高,系統(tǒng)數(shù)據(jù)處理的錯(cuò)誤率越大;不支持系統(tǒng)節(jié)點(diǎn)的熱插拔,所有對(duì)節(jié)點(diǎn)的調(diào)整都必須離線進(jìn)行;僅支持部分容錯(cuò),即,節(jié)點(diǎn)失效轉(zhuǎn)移時(shí)會(huì)丟失原節(jié)點(diǎn)內(nèi)存中的狀態(tài)信息。

  數(shù)據(jù)傳輸通道和大數(shù)據(jù)流式計(jì)算系統(tǒng)。

  系統(tǒng)ZK節(jié)點(diǎn)DataFreeway是Facebook支持開(kāi)發(fā)的一款可擴(kuò)展數(shù)據(jù)流架構(gòu)(scalabledatastreamframework),可以有效地支持4種數(shù)據(jù)間的傳輸,即,文件到文件、文件到消息、消息到消息和消息到文件。其系統(tǒng)結(jié)構(gòu)如8所示,DataFreeway數(shù)據(jù)流架構(gòu)由4個(gè)組件構(gòu)成,即,Scribe,Calligraphus,ContinuousCopier和PTail.Scribe組件位于用戶端,其功能是將用戶的數(shù)據(jù)通過(guò)RPC發(fā)送到服務(wù)器端;Calligraphus組件實(shí)現(xiàn)了對(duì)日志類型的維護(hù)與管理,其功能是通過(guò)Zookeeper系統(tǒng),將位于緩沖區(qū)中的數(shù)據(jù)并發(fā)寫到HDFS中;ContinuousCopier組件的功能是實(shí)現(xiàn)在各個(gè)HDFS系統(tǒng)間進(jìn)行文件的遷移;PTail組件實(shí)現(xiàn)了并行地將文件輸出。

  所示,當(dāng)前最新寫數(shù)據(jù)流備份數(shù)據(jù)流| PTail子系統(tǒng)Puma3子系統(tǒng)讀數(shù)據(jù)流。HBase節(jié)點(diǎn)1 HBase子系統(tǒng)Serving子系統(tǒng);統(tǒng)延遲。Puma3哈希表,每個(gè)表從Puma3中將中讀取副本,進(jìn)系統(tǒng)實(shí)現(xiàn)時(shí),在Calligraphus階項(xiàng)對(duì)應(yīng)一個(gè)Key及用戶定義的內(nèi)存中的數(shù)據(jù)備份到HBase中了數(shù)據(jù)聚合功能,極大地提高了數(shù)據(jù)的計(jì)算能力,有效地降低了系段通過(guò)聚合主鍵完成對(duì)數(shù)據(jù)的分片,其中,每個(gè)分片都是內(nèi)存中的聚合方法,如統(tǒng)計(jì)、求和、平均值等操作。HBase子系統(tǒng)會(huì)定期地,進(jìn)行數(shù)據(jù)的持久化存儲(chǔ)。只有當(dāng)Puma3發(fā)生故障時(shí),才從HBase行數(shù)據(jù)的重放,實(shí)現(xiàn)對(duì)因故障丟失數(shù)據(jù)的恢復(fù);在無(wú)故障的情況下,HBase子系統(tǒng)不參與數(shù)據(jù)的計(jì)算,因此提高了數(shù)據(jù)的計(jì)算能力。

  DataFreewayandPuma系統(tǒng)存在的不足主要包括:數(shù)據(jù)延遲在秒級(jí),無(wú)法滿足大數(shù)據(jù)流式計(jì)算所需要的毫秒級(jí)應(yīng)用需求;將哈希表完全放入內(nèi)存的加速機(jī)制,導(dǎo)致內(nèi)存需求量大;資源調(diào)度策略不夠簡(jiǎn)單、高效,不能靈活適應(yīng)連續(xù)的工作負(fù)載。

  KafW38,54-56是Lrnkedm所支持的一款開(kāi)源的、分布式的、高吞吐量的發(fā)布訂閱消息系統(tǒng),可以有效地處理互聯(lián)網(wǎng)中活躍的流式數(shù)據(jù),如網(wǎng)站的頁(yè)面瀏覽量、用戶訪問(wèn)頻率、訪問(wèn)統(tǒng)計(jì)、好友動(dòng)態(tài)等,最新版本是Kafka0.8,開(kāi)發(fā)語(yǔ)言是Scala,可以使用Java進(jìn)行編寫。

  Kafka系統(tǒng)在設(shè)計(jì)過(guò)程中主要考慮到了以下需求特征:消息持久化是一種常態(tài)需求;吞吐量是系統(tǒng)需要滿足的首要目標(biāo);消息的狀態(tài)作為訂閱者(consumer)存儲(chǔ)信息的一部分,在訂閱者服務(wù)器中進(jìn)行存儲(chǔ);將發(fā)布者(producer)、代理(broker)和訂閱者(consumer)顯式地分布在多臺(tái)機(jī)器上,構(gòu)成顯式的分布式系統(tǒng)。形成了以下關(guān)鍵特性:在磁盤中實(shí)現(xiàn)消息持久化的時(shí)間復(fù)雜度為0(1),數(shù)據(jù)規(guī)模可以達(dá)到TB級(jí)別;實(shí)現(xiàn)了數(shù)據(jù)的高吞吐量,可以滿足每秒數(shù)十萬(wàn)條消息的處理需求;實(shí)現(xiàn)了在服務(wù)器集群中進(jìn)行消息的分片和序列管理;實(shí)現(xiàn)了對(duì)Hadoop系統(tǒng)的兼容,可以將數(shù)據(jù)并行地加載到Hadoop集群中。

  Kafka消息系統(tǒng)的架構(gòu)是由發(fā)布者(producer)、代理(broker)和訂閱者(consumer)共同構(gòu)成的顯式分布式架發(fā)布訂閱者構(gòu),即,分別位于不同的節(jié)點(diǎn)上,如0所示。各部分構(gòu)成一個(gè)完整的邏輯組,并對(duì)外界提供服務(wù),各部分間通過(guò)消息(message)進(jìn)行數(shù)據(jù)傳輸。其中,發(fā)布者可以向一個(gè)主題(topic)推送相關(guān)消息,訂閱者以組為單位,可以關(guān)注并拉取自己感興趣的消息,通過(guò)Zookeeper實(shí)現(xiàn)對(duì)訂閱者和代理的全局狀態(tài)信息的管理,及其負(fù)載均衡的實(shí)現(xiàn)。

  數(shù)據(jù)存儲(chǔ)Kafka消息系統(tǒng)通過(guò)僅僅進(jìn)行數(shù)據(jù)追加的方式實(shí)現(xiàn)對(duì)磁盤數(shù)據(jù)的持久化保存,實(shí)現(xiàn)了對(duì)大數(shù)據(jù)的穩(wěn)定存儲(chǔ),并有效地提高了系統(tǒng)的計(jì)算能力。通過(guò)采用Sendfile系統(tǒng)調(diào)用方式優(yōu)化了網(wǎng)絡(luò)傳輸,減少了1次內(nèi)存拷貝,提高了系統(tǒng)的吞吐量,即使對(duì)于普通的硬件,Kafka消息系統(tǒng)也可以支持每秒數(shù)十萬(wàn)的消息處理能力。此外,在Kafka消息系統(tǒng)中,通過(guò)僅保存訂閱者已經(jīng)計(jì)算數(shù)據(jù)的偏量信息,一方面可以有效地節(jié)省數(shù)據(jù)的存儲(chǔ)空間,另一方面,也簡(jiǎn)化了系統(tǒng)的計(jì)算方式,方便了系統(tǒng)的故障恢復(fù)。

  Kafka消息系統(tǒng)采用了推送、拉取相結(jié)合的方式進(jìn)行消息的傳輸,其中,當(dāng)發(fā)布者需要傳輸消息時(shí),會(huì)主動(dòng)地推送該消息到相關(guān)的代理節(jié)點(diǎn);當(dāng)訂閱者需要訪問(wèn)數(shù)據(jù)時(shí),其會(huì)從代理節(jié)點(diǎn)中進(jìn)行拉取。通常情況下,訂閱者可以從代理節(jié)點(diǎn)中拉取自己感興趣的主題消息。

  在Kafka消息系統(tǒng)中,發(fā)布者和代理節(jié)點(diǎn)之間沒(méi)有負(fù)載均衡機(jī)制,但可以通過(guò)專用的第4層負(fù)載均衡器在Kafka代理之上實(shí)現(xiàn)基于TCP連接的負(fù)載均衡的調(diào)整。訂閱者和代理節(jié)點(diǎn)之間通過(guò)Zookeeper實(shí)現(xiàn)了負(fù)載均衡機(jī)制,在Zookeeper中管理全部活動(dòng)的訂閱者和代理節(jié)點(diǎn)信息,當(dāng)有訂閱者和代理節(jié)點(diǎn)的狀態(tài)發(fā)生變化時(shí),才實(shí)時(shí)進(jìn)行系統(tǒng)的負(fù)載均衡的調(diào)整,保障整個(gè)系統(tǒng)處于一個(gè)良好的均衡狀態(tài)。

  Kafka系統(tǒng)存在的不足主要包括:只支持部分容錯(cuò),即,節(jié)點(diǎn)失效轉(zhuǎn)移時(shí)會(huì)丟失原節(jié)點(diǎn)內(nèi)存中的狀態(tài)信息;代理節(jié)點(diǎn)沒(méi)有副本機(jī)制保護(hù),一旦代理節(jié)點(diǎn)出現(xiàn)故障,該代理節(jié)點(diǎn)中的數(shù)據(jù)將不再可用;代理節(jié)點(diǎn)不保存訂閱者的狀態(tài),刪除消息時(shí)無(wú)法判斷該消息是否已被閱讀。

  TimeStream是Microsoft在Streamlnsight的基礎(chǔ)上開(kāi)發(fā)的一款分布式的、低延遲的、實(shí)時(shí)連續(xù)的大數(shù)據(jù)流式計(jì)算系統(tǒng),通過(guò)彈性替代機(jī)制,可以自適應(yīng)因故障恢復(fù)和動(dòng)態(tài)配置所導(dǎo)致的系統(tǒng)負(fù)載均衡的變化,使用C.NET來(lái)編寫。

  TimeStream的開(kāi)發(fā)是基于大數(shù)據(jù)流式計(jì)算以下兩點(diǎn)來(lái)考慮的:(a)連續(xù)到達(dá)的流式大數(shù)據(jù)已經(jīng)遠(yuǎn)遠(yuǎn)超出了單臺(tái)物理機(jī)器的計(jì)算能力,分布式的計(jì)算架構(gòu)成為必然的選擇;(b)新產(chǎn)生的流式大數(shù)據(jù)必須在極短的時(shí)間延遲內(nèi),經(jīng)過(guò)相關(guān)任務(wù)拓?fù)溥M(jìn)行計(jì)算后,產(chǎn)生出能夠反映該輸入數(shù)據(jù)特征的計(jì)算結(jié)果。

  TimeStream中的數(shù)據(jù)計(jì)算邏輯是基于數(shù)據(jù)流DAG實(shí)現(xiàn)的,如1所示,在數(shù)據(jù)流DAG中的每個(gè)頂點(diǎn)V,在獲取輸入數(shù)據(jù)流/后,觸發(fā)相關(guān)操作/產(chǎn)生新數(shù)據(jù)流,并更新頂點(diǎn)v的狀態(tài)從ljA即,(A)=/v(M)。

  1數(shù)據(jù)流任務(wù)拓?fù)漤旤c(diǎn)在TimeStream中,一個(gè)數(shù)據(jù)流子圖sub-DAG是指在數(shù)據(jù)流DAG中,兩頂點(diǎn)及該兩頂點(diǎn)間的全部頂點(diǎn)和有向邊的集合,即,滿足:對(duì)于數(shù)據(jù)流子圖sub-DAG中任意兩頂點(diǎn)vi和v2,以及數(shù)據(jù)流DAG中任意一頂點(diǎn)V,若頂點(diǎn)V位于頂點(diǎn)V1和V2的有向邊上,那么頂點(diǎn)V?定是數(shù)據(jù)流子圖sub-DAG的一個(gè)頂點(diǎn)。數(shù)據(jù)流子圖sub-DAG在邏輯上可以簡(jiǎn)化為一個(gè)與其功能相同的頂點(diǎn),如2所示,在一個(gè)由7個(gè)頂點(diǎn)所組成的數(shù)據(jù)流DAG中,由頂點(diǎn)V2,V3,V4和V5及其有向邊所構(gòu)成的數(shù)據(jù)流子圖sub-DAG,可以簡(jiǎn)化為一個(gè)輸入數(shù)據(jù)流為/、輸出數(shù)據(jù)流為的邏輯頂點(diǎn)。

  在TimeStream中,當(dāng)出現(xiàn)服務(wù)器故障或系統(tǒng)負(fù)載劇烈持續(xù)變化的情況時(shí),可以通過(guò)數(shù)據(jù)流子圖sub-DAG間、數(shù)據(jù)流子圖sub-DAG與頂點(diǎn)間以及各頂點(diǎn)間的彈性等價(jià)替代,動(dòng)態(tài)、實(shí)時(shí)地適應(yīng)系統(tǒng)的負(fù)載變化需求。具體而言,彈性等價(jià)替代可以進(jìn)一步細(xì)分為3種情況:頂點(diǎn)間的彈性等價(jià)替代。當(dāng)數(shù)據(jù)流DAG中的任意一頂點(diǎn)v出現(xiàn)故障不能正常工作時(shí),系統(tǒng)會(huì)啟動(dòng)一個(gè)具有相同功能的頂點(diǎn)V,并接管頂點(diǎn)v的工作;數(shù)據(jù)流子圖sub-DAG與頂點(diǎn)間的彈性等價(jià)替代。如2所示,當(dāng)整個(gè)系統(tǒng)的負(fù)載過(guò)輕時(shí),為了節(jié)省系統(tǒng)的資源,可以通過(guò)一個(gè)新的頂點(diǎn)v代替由頂點(diǎn)V2,V3,V4和V5所組成的數(shù)據(jù)流子圖sub-DAG,該新頂點(diǎn)v將實(shí)現(xiàn)數(shù)據(jù)流子圖sub-DAG的全部功能;反之,當(dāng)系統(tǒng)的負(fù)載過(guò)重時(shí),也可以用一個(gè)數(shù)據(jù)流子圖sub-DAG代替任意一個(gè)頂點(diǎn)v,實(shí)現(xiàn)功能的分解和任務(wù)的分擔(dān);數(shù)據(jù)流子圖sub-DAG間的彈性等價(jià)替代。如3所示,右側(cè)由頂點(diǎn)V2,V3,V4和V5所組成的數(shù)據(jù)流子圖sub-DAG實(shí)現(xiàn)了HashPartition,Computation和Union等功能,但當(dāng)系統(tǒng)的Computation功能的計(jì)算量突然持續(xù)增大后,用左側(cè)由頂點(diǎn)V8,v9,vi0,v,vi2和vn所組成的數(shù)據(jù)流子圖sub-DAG彈性等價(jià)替代右側(cè)的子圖,實(shí)現(xiàn)了將Computation計(jì)算節(jié)點(diǎn)由2個(gè)增加到4個(gè),提高了Computation的計(jì)算能力。

  通過(guò)彈性等價(jià)替代機(jī)制可以有效地適應(yīng)系統(tǒng)因故障和負(fù)載的變化對(duì)系統(tǒng)性能產(chǎn)生的影響,保證系統(tǒng)性能的穩(wěn)定性;但在彈性等價(jià)替代的過(guò)程中,一定要實(shí)現(xiàn)替代子圖或頂點(diǎn)間的等價(jià),并盡可能地進(jìn)行狀態(tài)的恢復(fù)。所謂的等價(jià),即對(duì)于相同的輸入,子圖或頂點(diǎn)可以在功能上產(chǎn)生相同的輸出,唯一存在的區(qū)別在于其性能的不同。

  狀態(tài)的恢復(fù)是通過(guò)對(duì)數(shù)據(jù)流DAG中的依賴關(guān)系跟蹤機(jī)制來(lái)實(shí)現(xiàn),并盡可能全面地進(jìn)行系統(tǒng)狀態(tài)的恢復(fù)。

  在TimeStream的系統(tǒng)結(jié)構(gòu)中,實(shí)現(xiàn)了資源分配、節(jié)點(diǎn)調(diào)度、故障檢測(cè)等功能。

  如4所示,位于頭節(jié)點(diǎn)(headnode)中的集群管理器(clustermanager,簡(jiǎn)稱CM)實(shí)現(xiàn)了對(duì)系統(tǒng)資源的管理和任務(wù)的分配,位于計(jì)算節(jié)點(diǎn)(computenode)的節(jié)點(diǎn)服務(wù)器(nodeservice,簡(jiǎn)稱NS)實(shí)現(xiàn)了對(duì)計(jì)算節(jié)點(diǎn)的管理和維護(hù)。當(dāng)一個(gè)新的數(shù)據(jù)流任務(wù)進(jìn)入系統(tǒng)被計(jì)算時(shí):首先,系統(tǒng)為該任務(wù)分配一個(gè)全局唯一的查詢協(xié)調(diào)器(querycoordinator,簡(jiǎn)稱QC),查詢協(xié)調(diào)器QC向集群管理器CM請(qǐng)求資源運(yùn)行任務(wù)的數(shù)據(jù)流DAG;其次,向節(jié)點(diǎn)服務(wù)器NS請(qǐng)求調(diào)度頂點(diǎn)處理器(vertexprocesses,簡(jiǎn)稱VP),并實(shí)現(xiàn)數(shù)據(jù)流DAG的構(gòu)建;再次,實(shí)施數(shù)據(jù)計(jì)算;最后,查詢協(xié)調(diào)器QC和頂點(diǎn)處理器VP均會(huì)實(shí)時(shí)地跟蹤系統(tǒng)的運(yùn)行情況,并定期地將相關(guān)元數(shù)據(jù)信息保持到數(shù)據(jù)庫(kù)中,在出現(xiàn)系統(tǒng)故障或負(fù)載劇烈持續(xù)變化的情況時(shí),可以通過(guò)這些被永久保存的元數(shù)據(jù)進(jìn)行系統(tǒng)狀態(tài)的恢復(fù)和實(shí)時(shí)動(dòng)態(tài)的調(diào)整。

  存在不足TimeStream系統(tǒng)存在的不足主要包括:數(shù)據(jù)延遲在秒級(jí),無(wú)法滿足毫秒級(jí)的應(yīng)用需求;基于依賴關(guān)系跟蹤的容錯(cuò)機(jī)制降低了系統(tǒng)性能,當(dāng)系統(tǒng)規(guī)模為16個(gè)節(jié)點(diǎn)時(shí),系統(tǒng)吞吐量下降了10%左右。

  3.6對(duì)比分析系統(tǒng)進(jìn)行了對(duì)比分析。

  表5數(shù)據(jù)流系統(tǒng)對(duì)比性能指標(biāo)S4系統(tǒng)系統(tǒng)架構(gòu)主從對(duì)稱主從數(shù)據(jù)傳輸拉取推送推送拉取拉取應(yīng)用接口MR接口SQL接口高可用性上游備份策略被動(dòng)等待策略主動(dòng)等待策略被動(dòng)等待策略上游備份策略開(kāi)發(fā)語(yǔ)言容錯(cuò)機(jī)制作業(yè)級(jí)容錯(cuò)部分容錯(cuò)依賴關(guān)系跟蹤精確恢復(fù)否是資源利用率高低高狀態(tài)持久化否是否是數(shù)據(jù)去重否是否編程模型純編程編程+XML純編程負(fù)載均衡不支持部分支持支持典型應(yīng)用社交網(wǎng)絡(luò)廣告投放站點(diǎn)統(tǒng)計(jì)好友動(dòng)態(tài)微博情感分析可以看到:在體系結(jié)構(gòu)方面:Storm,Kafka,TimeStream選擇了主從式體系結(jié)構(gòu),S4和DataFreewayandPuma均選擇了對(duì)稱式體系結(jié)構(gòu);在應(yīng)用接口方面:Storm,S4,Puma,Kafka均選擇了類MapReduce接口,簡(jiǎn)化了用戶的編程;TimeStream選擇了用戶更為熟悉的類SQL接口。此外,HStreammg已為用戶提供了更為方便的基于拖拽的可視化接口;在開(kāi)發(fā)語(yǔ)言方面:S4和Puma均選擇了Java語(yǔ)言;Storm的核心代碼雖然選擇了Clojure語(yǔ)言,但也支持在高可用策略方面:S4和Kafka均選擇了被動(dòng)等待策略,因此其資源利用率比較低;DataFreewayandPuma選擇了主動(dòng)等待策略;Storm,TimeStream選擇了上游備份策略,相應(yīng)的資源利用率比較高;Storm,S4,DataFreewayandPuma和Kafka目前均不支持?jǐn)?shù)據(jù)的精確恢復(fù)、負(fù)載均衡等功能,但面向金融領(lǐng)域的StreamBase支持?jǐn)?shù)據(jù)的精確恢復(fù)。

  如5所示,批量計(jì)算相關(guān)的大數(shù)據(jù)系統(tǒng),如批量處理系統(tǒng)(如MapReduce)、大規(guī)模并行數(shù)據(jù)庫(kù)等,在數(shù)據(jù)吞吐量方面具有明顯優(yōu)勢(shì),但在系統(tǒng)響應(yīng)時(shí)間方面往往在秒級(jí)以上。而當(dāng)前的流式計(jì)算相關(guān)的大數(shù)據(jù)系統(tǒng),如流式處理系統(tǒng)、內(nèi)存數(shù)據(jù)庫(kù)、CEP(復(fù)雜事件處理)等,在系統(tǒng)響應(yīng)時(shí)間方面雖然維持在毫秒級(jí)的水平,但數(shù)據(jù)吞吐量往往在GB級(jí)別,遠(yuǎn)遠(yuǎn)滿足不了大數(shù)據(jù)流式計(jì)算系統(tǒng)對(duì)數(shù)據(jù)吞吐量的要求。通常情況下,一個(gè)理想的大數(shù)據(jù)流式計(jì)算系統(tǒng)在響應(yīng)時(shí)間方面應(yīng)維持在毫秒級(jí)的水平,并且數(shù)據(jù)吞吐量應(yīng)該提高到PB級(jí)及其以上水平。

  4面臨的技術(shù)挑戰(zhàn)流式大數(shù)據(jù)在實(shí)時(shí)性、無(wú)序性、無(wú)限性、易失性、突發(fā)性等方面均呈現(xiàn)出了諸多新的鮮明特征,因此,傳統(tǒng)的先存儲(chǔ)后計(jì)算的批量數(shù)據(jù)計(jì)算理念不適用于大數(shù)據(jù)流式計(jì)算的環(huán)境中,使得大數(shù)據(jù)流式環(huán)境中的數(shù)據(jù)計(jì)算在系統(tǒng)的可伸縮性、系統(tǒng)容錯(cuò)、狀態(tài)一致性、負(fù)載均衡、數(shù)據(jù)吞吐量等方面均面臨著前所未有的新的挑戰(zhàn)。

  4.1可伸縮性在大數(shù)據(jù)流式計(jì)算環(huán)境中,系統(tǒng)的可伸縮性是制約大數(shù)據(jù)流式計(jì)算系統(tǒng)廣泛應(yīng)用的一個(gè)重要因素。Storm,Kafka,TimeStream等系統(tǒng)沒(méi)有實(shí)現(xiàn)對(duì)系統(tǒng)可伸縮性的良好支持:一方面,流式數(shù)據(jù)的產(chǎn)生速率在高峰時(shí)期會(huì)不斷增加且數(shù)據(jù)量巨大,持續(xù)時(shí)間往往很長(zhǎng),因此需要大數(shù)據(jù)流式系統(tǒng)具有很好的“可伸”的特征,可以實(shí)時(shí)適應(yīng)數(shù)據(jù)增長(zhǎng)的需求,實(shí)現(xiàn)對(duì)系統(tǒng)資源進(jìn)行動(dòng)態(tài)調(diào)整和快速部署,并保證整個(gè)系統(tǒng)的穩(wěn)定性;另一方面,當(dāng)流式數(shù)據(jù)的產(chǎn)生速率持續(xù)減少時(shí),需要及時(shí)回收在高峰時(shí)期所分配的但目前已處于閑置或低效利用的資源,實(shí)現(xiàn)整個(gè)系統(tǒng)架構(gòu)和有效的分配,是保障整個(gè)系統(tǒng)可伸縮性的基礎(chǔ),同時(shí),又盡可能地減少不必要的資源和能源的浪費(fèi)。

  大數(shù)據(jù)流式計(jì)算環(huán)境中的可伸縮性問(wèn)題的解決,需要實(shí)現(xiàn)對(duì)系統(tǒng)架構(gòu)的合理布局、系統(tǒng)資源的有序組織、高效管理和靈活調(diào)度,在保證系統(tǒng)完成計(jì)算的前提下,盡量少地太久、太多地占用系統(tǒng)資源,通過(guò)虛擬化機(jī)制實(shí)現(xiàn)軟、硬件之間的低耦合,實(shí)現(xiàn)資源的在線遷移,并最終解決大數(shù)據(jù)流式計(jì)算環(huán)境中的可伸縮性問(wèn)題。

  4.2系統(tǒng)容錯(cuò)在大數(shù)據(jù)流式計(jì)算環(huán)境中,系統(tǒng)容錯(cuò)機(jī)制是進(jìn)一步改善整個(gè)系統(tǒng)性能、提高計(jì)算結(jié)果的滿意度、保證系統(tǒng)可靠持續(xù)運(yùn)行的一個(gè)重要措施,也是當(dāng)前大多數(shù)大數(shù)據(jù)流式計(jì)算系統(tǒng)所缺失的。如S4,Puma,Kafka等系統(tǒng)實(shí)現(xiàn)了對(duì)部分容錯(cuò)的支持,Storm系統(tǒng)實(shí)現(xiàn)了對(duì)作業(yè)級(jí)容錯(cuò)的支持,TimeStream系統(tǒng)通過(guò)依賴關(guān)系跟蹤實(shí)現(xiàn)了對(duì)容錯(cuò)的部分支持。大數(shù)據(jù)流式計(jì)算環(huán)境對(duì)容錯(cuò)機(jī)制提出了新的挑戰(zhàn):一方面,數(shù)據(jù)流是實(shí)時(shí)、持續(xù)地到來(lái),呈現(xiàn)出時(shí)間上不可逆的特征,一旦數(shù)據(jù)流流過(guò),再次重放數(shù)據(jù)流的成本是很大的,甚至是不現(xiàn)實(shí)的。由于數(shù)據(jù)流所呈現(xiàn)出的持續(xù)性和無(wú)限性,也無(wú)法預(yù)測(cè)未來(lái)流量的變化趨勢(shì);另一方面,在流式大數(shù)據(jù)的計(jì)算過(guò)程中,大部分“無(wú)用”的數(shù)據(jù)將被直接丟棄,能被永久保存下來(lái)的數(shù)據(jù)量是極少的,當(dāng)需要進(jìn)行系統(tǒng)容錯(cuò)時(shí),其中不可避免地會(huì)出現(xiàn)一個(gè)時(shí)間段內(nèi)數(shù)據(jù)不完整的情況;再則,需要針對(duì)不同類型的應(yīng)用,從系統(tǒng)層面上設(shè)計(jì)符合其應(yīng)用特征的數(shù)據(jù)容錯(cuò)級(jí)別和容錯(cuò)策略,避免不必要的資源浪費(fèi)及應(yīng)用需求的不吻合。

  大數(shù)據(jù)流式計(jì)算環(huán)境中的容錯(cuò)策略的確定,需要根據(jù)具體的應(yīng)用場(chǎng)景進(jìn)行系統(tǒng)的設(shè)計(jì)和權(quán)衡,并且需要充分考慮到流式大數(shù)據(jù)的持續(xù)性、無(wú)限性、不可恢復(fù)性等關(guān)鍵特征。但是,沒(méi)有任何數(shù)據(jù)丟失的容錯(cuò)策略也未必是最佳的,需要綜合統(tǒng)籌容錯(cuò)級(jí)別和資源利用、維護(hù)代價(jià)等要素間的關(guān)系。但在對(duì)系統(tǒng)資源占用合理、對(duì)系統(tǒng)性能影響可接受的情況下,容錯(cuò)的精度越高必將越好。

  4.3狀態(tài)一致性在大數(shù)據(jù)流式計(jì)算環(huán)境中,維持系統(tǒng)中各節(jié)點(diǎn)間狀態(tài)的一致性對(duì)于系統(tǒng)的穩(wěn)定、高效運(yùn)行、故障恢復(fù)都至關(guān)重要。然而,當(dāng)前多數(shù)系統(tǒng)不能有效地支持系統(tǒng)狀態(tài)的一致性,如Storm,Kafka等系統(tǒng)尚不支持維護(hù)系統(tǒng)狀態(tài)的一致性,S4,TimeStream等系統(tǒng)也僅實(shí)現(xiàn)了在一定程度上對(duì)狀態(tài)一致性的支持。大數(shù)據(jù)流式計(jì)算環(huán)境對(duì)狀態(tài)一致性提出了新的挑戰(zhàn):一方面,在系統(tǒng)實(shí)時(shí)性要求極高、數(shù)據(jù)速率動(dòng)態(tài)變化的環(huán)境中,維護(hù)哪些數(shù)據(jù)的狀態(tài)一致性,如何從高速、海量的數(shù)據(jù)流中識(shí)別這些數(shù)據(jù)是一個(gè)巨大的挑戰(zhàn);另一方面,在大規(guī)模分布式環(huán)境中,如何組織和管理實(shí)現(xiàn)系統(tǒng)狀態(tài)一致性的相關(guān)數(shù)據(jù),滿足系統(tǒng)對(duì)數(shù)據(jù)的高效組織和精準(zhǔn)管理的要求,也是一個(gè)巨大的挑戰(zhàn)。

  大數(shù)據(jù)流式計(jì)算環(huán)境中的狀態(tài)一致性問(wèn)題的解決,需要從系統(tǒng)架構(gòu)的設(shè)計(jì)層面上著手。存在全局唯一的中心節(jié)點(diǎn)的主從式架構(gòu)方案無(wú)疑是實(shí)現(xiàn)系統(tǒng)狀態(tài)一致性的最佳解決方案,但需要有效避免單點(diǎn)故障問(wèn)題。通常情況下,在大數(shù)據(jù)流式計(jì)算環(huán)境中,程序和數(shù)據(jù)一旦啟動(dòng)后,將會(huì)常駐內(nèi)容,對(duì)系統(tǒng)的資源占用也往往相對(duì)穩(wěn)定。因此,單點(diǎn)故障問(wèn)題在大數(shù)據(jù)流式計(jì)算環(huán)境中并沒(méi)有批量計(jì)算環(huán)境中那么復(fù)雜。批量計(jì)算環(huán)境中的很多策略將具有很好的和借鑒價(jià)值。

  4.4負(fù)載均衡在大數(shù)據(jù)流式計(jì)算環(huán)境中,系統(tǒng)的負(fù)載均衡機(jī)制是制約系統(tǒng)穩(wěn)定運(yùn)行、高吞吐量計(jì)算、快速響應(yīng)的一個(gè)關(guān)鍵因素。然而,當(dāng)前多數(shù)系統(tǒng)不能有效地支持系統(tǒng)的負(fù)載均衡,如Storm,S4等系統(tǒng)均不支持負(fù)載均衡機(jī)制,Kafka系統(tǒng)實(shí)現(xiàn)了對(duì)負(fù)載均衡機(jī)制的部分支持:一方面,在大數(shù)據(jù)流式計(jì)算環(huán)境中,系統(tǒng)的數(shù)據(jù)速率具有明顯的突變性,并且持續(xù)時(shí)間往往無(wú)法有效預(yù)測(cè),這就導(dǎo)致在傳統(tǒng)環(huán)境中具有很好的理論和實(shí)踐效果的負(fù)載均衡策略在大數(shù)據(jù)流式計(jì)算環(huán)境中將不再適用;另一方面,當(dāng)前大多數(shù)開(kāi)源的大數(shù)據(jù)流式計(jì)算系統(tǒng)在架構(gòu)的設(shè)計(jì)上尚未充分地、全面地考慮整個(gè)系統(tǒng)的負(fù)載均衡問(wèn)題,在實(shí)踐應(yīng)用中,相關(guān)經(jīng)驗(yàn)的積累又相對(duì)缺乏,因此,給大數(shù)據(jù)流式計(jì)算環(huán)境中負(fù)載均衡問(wèn)題的研究帶來(lái)了諸多實(shí)踐中的困難和挑戰(zhàn)。

  大數(shù)據(jù)流式計(jì)算環(huán)境中的負(fù)載均衡問(wèn)題的解決,需要結(jié)合具體的應(yīng)用場(chǎng)景,系統(tǒng)地分析和總結(jié)隱藏在大數(shù)據(jù)流式計(jì)算中的數(shù)據(jù)流變化的基本特征和內(nèi)在規(guī)律,結(jié)合傳統(tǒng)系統(tǒng)負(fù)載均衡的經(jīng)驗(yàn),根據(jù)實(shí)踐檢驗(yàn)情況,不斷進(jìn)行相關(guān)機(jī)制的持續(xù)優(yōu)化和逐步完善。

  4.5數(shù)據(jù)吞吐量在大數(shù)據(jù)流式計(jì)算環(huán)境中,數(shù)據(jù)吞吐量呈現(xiàn)出了根本性的增加。在傳統(tǒng)的流式數(shù)據(jù)環(huán)境中,如CEP,所處理的數(shù)據(jù)吞吐量往往在GB級(jí)別,滿足不了大數(shù)據(jù)流式計(jì)算環(huán)境對(duì)數(shù)據(jù)的吞吐量的要求。在大數(shù)據(jù)流式計(jì)算環(huán)境中,數(shù)據(jù)的吞吐量往往在TB級(jí)別以上,且其增長(zhǎng)的趨勢(shì)是顯著的。然而,當(dāng)前流式數(shù)據(jù)處理系統(tǒng),如Storm,S4等,均無(wú)法滿足TB級(jí)別的應(yīng)用需求。

  大數(shù)據(jù)流式計(jì)算環(huán)境中的數(shù)據(jù)吞吐量問(wèn)題的解決,一方面需要從硬件的角度進(jìn)行系統(tǒng)的優(yōu)化,設(shè)計(jì)出更符合大數(shù)據(jù)流式計(jì)算環(huán)境的硬件產(chǎn)品,在數(shù)據(jù)的計(jì)算能力上實(shí)現(xiàn)大幅提升;另一方面,更為重要的是,從系統(tǒng)架構(gòu)的設(shè)計(jì)中進(jìn)行優(yōu)化和提升,設(shè)計(jì)出更加符合大數(shù)據(jù)流式計(jì)算特征的數(shù)據(jù)計(jì)算邏輯。

  5結(jié)論流式大數(shù)據(jù)作為大數(shù)據(jù)的一種重要形態(tài),在商業(yè)智能、市場(chǎng)營(yíng)銷和公共服務(wù)等諸多領(lǐng)域有著廣泛的應(yīng)用前景,并已在金融銀行業(yè)、互聯(lián)網(wǎng)、物聯(lián)網(wǎng)等場(chǎng)景的應(yīng)用中取得了顯著的成效。但流式大數(shù)據(jù)以其實(shí)時(shí)性、無(wú)序性、無(wú)限性、易失性、突發(fā)性等顯著特征,使得其與傳統(tǒng)批量大數(shù)據(jù)在數(shù)據(jù)計(jì)算的要求、方式等方面有著明顯的不同,也使得當(dāng)前諸多數(shù)據(jù)計(jì)算系統(tǒng)無(wú)法進(jìn)一步更好地適應(yīng)流式大數(shù)據(jù)在系統(tǒng)可伸縮性、容錯(cuò)、狀態(tài)一致性、負(fù)載均衡、數(shù)據(jù)吞吐量等方面所帶來(lái)的諸多新的技術(shù)挑戰(zhàn)。

  本文從大數(shù)據(jù)環(huán)境中流式數(shù)據(jù)的特征切入,以大數(shù)據(jù)流式計(jì)算架構(gòu)的設(shè)計(jì)、優(yōu)化和挑戰(zhàn)為核心,系統(tǒng)地梳理和分析了當(dāng)前大數(shù)據(jù)環(huán)境中的關(guān)于大數(shù)據(jù)流式計(jì)算系統(tǒng)的研究和發(fā)展現(xiàn)狀,從系統(tǒng)架構(gòu)的角度分析了一個(gè)設(shè)計(jì)優(yōu)良的大數(shù)據(jù)流式計(jì)算系統(tǒng)應(yīng)該在系統(tǒng)結(jié)構(gòu)、數(shù)據(jù)傳輸、應(yīng)用接口、高可用技術(shù)等諸多關(guān)鍵技術(shù)上進(jìn)行優(yōu)化。同時(shí),本文詳細(xì)地分析和對(duì)比了當(dāng)前在實(shí)踐中具有很好的應(yīng)用基礎(chǔ)、較為典型的5款大數(shù)據(jù)流式計(jì)算系統(tǒng),并具體闡述了大數(shù)據(jù)流式計(jì)算在系統(tǒng)的可伸縮性、系統(tǒng)容錯(cuò)、狀態(tài)一致性、負(fù)載均衡、數(shù)據(jù)吞吐量等方面所面臨的新的挑戰(zhàn),實(shí)現(xiàn)了對(duì)流式大數(shù)據(jù)環(huán)境中數(shù)據(jù)計(jì)算架構(gòu)、關(guān)鍵問(wèn)題及其技術(shù)挑戰(zhàn)的深入研究。

  可以看出,大數(shù)據(jù)流式計(jì)算的研究和應(yīng)用仍處于很不成熟的階段,這與其廣泛的市場(chǎng)需求和應(yīng)用前景很不吻合。為了促進(jìn)大數(shù)據(jù)流式計(jì)算的成熟、穩(wěn)健發(fā)展,亟待全面、系統(tǒng)、深入地開(kāi)展相關(guān)理論和實(shí)踐的研究工作。

  在未來(lái)的研究工作中,將進(jìn)一步深化對(duì)大數(shù)據(jù)流式計(jì)算架構(gòu)及其關(guān)鍵技術(shù)的研究,并結(jié)合詳細(xì)的應(yīng)用需求,開(kāi)發(fā)、部署、測(cè)試并優(yōu)化面向特定應(yīng)用領(lǐng)域的大數(shù)據(jù)流式計(jì)算系統(tǒng),進(jìn)一步推動(dòng)大數(shù)據(jù)流式計(jì)算理論、方法、技術(shù)與系統(tǒng)的研究與發(fā)展。

作者:佚名  來(lái)源:中國(guó)潤(rùn)滑油網(wǎng)