文/姜少彬 伍江江 周正
大數(shù)據(jù)分析處理技術從海量數(shù)據(jù)中發(fā)現(xiàn)隱含的知識。但數(shù)據(jù)獲取的方式、速度、數(shù)據(jù)格式以及人為的誤操作等都會影響數(shù)據(jù)質量,進而給大數(shù)據(jù)分析帶來麻煩。大數(shù)據(jù)處理流程中利用數(shù)據(jù)清洗來解決數(shù)據(jù)質量問題。數(shù)據(jù)清洗通過對數(shù)據(jù)進行重新審查和校驗,刪除重復信息、非法格式文件以及糾正存在的錯誤,并提供數(shù)據(jù)一致性,從而保證數(shù)據(jù)質量,服務大數(shù)據(jù)分析。
遙感衛(wèi)星系統(tǒng)在運行過程中,大量的遙感數(shù)據(jù)7*24小時不間斷下傳,文件系統(tǒng)中存儲了海量的遙感數(shù)據(jù)。由于衛(wèi)星器件問題、傳輸問題和地面人為誤操作等都會造成一些數(shù)據(jù)文件的錯誤。如不及時對非法數(shù)據(jù)文件進行檢測清理,將會影響后續(xù)的數(shù)據(jù)分析處理業(yè)務。由于遙感數(shù)據(jù)體量巨大,且增長速度快,因此需要以更快的速度對數(shù)據(jù)進行檢測,在規(guī)定的時間內完成對數(shù)據(jù)的清洗。
本文設計并實現(xiàn)了一種海量數(shù)據(jù)文件異常并行檢測技術,利用服務器集群對海量數(shù)據(jù)文件進行異常檢測,并在服務器執(zhí)行過程中采用多線程技術,從而實現(xiàn)服務器和線程兩級的并行處理,取得了較高的掃描檢測效率。
通過數(shù)據(jù)分析獲取知識和解決問題是科學研究和工程實踐的重要手段,計算機的出現(xiàn)使數(shù)據(jù)分析計算的效率實現(xiàn)了質的飛躍。隨著科技發(fā)展,科研和工業(yè)上遇到的問題愈加復雜龐大,要分析的數(shù)據(jù)量也在不斷增加,單機的處理速度已經無法滿足要求。1993年,集群技術逐漸得到重視和發(fā)展。集群將若干臺計算機(或工作站、服務器等)通過網絡連接,多機協(xié)同工作實現(xiàn)并行處理,能夠同時具備高性能和高可用性。1997年戰(zhàn)勝國際象棋大師卡斯帕羅夫的“深藍”計算機就是由多臺運行AIX的IBMSP2計算機組成的集群,每秒可以計算2億步。2000年,新墨西哥大學的Los Lobos[1]集群實際上是256臺IBM的Netfinity個人多服務器組成的“超級集群”。它以低成本提供超級計算機水平的功能,每秒鐘的處理可達到3750億次。該速度在當時前500臺超級計算機中排名第24 。
圖1:系統(tǒng)模塊組成圖
圖2:服務器集群結構圖
圖3:基于負載均衡的任務分發(fā)
進入21世紀,現(xiàn)代工業(yè)高速發(fā)展,特別是網絡信息產業(yè)的繁榮,使得數(shù)據(jù)呈現(xiàn)爆炸式的增長。海量數(shù)據(jù)的處理需求催生了大數(shù)據(jù)處理技術。大數(shù)據(jù)處理的基本思想是分治,采用分布式并行計算,將大數(shù)據(jù)問題分解成規(guī)模較小的子問題進行求解,然后合并子問題的解得到最終解[2],在處理速度上取得了質的飛躍。2004年Google 公司提出的 MapReduce[3]是一種專門處理大數(shù)據(jù)的編程模型和實現(xiàn)框架,具有簡單、高效、易伸縮以及高容錯性等特點。MapReduce技術本質是一種并行計算,所以也采用集群作為硬件環(huán)境?;贛apReduce框架的Hadoop大數(shù)據(jù)處理平臺可以利用普通計算機搭建集群,為超大數(shù)據(jù)集提供存儲和處理能力,適合大規(guī)模離線數(shù)據(jù)的批處理。缺點是小文件處理性能較差,且易造成負載不均衡。Spark[4]是輕量的、基于內存計算的開源集群計算平臺。Spark通過完善內存計算和處理優(yōu)化機制加快批處理工作負載的運行速度,批處理速度比MapReduce快10倍,內存中分析速度快100倍。
由于集群在提供高效計算的同時具有較高的性價比,且可以保證計算系統(tǒng)的高可用,并行計算對集群有越來越強的依賴[5],所以本文決定采用集群作為海量數(shù)據(jù)文件異常檢測的硬件平臺,并利用多線程技術實現(xiàn)集群和線程兩級的并行處理。
2.1.1 高效檢測能力
遙感衛(wèi)星系統(tǒng)24小時連續(xù)運行,海量探測數(shù)據(jù)不間斷的下傳,存儲在分布式文件系統(tǒng)中。數(shù)據(jù)文件異常檢測服務需要能夠快速檢測出海量數(shù)據(jù)文件中的非法文件,并及時清除,保證數(shù)據(jù)分析處理業(yè)務對數(shù)據(jù)的訪問。
2.1.2 智能檢測能力
系統(tǒng)應允許用戶選擇文件目錄和檢測時間,設置定時掃描檢測任務,從而實現(xiàn)海量數(shù)據(jù)文件異常檢測的智能化。
2.1.3 系統(tǒng)高可用
星上數(shù)據(jù)持續(xù)下傳,文件系統(tǒng)中不斷有新的文件存入,數(shù)據(jù)文件異常檢測服務勢必也要長時間運行。服務器長期運行下會有一定的故障概率,如何避免服務器宕機造成服務中斷是設計中需要解決的問題。
系統(tǒng)擬采用服務器集群來達到檢測所需的性能,在服務器執(zhí)行掃描檢測任務過程中運用多線程技術實現(xiàn)并行處理進一步提高檢測效率。系統(tǒng)由負載均衡服務器和執(zhí)行服務器集群組成,其主要功能模塊構成如圖1所示。
(1)通過任務配置模塊,實施檢測策略的靈活配置,能夠從文件名、文件格式、文件內容等不同角度對異常文件進行檢測,并可對檢測時間、檢測目錄等信息靈活選擇,從而實現(xiàn)智能化檢測。
表1:任務執(zhí)行時間表
(2)通過運行在負載均衡服務器上的負載均衡模塊將任務劃分后分發(fā)到多臺執(zhí)行服務器上并行執(zhí)行,從而提高檢測效率,并且集群可以根據(jù)需求靈活擴展系統(tǒng)能力。
(3)在執(zhí)行服務器上設計實現(xiàn)服務器資源監(jiān)控調度模塊,監(jiān)視服務器資源動態(tài)使用情況,根據(jù)業(yè)務繁忙程度為檢測服務分配服務器資源,從而在充分利用資源提高檢測效率的同時保證服務器上其他業(yè)務的正常運行。
(4)任務執(zhí)行模塊運行在執(zhí)行服務器上。其中線程管理子模塊負責開設線程池,管理多個線程并行執(zhí)行掃描檢測任務,進一步提高檢測效率;任務隊列管理子模塊負責對任務隊列進行組織管理;線程執(zhí)行模塊中各線程從任務隊列中提取任務進行執(zhí)行。
(5)各服務器任務完成后通過集成在服務器上的消息發(fā)送端將結果發(fā)送至分發(fā)服務器,由分發(fā)服務器直接推送給前端進行顯示。
(6)系統(tǒng)內服務器實施熱備和冗余設計,當某臺服務器宕機后,冗余節(jié)點能夠在短時間內接手任務,保證服務持續(xù)進行,從而實現(xiàn)系統(tǒng)的高可用。
服務器集群在工作過程中,負載均衡模塊運行負載均衡策略完成集群之間任務的快速分發(fā);服務器資源監(jiān)視調度模塊為掃描檢測任務分配一定的系統(tǒng)資源用于執(zhí)行;任務執(zhí)行模塊依托多核處理器為任務進程開設線程池,管理和運行多個線程,實現(xiàn)線程級的并行處理;各服務器檢測結果最終通過消息發(fā)送端發(fā)送至分發(fā)服務器,由分發(fā)服務器推送至前端顯示。
3.1.1 服務器集群構建
系統(tǒng)呈三層結構,主要包括:負載均衡服務器、任務執(zhí)行服務器集群和分布式共享文件系統(tǒng)。如圖2所示。
負載均衡服務器是系統(tǒng)的對外端口。用戶提交的任務請求通過負載均衡服務器分發(fā)給執(zhí)行服務器。執(zhí)行服務器根據(jù)分配的任務從分布式文件系統(tǒng)中提取數(shù)據(jù)進行處理,并將處理結果寫入數(shù)據(jù)庫。
為保證系統(tǒng)的高可用,負載均衡服務器采用主從式雙機熱備,主服務器負責負載均衡和任務分發(fā)。主服務器出現(xiàn)故障停機,從服務器可在短時間內接管服務,保證系統(tǒng)的正常運行。為執(zhí)行服務器設置冗余節(jié)點,當監(jiān)測到一臺執(zhí)行服務器出現(xiàn)故障,系統(tǒng)會啟用冗余節(jié)點接管該服務器的任務繼續(xù)執(zhí)行,保證系統(tǒng)的高可用。各執(zhí)行服務器獨立完成分配的任務,執(zhí)行服務器之間不進行通信,從而降低依賴和耦合,便于集群的擴展。
圖4:檢測結果推送
圖5:海量數(shù)據(jù)文件異常并行檢測執(zhí)行流程圖
圖6:線程池結構圖
3.1.2 基于負載均衡的任務分發(fā)
負載均衡模塊運行基于任務量和服務器負載狀態(tài)的負載均衡策略,防止出現(xiàn)服務器超載或饑餓現(xiàn)象,提高集群資源利用率,最大限度地發(fā)揮集群處理能力。
執(zhí)行服務器serveri資源空閑情況主要指CPU空閑情況,用空閑的核心數(shù)量ci表示。各服務器的空閑資源在所有服務器空閑資源總和中占有的比例稱為空閑資源占比ki:
用戶請求的任務量為M,則根據(jù)空閑資源占比各個執(zhí)行服務器分配到的任務量為mi:
在實際工作中,文件系統(tǒng)將下傳的遙感數(shù)據(jù)按年、月、日、小時劃分目錄進行組織,方便后續(xù)的使用管理。由于遙感衛(wèi)星在每個小時所產生的數(shù)據(jù)量基本相當,所以在實際的均衡策略執(zhí)行時并不需統(tǒng)計目錄下確切的文件數(shù)量,可將小時目錄的數(shù)量近似看做任務量來進行分配?,F(xiàn)用戶請求對目錄DATA下的文件進行檢測,其下有0-23共24個小時目錄。如圖3所示,集群中有5臺服務器,假定當前各服務器均為空載,則通過負載均衡策略將子目錄分配給各執(zhí)行服務器執(zhí)行。
3.1.3 檢測結果推送
如圖4所示,集群中采用TCP 遷移技術,將客戶端與均衡服務器的TCP連接透明地遷移至執(zhí)行服務器上。執(zhí)行服務器執(zhí)行完畢后將結果寫入數(shù)據(jù)庫,不經過負載均衡服務器而是直接向客戶端推送結果信息,既有效減少了客戶端的響應延遲,又大大降低負載均衡服務器的負擔,有助于提高整個系統(tǒng)的性能。
3.2.1 并行檢測流程
掃描檢測任務的執(zhí)行過程如圖5所示。
執(zhí)行服務器上的任務執(zhí)行模塊根據(jù)得到的任務配置信息和分配的系統(tǒng)資源量開辟適當規(guī)模的線程池,管理多個線程并行執(zhí)行掃描檢測任務。
用戶提交任務時通過任務配置模塊和負載均衡模塊將配置信息傳遞給任務執(zhí)行模塊,同時服務器資源監(jiān)視調度模塊監(jiān)測服務器上業(yè)務運行情況,為檢測服務分配系統(tǒng)資源。在業(yè)務空閑狀態(tài)下可以為檢測服務分配盡量多的資源加快掃描檢測速率,在業(yè)務繁忙狀態(tài)下可適當回收部分資源,保證服務器上其他業(yè)務的正常運行。任務執(zhí)行模塊中的線程管理子模塊根據(jù)獲得的任務信息和可分配資源信息開辟包含多個線程的線程池,并行執(zhí)行掃描檢測任務。在線程執(zhí)行過程中,首先從數(shù)據(jù)庫中獲得篩選依據(jù),而后遞歸進入目錄對文件格式、各級目錄以及文件屬性和目錄層級匹配是否規(guī)范進行判斷,并將違規(guī)數(shù)據(jù)寫入數(shù)據(jù)庫。
3.2.2 多線程的實現(xiàn)
線程池結構如圖6所示。
線程池主要由線程、任務隊列和線程管理器組成。其中線程管理器負責調度,避免反復創(chuàng)建和銷毀線程造成不必要的時間開銷,提高資源利用率。
服務器根據(jù)可分配的資源量默認開辟線程數(shù)為n的線程池,為核心線程。任務到達時,按小時目錄劃分為子任務分配給各個線程執(zhí)行。若子任務數(shù)多于n,則線程池增開線程,但總數(shù)不得超過可分配的最大核心數(shù)m;若線程池已滿則將任務放入任務隊列等待執(zhí)行;若任務隊列已滿則拒絕新加入的任務。
4.1.1 硬件環(huán)境
1臺PC終端(作為軟件操作終端),4臺服務器(1臺負載均衡服務器,3臺執(zhí)行服務器)。
服務器配置如下:
CPU:Intel(R) Xeon(R) CPU E5-2650 v3@ 2.30GHz×4
網卡:Intel Corporation 82599ES 萬兆網卡
4.1.2 軟件環(huán)境
集群操作系統(tǒng):Redhat Linux 6.5 64位PC端操作系統(tǒng):Windows 7 64位中文版文件系統(tǒng):華為Oceanstor5500分布式文件系統(tǒng)
實驗按照實際的文件格式在DATA目錄下生成日期子目錄20190103,在20190103目錄下生成12個小時子目錄01-12,每個小時目錄內包含100000條正常數(shù)據(jù)和2000條異常數(shù)據(jù),共計1224000條數(shù)據(jù)。分別采用集群服務器多線程執(zhí)行、單服務器多線程執(zhí)行和集群服務器單線程執(zhí)行對DATA目錄進行多次掃描檢測對比實驗,記錄任務執(zhí)行時間如表1。
從表1中的數(shù)據(jù)可以看出,集群服務器的檢測效率要優(yōu)于單機的檢測效率,多線程的檢測效率要優(yōu)于單線程的檢測效率。分別定義集群多線程、單機多線程和集群單線程的執(zhí)行速率為V1、V2、V3,則有:
實驗中,所有異常數(shù)據(jù)均能被檢測出來,同時沒有正常數(shù)據(jù)被誤檢為異常數(shù)據(jù),檢測準確率為100%。由此得出采用集群和多線程技術對海量數(shù)據(jù)進行掃描檢測,在檢測效率上可以取得顯著提高,是一個可行的方案。
本文通過對海量數(shù)據(jù)處理技術的學習研究以及對實際業(yè)務的具體分析,設計了一種針對海量數(shù)據(jù)文件異常的并行檢測技術,主要采用集群和多線程的技術進行實現(xiàn)。通過在百萬量級的數(shù)據(jù)上進行對比實驗,取得了令人滿意的結果,證明采用集群和多線程技術能夠顯著提高檢測效率。