邊 寧
(淄博市政務服務中心 山東 淄博 255000)
隨著科學技術的不斷發展,網絡中產生了海量的數據。面對海量數據流的影響,如何實現對網絡當中存在的大數據實施高效地分析已經成為了當前學者的研究特點。而大數據的核心問題就是對大數據的分析處理。傳統的大數據處理及分析方法,已經無法有效滿足當前階段對大數據的高效、實時存取和處理等方面的需求。丁鵬程[1]對用戶行為數據分析包含數據采集、數據存儲、利用等多個階段實施分析,但是該方法存在用戶行為數據丟失的漏洞。林星星[2]主要針對Spark在商品個性化推薦這種特殊場景中的應用展開研究,借助混合推薦算法,雖然解決了商品個性化推薦過程中存在的數據稀疏性及實時性等問題,但數據信息的處理效果相對較差,會導致系統的性能下降。上述方法均不能精準地實現大數據分析,因此,為解決上述問題,提出了一種基于Spark的大數據分析系統設計方案。該系統的框架選擇適用性較強的Spark計算框架為主,能夠支持多種類型語言的編程,此外還可以實現對大數據的交互式、批量處理、計算分析。基于Spark的大數據分析系統,以實現對大數據的實時分析。
Spark作為UC Berkeley AMPLab所開發的一款大數據計算框架,它和Hadoop兩者之間既有相似部分,也有不同[3]。不過,Spark和Hadoop兩者都具有分布式優點,能夠實現對大數據的快速集群計算,并且Spark在Hadoop集群上運行,還可以實現對Hadoop當中的數據資源進行實時訪問。Spark支持多種不同文件格式,對數據展開分析和處理,其數據結構主要以RDD(resilient distributed datasets,彈性分布式數據集)為主,且該數據集在完成創建之后無法修改。因此,在大數據分析處理中,Spark能夠適用于機器學習與數據挖掘。此外,spark具有良好的工作負載性能,不僅可以實現交互式查詢,還擁有內存分布式數據集性能,可以對迭代工作負載進行相應的優化。因此,在不同的應用場景當中,spark系統的各個組件具有不同的作用,具體見表1。

表1 Spark的應用場景
首先,從大數據分析系統的設計原則方面進行分析,考慮到后期數據量的增加及隨著業務需求的提升,所使用到的組件也會增加,集群得到擴展,進行基于Spark的大數據分析系統框架設計。其次,結合該系統的功能需求,以及需要考慮的后期項目自身的擴展性,針對大數據分析系統的設計,應當嚴格遵循依賴倒置原則、開放封閉原則、接口隔離原則、單一職責原則、里式替換原則及迪米特法則等設計原則。其中,從依賴倒置原則來看,設計分析系統的上層模塊并不會依賴底層的模塊。從開放封閉原則來看,在進行大數據分析系統設計時,若沒有嚴格遵循此原則時,就會使得項目的后期受需求變化的影響,可能會在原本的代碼上進行修改,以及對部分代碼進行重新編譯、測試以及部署,從而會耗費很大,影響系統的擴展。
首先,Spark的運行需要Scala的支持,在進行Spark安裝之前,需要先完成Scala環境的安裝。然后,通過從官方網站上下載Spark源碼,利用編譯器進行編譯。其次,利用Worker節點的主機名字,通過Spark文件配置寫入到每一臺的虛擬機設備中的Slaves文件當中,當寫入作業完成之后,還需要對Spark安裝目錄當中的文件節點進行修改。并且,還需要集群上的所有節點文件和Slaves文件當中的內容相一致。在完成所有配置作業之后,可以選擇利用Spark on YARN模式開啟Spark集群。集群開啟之后,可以通過瀏覽器進行瀏覽,并對集群的啟動情況進行查詢與測試。此外,由于Spark是由Scala編寫而成,因此針對系統的Spark應用程序的開發語言選擇應當為Scala。這樣一來,在調試時,可以直接在開放環境當中調試,而不需要將作業上傳到集群上進行調試。
2.3.1 系統總體框架設計
Spark計算引擎作為一種擁有通用性優點,能夠實現對大規模海量數據的快速計算與處理。結合官方所給出的數據信息來看,Spark和HadoopMapReduce兩者之間進行對比,Spark的計算引擎運算速度快于后者100倍。同時,Spark自身的運行模式擁有本地運行模式、獨立集群運行等特征[4]。因此,采用Spark為框架構建大數據分析系統,其系統框架主要采用分層設計,分別為數據應用層、服務層、數據計算與存儲層及基礎層4個層次。基于Spark的大數據分析系統框架示意圖,如圖1所示。

圖1 基于spark的大數據分析系統框架示意圖
從數據基礎層方面來看,該層次設計主要包含了系統的底層軟件和硬件。其中底層軟件主要包含了安裝配置在服務器上的操作系統及Java基礎環境等軟件;而系統硬件部分主要包含了服務器和網絡運營商。從服務層方面來看,該層的設計主要提供了工作調度功能、系統管理功能、服務接口功能以及工作管理功能等。其中,服務接口功能主要為服務層向Web提供restful接口,從而讓系統前端能夠獲得管理與工作調度的能力。并且,該層直接會接入到Spark當中。從數據計算與存儲層方面來看,引入了Spark,通過分布式存儲系統所采集的數據信息,利用虛擬技術可以實現對數據信息的統一管理。同時,該層的設計主要包含了HDFS、YARN組件及分布式集群環境Hadoop等。其中,HDFS的應用為大數據分析系統,提供了較高的容錯分布式文件系統。YARN的應用,為分布式資源管理器的分布式集群提供了統一的工作調度以及資源管理。此外,由于Spark在應用過程中采用了Spark on YARN模式實施了部署。因此,其計算工作同樣交由YARN進行統一的調度與管理,且為了解決Map Reduce存在的高計算延遲問題,本文選擇利用Spark作為數據計算工具來解決磁盤開銷較大、高計算延遲等問題。最后,數據應用層的設計主要利用Web端借助服務層向用戶提供各種接口的功能,以此實現對數據和信息的提取,并利用圖表、文字等形式展現給客戶。
2.3.2 系統主要功能模塊設計
基于Spark的大數據分析系統主要包含了數據源、分析檢測模塊、報文預處理模塊及Flume模塊等主要功能構成。主要功能模塊設計框架,如圖2所示。其中,在大數據分析系統當中,Flume模塊作為一種分布式日志聚合模塊,其設計主要作用于對大數據的采集。Spark為計算模塊,HDFS作為Hadoop分布式文件存儲模塊,其主要作用就是負責大數據的存儲。而大數據分析系統當中的數據源,主要指網絡當中或者服務過程中的大數據,如網絡抓包報文、網絡設備所提供的NETFlow數據和系統運行過程中所產生出來的日志文件等。通過利用分布式日志聚合模塊,實現對系統運行過程中所產生的日志文件和相關數據進行實時采集及預處理后,將處理完成的大數據再上傳到對應平臺上。其中,一部分經過處理的大數據會通過平臺直接保存到分布式文件存儲系統當中。而另一部分大數據就會通過Spark對其進行有效處理與分析。因此,在設計大數據分析系統時,一般會采用分布式文件對大數據進行存儲,接著利用架構將大數據均衡到集群的工作節點之上,這樣Spark就能夠實現對本地分塊數據進行讀取和計算,并且整個過程并不需要再計算整個大數據,由此降低了集群節點數據交互傳輸,使得系統對大數據的分析效率得到進一步提高[5]。

圖2 主要功能模塊設計框架
(1)分布式日志聚合模塊
該模塊的設計其功能主要是在接收到數據采集的相關命令之后,對所采集的大數據實施預處理和采集。分布式日志聚合模塊的運行過程十分簡單,并且對日志的收集也沒有限制,其使用的范圍相對廣泛。同時,分布式日志聚合模塊的設計,主要由Source組件、Channel組件及Sink組件這3個組件構成。其中,Source組件的設計實現了對系統原始日志的采集和分析。而Channel組件的設計主要負責為大數據分析系統提供臨時的緩存通道。此外,還起到了對Source組件和Sink組件兩者之間的連接服務,最后將所收集到的日志信息通過Sink組件上傳到每一個模塊之上,以此完成大數據交付。分布式日志聚合模塊還擁有較強的可擴展性與低耦合度,可以支持多級流處理大數據[6]。
(2)分析檢測功能
大數據分析系統當中,分析檢測模塊的設計具有在線獲取可擴展性數據的作用。針對該模塊的設計,主要分為HDFS和Kafka這2個部分組成。其中,從HDFS模塊方面來看,其數據主要為能夠擴展的大數據,通過HDFS當中的大數據可擴展性實現對KAFKA當中的數據進行分類處理,這樣一來就能夠得到具有擴展性的大數據。同時,分析檢測模塊的設計主要由離線訓練模塊SPARK及在線數據檢測2個部分組成。首先,從離線訓練模型方面分析,利用Spark對HDFS當中的大數據進行讀取之后,通過對數據的清洗,提取出關于大數據的特征信息,再根據特征信息進行模型訓練,當完成模型訓練之后,再將其特征輸入到分類模型當中。而在線分析檢測,主要是對從KAFKA當中所獲取的大數據進行重復和離線訓練模型類似的訓練,并采用Spark所輸入的特征模型,實現對數據的檢測分析。在2種模式的作用下,不僅可以促進大數據分析的效率得到提升,還能夠保障大數據檢測的實時性。
大數據分析系統的軟件設計,其中Spark模塊主要選擇采用ALS算法,實現對網絡中大數據的有效排名獲取,并利用Pagerank算法從中網絡當中得到有關大數據的價值排名,最后在根據排名結果推薦的大數據,對專業大數據展開有效分析。
為了進一步驗證基于Spark的大數據分析系統的可行性,需要通過相應的實驗對其進行分析。首先,針對實驗過程中所應用的計算機硬件配置,CPU為32位、內存為128 GB及硬盤為64 TB。其次,針對此次實驗過程中所應用到的實驗數據,本文選擇以某企業網絡系統正常工作狀態下所產生的日志作為本次實驗的主要數據源。接著,利用Flume將該企業系統的某個時間段內的查詢日志全部寫入到HDFS當中,得到了大小為128 GB的數據樣本。此外,實驗開始前,考慮到系統的有效性,本文選擇對系統的性能進行分析,從中得到系統關于系統的運行效果。
針對系統的性能分析,本文主要從系統分析數據的耗時和分析的精度2個方面進行綜合考量。并對比本文系統、列存儲系統等對數據分析的耗時情況,來判斷本系統的可行性。隨著數據樣本數量增加,系統運行時間也會隨著樣本數量的上升而增加,通過對這2個系統進行對比分析來看,本文系統的運行時間相對較短。且在實驗中后期,本文系統分析可擴展性大數據耗時約為150 ms,處于相對穩定的狀態,而其存儲的耗時在不斷上升,當實驗時間在380 ms 時收斂。因此,隨著大數據樣本量的增加,本文系統不僅耗時短,且系統的穩定性較好。同時,本文系統在對具備可拓展性大數據進行分析的過程當中,需要利用訓練模型優化、更新數據集等步驟,才能夠實現對此類大數據的有效分析,再通過多次的迭代之后,本文系統會隨著迭代次數的增加,系統的運行時間卻幾乎沒有變化。由于本文系統采用Spark建立訓練模型,將中間數據緩存結果存儲在自身內存中,經過多次迭代,運行時間變化較小,運行時間較為平穩。
綜上所述,通過對Spark技術和Hadoop技術進行分析,并兼顧2種技術構建了Spark on YARN集群環境,結合設計原則設計實現了基于Spark的大數據分析系統。從計算引擎選擇方面,本文選擇利用Spark計算引擎,以此提高了大數據計算速度,并利用Spark on YARN模式,充分發揮出了Spark自身的優勢。且通過對該系統的測試,結果證明了本文大數據分析系統的可行性,以及可擴展性。