陳竹筠 常玉紅
摘要:大數據技術之中核心是數據分析,但在真正解決大數據問題之時,大部分工作基本都集中在數據清洗階段,大數據清洗是大數據處理的基礎。Spark作為當前最為流行的一種計算框架,能夠將彈性分布式數據集,封裝成大數據清洗的任務單位,通過組合,實現大數據清洗。文章將對基于Spark的大數據清洗框架設計進行研究和分析,希望能夠對相關人員有所幫助。
關鍵詞:大數據;清洗;框架;Spark
引言
目前,在我國開源內存分布式計算框架應用中最為流行的就是Spark,由于當前我國已經進入大數據時代,基于Hadoop的大數據工具已經無法滿足當前的大數據處理需求,因此很多數據廠商也逐步轉向在Spark上構建自己的內存分布式數據處理系統,從而為更多數據客戶提供技術支持。大數據清洗是大數據分析的基礎,能夠提升數據質量,研究基于Spark的大數據清洗技術,對提升大數據處理質量有重要意義。
1基于Spark的大數據清洗框架介紹
基于Spark的大數據清洗框架核心主要是大數據清洗系統,其大數據操作單元是獨立的Spark任務單元,單元功能從原始數據獲取,直至高質量的清潔數據存入到大數據倉庫,或者繼續進行大數據分析。基于Spark的大數據清洗主要包括提取、轉換、驗證、裝載等步驟,這些步驟各自含有一個或多個大數據清洗單元。
基于Spark的大數據清洗框架具有以下特性:第一,高處理性,該系統以RDD為數據封裝對象,能夠兼容不同的數據源,處理不同數據格式,有效解決了大數據多樣性的問題;第二,高可擴展性和高易用性,該框架是開源的技術人員可以自定義編寫大數據清洗單元,且該框架中大數據清洗任務的數據共享,能夠通過對已有的大數據清洗操作進行組合,完成復雜的大數據清洗任務。此外,通過Web Service接口,利用配置文件組合清洗任務,控制清洗流程。
2基于Spark的大數據清洗設計思路和工作原理
基于Spark的大數據清洗框架設計思路主要是組合大數據清洗任務單元,構建清洗流水線,提交到Spark集群執行。基于Spark的大數據清洗利用Spark的Driver Program與Executor分離設計的特性,在其基礎上進一步改進,無需改動Spark原有架構內容,即實現了Spark的接口擴展,創建出一套更加適合大數據清洗的框架?;赟park的大數據清洗框架包含以下三部分:第一,Spark集群后臺,這一部分是大數據清洗的核心,主要任務是將大數據清洗任務提交給Spark集群運行;第二,一套大數據清洗任務定義接口,任務單元要實現該接口,由大數據清洗系統管理任務單元;第三,流水線配置設計和大數據清洗單元庫,流水線由一系列大數據清洗單元組成,定義真正執行的清洗。
原生的Spark框架下,無法提供框架所需要的調用接口,需要進一步深入分析Spark的架構模式,設計一個大數據清洗系統,能夠將Spark的任務單元提交到集群運行。大數據清洗框架本身應當具有豐富的大數據清洗操作,即滿足不同功能需要的清洗任務單元,在框架下,將其命名為Algorithms庫。該庫的設計,封裝的任務單元功能盡量簡單,便于重用。不同大數據清洗任務單元之間的數據共享有兩種方式,第一種依賴于磁盤存儲,每次完成一個清洗任務就將數據導出到外部磁盤中,可以是HDFS、HBase或者Hive等;第二種則是內存層面,RDD暫存在內存中,可以有效地提升數據處理速度,這種模式目前可以依賴于SparkContext的RDD緩存,或者利用Tachyon的內存文件系統進行管理。此外,作為一個系統平臺,也得有基礎的監控,這些監控設計不僅僅包括Spark,也包括大數據清洗系統本身,有助于運維和查看大數據清洗任務運行結果。同時,在進行基于Spark的大數據清洗設計時還要考慮基于集群的計算服務,考慮集群的計算資源調度以及多個Spark Context運行的機制。
3基于Spark的大數據清洗框架架構設計
基于Spark的大數據清洗框架主要功能目標是提供易于使用的大數據清洗系統,并且擁有高可擴展性,滿足大規模數據的處理需求,所以在設計的底層上依賴于Spark實現?;赟park的大數據清洗框架整體后臺服務系統設計參考Spark-JobServer,圍繞Jar、Context、Job三者建立服務體系,將SparkContext與實際Job內容分離,由Server管理SparkContext(即Context),將提交的Jar包,設計成Algorithms的程序,動態擴展整體平臺的大數據處理功能。其整體架構如圖1所示。
基于Spark的大數據清洗框架按照功能模塊可以細分為五個部分,其中的Spark-ETL Web Client與Job Server就是其Web Service平臺;Algorithms代表擴展的大數據清洗任務單元庫,用戶通過Web Service添加需要的清洗單元,與要執行的算法任務;Spark SQL代表Spark集群。這三部分模塊代表了該框架最基礎部分—清洗平臺Server系統。而Spark-ETL SDK模塊,主要是為了實現Algorithms的單元所需的SDK定的接口,以有效地將任務提交到Job Server上運行;流水線配置設計涵蓋在Algorithms單元內,在實現上,基于Spark的大數據清洗除了使用單流水線模式,也設計了深度優先便利的多叉樹計算流,配置大數據清洗流程。
4大數據清洗單元設計
大數據清洗單元應當按照業務需求與基礎功能兩個層面劃分。業務需求層面指的是需要獲得的數據表,一般有兩個因素,第一個是整體數據需要經過的業務階段數量,第二個是每個階段內,涉及到的數據庫表數量。一個清洗單元內部的設計有起點與終點,以及中間的計算流過程。起點是導入到單元內的數據,可以來源于外部數據導入或者從共享RDD中獲取,另外數據最終會成為一張數據表,計算完時就形成了一張新的數據表,這張表可以在內存中,也可以在數據庫或者文件中。
結束語
總而言之,基于Spark大數據清洗框架,能夠極大降低清洗流程的禍合性,利用已有的清洗單元,靈活地實現復雜的大數據清洗,極大降低了大數據清洗的成本,最關鍵的是,利用Spark將大數據清洗提升到了一個新的性能水平,促進了大數據處理應用技術的發展。
參考文獻:
[1]王沖,鄒瀟.基于Spark框架的電力大數據清洗模型[J].電測與儀表,2017,54(14):33-38.
[2]金翰偉.基于Spark的大數據清洗框架設計與實現[D].浙江大學,2016.
基金項目:山東英才學院科研項目17YCYBXS04;山東省高等學??蒲杏媱濏椖縅16LN55