張菁楠
(天津輕工職業(yè)技術(shù)學(xué)院,天津 300000)
大數(shù)據(jù)是目前學(xué)術(shù)和企業(yè)重點(diǎn)關(guān)注的問(wèn)題,是指利用收集到的復(fù)雜數(shù)據(jù)信息從而創(chuàng)造出較為顯著的商業(yè)價(jià)值,充分的挖掘信息的潛在價(jià)值。一般來(lái)說(shuō),在大數(shù)據(jù)處理的過(guò)程中主要包含四個(gè)環(huán)節(jié),數(shù)據(jù)采集--數(shù)據(jù)清洗--數(shù)據(jù)儲(chǔ)存--數(shù)據(jù)分析。數(shù)據(jù)清洗在大數(shù)據(jù)處理中起著非常關(guān)鍵的作用,隨著信息時(shí)代的到來(lái),大量信息和海量數(shù)據(jù)引起了人們廣泛的關(guān)注,也由此加強(qiáng)了對(duì)數(shù)據(jù)清洗的深度研究和分析。傳統(tǒng)的數(shù)據(jù)清洗方法已經(jīng)難以適應(yīng)現(xiàn)代數(shù)據(jù)技術(shù)的發(fā)展,由此文章提出基于Spark的大數(shù)據(jù)清洗框架,通過(guò)組合和串聯(lián)的方式來(lái)完成數(shù)據(jù)清洗的過(guò)程,并實(shí)現(xiàn)數(shù)據(jù)清洗的優(yōu)化。
Spark——ETL技術(shù)框架的核心是為了解決大數(shù)據(jù)清洗問(wèn)題。即大數(shù)據(jù)清洗系統(tǒng)內(nèi)包含多個(gè)大數(shù)據(jù)清洗操作單元,在數(shù)據(jù)清洗的過(guò)程中通過(guò)不同清洗單元的組合形成一套完成的清洗流水線(xiàn),從而開(kāi)展清洗工作。在Spark--ETL系統(tǒng)中清洗單元具有一定的獨(dú)立性,通過(guò)RDD的作用促進(jìn)單元之間的聯(lián)系,實(shí)現(xiàn)數(shù)據(jù)信息的共享和傳遞,而單元的主要作用體現(xiàn)在原始數(shù)據(jù)從獲取到清潔直至存入大數(shù)據(jù)庫(kù)的過(guò)程。在大數(shù)據(jù)清洗流水線(xiàn)運(yùn)行的過(guò)程中也包含多個(gè)步驟,如提取、轉(zhuǎn)化等等,在這些步驟當(dāng)中包含以上或以上的大數(shù)據(jù)清晰操作單元。
Spark-ETL技術(shù)框架具有以下幾個(gè)方面的特征:
第一,高性能處理。Spark-ETL技術(shù)框架是以RDD為數(shù)據(jù)封裝對(duì)象,利用Spark的分布式計(jì)算能力實(shí)現(xiàn)數(shù)據(jù)清晰的系統(tǒng),其性能較為高效。
第二,面對(duì)不同數(shù)據(jù)源和數(shù)據(jù)格式能夠做到兼容處理,有效的解決了數(shù)據(jù)的多樣性問(wèn)題。
第三,具有較高的易用性和可擴(kuò)展性,實(shí)現(xiàn)了不同數(shù)據(jù)單元的數(shù)據(jù)分享和傳遞,便于完成較為復(fù)雜的清洗任務(wù)。
Spark-ETL框架的主要思路是利用清洗任務(wù)單元的組合形成較為完整的流水線(xiàn)進(jìn)而完成數(shù)據(jù)的清洗工作。在Spark-ETL系統(tǒng)中具備Driver Program和Executor分離設(shè)計(jì)特性,相對(duì)于傳統(tǒng)的方式來(lái)說(shuō),Spark-ETL在保持原有構(gòu)架的基礎(chǔ)上促進(jìn)了Spark接口的擴(kuò)展,從而更加的適合大數(shù)據(jù)的清晰。此外與原生框架進(jìn)行對(duì)比,Spark-ETL實(shí)現(xiàn)了工作方式的轉(zhuǎn)變,在大數(shù)據(jù)清洗的過(guò)程中改變了傳統(tǒng)的清洗方式,通過(guò)串聯(lián)和組合的方式完成了大數(shù)據(jù)的清洗,在實(shí)際操作的過(guò)程中并不需要較為復(fù)雜的代碼編程,對(duì)相關(guān)技術(shù)人員的Spark編程能力也沒(méi)有較高的要求,就能夠完成大數(shù)據(jù)的清洗工作。除此之外是清洗流水線(xiàn)的設(shè)計(jì),和普通的單線(xiàn)流水線(xiàn)進(jìn)行對(duì)比,增加了多叉樹(shù)數(shù)據(jù)結(jié)構(gòu)定義計(jì)算流,不僅能夠滿(mǎn)足Spark的內(nèi)部計(jì)算模式要求,并且通過(guò)對(duì)計(jì)算過(guò)程中分支節(jié)點(diǎn)數(shù)據(jù)的緩存,還能夠有效的提升計(jì)算效率,為大數(shù)據(jù)清洗的優(yōu)化打下了堅(jiān)實(shí)的基礎(chǔ)。
在Spark集群上Spark Application屬于獨(dú)立運(yùn)行,每個(gè)Application都是相對(duì)獨(dú)立的,有屬于自己的Spark Context,彼此之間相互不影響,此外擁有Spark Context對(duì)象的程序也可以被稱(chēng)之為Driver。
Spark集群有兩個(gè)部分組成,分別是Cluster Manager與Worker。在實(shí)際運(yùn)行的過(guò)程中也有兩種模式,分別是Client與Cluster。Client模式是指在集群外部進(jìn)行運(yùn)行的Driver程序;Cluster模式與Client模式剛好相反,在其運(yùn)行的過(guò)程中是在集群內(nèi)部,由某個(gè)Worker啟動(dòng)的Driver程序,在運(yùn)行的過(guò)程中可以將結(jié)果在Web UI上進(jìn)行顯示,或者是向某個(gè)接受者進(jìn)行發(fā)送。在大數(shù)據(jù)清洗的過(guò)程中,更加側(cè)重于將Driver程序運(yùn)行在集群外部自行管理,即Client模式,實(shí)際整個(gè)集群的模塊架構(gòu)如圖1所示。
圖1 Spark集群架構(gòu)圖
目前,在大數(shù)據(jù)清洗的過(guò)程中多數(shù)的Hadoop-ETL都逐漸轉(zhuǎn)向Spark-ETL,其根本原因在于基于Spark的大數(shù)據(jù)清洗其效率更高,可擴(kuò)展性更強(qiáng),并且在實(shí)際操作的過(guò)程中較為簡(jiǎn)捷。Spark SQL在Spark屬于獨(dú)立的一個(gè)模塊,其作用是處理結(jié)構(gòu)化數(shù)據(jù),為Spark-ETL系統(tǒng)提供了分布式查詢(xún)引擎和較為抽象的數(shù)據(jù)結(jié)構(gòu)。除此之外在Spark SQL模塊中其數(shù)據(jù)接口也較為豐富,針對(duì)不同的數(shù)據(jù)來(lái)源和數(shù)據(jù)格式都能夠做好兼容和有效處理。另外基于Spark的大數(shù)據(jù)清洗還包含Spark Streaming,其為實(shí)時(shí)流數(shù)據(jù)處理接口提供了較高的可靠性設(shè)計(jì)。
在Spark-ETL框架中其核心目標(biāo)是提供大數(shù)據(jù)ETL系統(tǒng)充分的滿(mǎn)足大規(guī)模數(shù)據(jù)處理的需求。因此在Spark-ETL進(jìn)行框架設(shè)計(jì)的時(shí)候其設(shè)計(jì)底層是以Spark為基礎(chǔ),其設(shè)計(jì)思路為用戶(hù)通過(guò)實(shí)際操作的過(guò)程配合平臺(tái)在Spark集群內(nèi)完成數(shù)據(jù)的清洗工作。Spark-ETL后臺(tái)服務(wù)系統(tǒng)是以Jar、Context、Job為核心,將Spark Context與實(shí)際的Job內(nèi)容分離,由Server直接管理Spark Context,將提高Jar包,設(shè)計(jì)成Algorithms的程序,動(dòng)態(tài)擴(kuò)展到整體平臺(tái)的大數(shù)據(jù)處理功能[1]。Spark-ETL框架如圖2所示,共分為五部分,分別是Spark-ETL Web Client、Spark-ETL Job Server、Algorithms、Spark SQL、Spark ETL SDK。其中Spark-ETL Web Client與Spark-ETL Job Server屬于Web Service平臺(tái),Algorithms代表了擴(kuò)展的大數(shù)據(jù)清洗任務(wù)單元庫(kù),通過(guò)Web Service平臺(tái)添加需要的清洗單元,并執(zhí)行算法任務(wù)。Spark SQL則代表了Spark集群,此處用Spark SQL進(jìn)行標(biāo)識(shí)其目的是為了大數(shù)據(jù)在清洗處理的過(guò)程中主要是依賴(lài)于Spark SQL進(jìn)行完成,進(jìn)行Spark SQL的標(biāo)識(shí)能夠更加的明確,但是在實(shí)際過(guò)程中Spark SQL所代表的是整個(gè)后臺(tái)計(jì)算服務(wù)的集群。Spark SQL、Spark-ETL Web Client、Spark-ETL Job Server所代表的是Spark-ETL中最為基礎(chǔ)的部分-清洗平臺(tái)Server系統(tǒng)。Spark ETL SDK模塊在實(shí)際運(yùn)行中需要借助Algorithms模塊通過(guò)SDK接口在Job Server模塊完成提交。最后流水線(xiàn)配置設(shè)計(jì)涵蓋在Algorithms單元內(nèi)[2]。
圖2 Spark ETL模塊架構(gòu)圖
Spark-ETL Server可以將其分為三部分。Web Client為前端界面,一方面根據(jù)后臺(tái)的服務(wù)來(lái)滿(mǎn)足設(shè)計(jì)的需求,另一方面通過(guò)運(yùn)行完善后臺(tái)服務(wù)。在Job Server設(shè)計(jì)的過(guò)程其結(jié)構(gòu)模式參考了Spark-ETL Server的結(jié)構(gòu)設(shè)計(jì)理念,以Jar、Context、Job為核心完成架構(gòu)的設(shè)計(jì)。與此同時(shí)Spark SQL模塊在Context中實(shí)現(xiàn)與Job Server的連接,Spark SQL模塊屬于Spark集群,Spark是由Spark Context將Job分布到各個(gè)計(jì)算節(jié)點(diǎn)完成運(yùn)算處理[3]。
Spark-ETL SDK連 接 了Spark-ETL Job Server與Algorithms兩個(gè)模塊,將Spark Context由Job Server傳入到Algorithm程序內(nèi),使其完成Spark Application。在實(shí)際操作的過(guò)程中無(wú)需對(duì)原有的平臺(tái)架構(gòu)進(jìn)行改變,并在此基礎(chǔ)上提高了便捷性,增強(qiáng)了拓展性[4]。
在Spark-ETL SDK設(shè)計(jì)的過(guò)程中可以將其分為兩部分組成。一是Spark Job的接口定義,將清洗單元與Job Server有效的連接在一起;二是連通Spark Job,利用RDD實(shí)現(xiàn)了不同清洗單元的連接,促進(jìn)了數(shù)據(jù)的分享[5]。
3.3.1 Spark-ETL Spark Job接口
圖3為SDK Spark Job接口設(shè)計(jì)圖,SDK Spark Job運(yùn)行的主要目的是能夠支持不同類(lèi)型的Context,以Spark JobBase特質(zhì)為基類(lèi),其他的特質(zhì)定義繼承Spark JobBase并且定義其中的類(lèi)型C,一般為Spark Context或者是SQL Context。
圖3 SDK接口關(guān)系圖
3.3.2 Spark-ETL Share RDD接口
RDD數(shù)據(jù)共享是指在不同的Spark Job之間可以共享RDD數(shù)據(jù),上一個(gè)運(yùn)行的Job結(jié)果可以作為下一個(gè)Job繼續(xù)使用,使得數(shù)據(jù)處理工具之間能夠協(xié)作完成任務(wù)[6]。在之前的設(shè)計(jì)當(dāng)中,Spark Job繼承了Spark Job的特質(zhì),而在本文中提出了一種個(gè)更為簡(jiǎn)單的共享RDD的設(shè)計(jì)方法-依賴(lài)Context管理的方法,整體的結(jié)構(gòu)設(shè)計(jì)方式如下:
圖4 RDD數(shù)據(jù)共享設(shè)計(jì)類(lèi)圖
總的來(lái)說(shuō),在信息技術(shù)快速發(fā)展的背景下,Spark的產(chǎn)品也會(huì)越來(lái)越高,Spark-ETL系統(tǒng)框架的設(shè)計(jì)通過(guò)清洗單元的組合形成大數(shù)據(jù)流水線(xiàn)從而完成數(shù)據(jù)的清洗,促使數(shù)據(jù)清洗工作變得更加高效,在未來(lái)的發(fā)展中將不斷完善Spark-ETL系統(tǒng)框架,為大數(shù)據(jù)技術(shù)的發(fā)展做出了卓越貢獻(xiàn)。