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