◆李紅麗
Hadoop與MapReduce應(yīng)用下的大數(shù)據(jù)處理系統(tǒng)設(shè)計(jì)
◆李紅麗
(陽(yáng)泉師范高等??茖W(xué)校 山西 045200)
移動(dòng)互聯(lián)網(wǎng)、云計(jì)算與物聯(lián)網(wǎng)等信息技術(shù)應(yīng)用日益廣泛的大范圍增加了數(shù)據(jù)的產(chǎn)生量,使得整個(gè)社會(huì)正加速步入“大數(shù)據(jù)”時(shí)代。采取何種技術(shù)進(jìn)行大數(shù)據(jù)處理系統(tǒng)的高效構(gòu)建,對(duì)各種類型的數(shù)據(jù)源進(jìn)行集成,讓用戶無(wú)障礙地訪問(wèn)這些數(shù)據(jù),進(jìn)而完成對(duì)大數(shù)據(jù)價(jià)值的充分挖掘,成為業(yè)界與學(xué)者共同關(guān)注的問(wèn)題。
Hadoop;MapReduce;ETL;大數(shù)據(jù)處理系統(tǒng)
近年來(lái),諸多大數(shù)據(jù)處理技術(shù)與框架吸引了人們的高度關(guān)注,其中,以Hadoop開(kāi)源計(jì)算平臺(tái)得到的關(guān)注與應(yīng)用最廣。它是一種具有分布式特點(diǎn)的系統(tǒng)架構(gòu),基于自身所表現(xiàn)出來(lái)的數(shù)據(jù)提取、轉(zhuǎn)換與清洗以及加載(ETL)強(qiáng)大優(yōu)勢(shì)而在大數(shù)據(jù)處理中發(fā)揮重要作用。本文進(jìn)行一種以Hadoop和MapReduce為基礎(chǔ)的大數(shù)據(jù)處理系統(tǒng)的構(gòu)建,該系統(tǒng)可以整合數(shù)據(jù)處理的全部流程,涉及從分布異構(gòu)數(shù)據(jù)源處進(jìn)行各種相關(guān)數(shù)據(jù)的收集、對(duì)信息進(jìn)行清洗以將冗余或是無(wú)用信息剔除、重構(gòu)有用的各項(xiàng)數(shù)據(jù)、對(duì)數(shù)據(jù)進(jìn)行向數(shù)據(jù)倉(cāng)庫(kù)等的加載等一系列任務(wù),以期為今后大數(shù)據(jù)處理工作更加順利與有效的開(kāi)展提供一種可供參考的計(jì)算架構(gòu)。
分析Hadoop平臺(tái)的總體構(gòu)成,主要對(duì)HDFS、MapReduce以及Hive等重要組件予以涉及。
這是一種分布式文件系統(tǒng),在一個(gè)集群網(wǎng)絡(luò)中,通常會(huì)有很多臺(tái)計(jì)算機(jī),而每臺(tái)計(jì)算機(jī)內(nèi)又會(huì)存儲(chǔ)大量不同的數(shù)據(jù),借助該系統(tǒng),可以完成對(duì)這些數(shù)據(jù)的管理任務(wù)。HDFS可在普通商用服務(wù)器節(jié)點(diǎn)上部署,容錯(cuò)性能強(qiáng),可靠性高。為了在極短的時(shí)間內(nèi)實(shí)現(xiàn)對(duì)數(shù)據(jù)的快速訪問(wèn),HDFS對(duì)流式數(shù)據(jù)訪問(wèn)的設(shè)計(jì)理念及其思路予以遵循,對(duì)大數(shù)據(jù)的處理執(zhí)行的為一次寫入與多次讀取模式。
這是一種數(shù)據(jù)模型(主要框架如圖1所示),具有對(duì)數(shù)據(jù)進(jìn)行并行化處理的功能,在多個(gè)計(jì)算節(jié)點(diǎn)上,該數(shù)據(jù)模型可以執(zhí)行對(duì)大規(guī)模計(jì)算分析任務(wù)的分配操作,能夠在較大的程度上為統(tǒng)計(jì)分析任務(wù)效率的提升提供可靠保證。在完成數(shù)據(jù)輸入之后,系統(tǒng)會(huì)對(duì)所輸入的各項(xiàng)數(shù)據(jù)執(zhí)行分片處理操作,對(duì)于各輸入分片,它們都會(huì)進(jìn)行一個(gè)Map任務(wù)的單獨(dú)啟動(dòng),并在此基礎(chǔ)之上生成并得到一些鍵值對(duì),并在本地硬盤中執(zhí)行對(duì)這些鍵值對(duì)的存儲(chǔ)任務(wù)。Map處理之后所得結(jié)果,會(huì)在網(wǎng)絡(luò)傳輸?shù)闹С肿饔孟掠蓪?duì)Reduce任務(wù)予以運(yùn)行的相應(yīng)節(jié)點(diǎn)接收,在此過(guò)程中,Reduce函數(shù)的功能在于對(duì)它們進(jìn)行合并處理,并以此操作為基礎(chǔ)將得到的最終處理結(jié)果在HDFS中存儲(chǔ)下來(lái)。
圖1 MapReduce計(jì)算模型
構(gòu)建于Hadoop上的數(shù)據(jù)倉(cāng)庫(kù)框架,可將HiveQL查詢有效地轉(zhuǎn)換為MapReduce任務(wù),減小HiveQL程序向Hadoop平臺(tái)移植難度。
系統(tǒng)主要包括4個(gè)層次,圖1所示為本文設(shè)計(jì)的系統(tǒng)整體框架。
(1)數(shù)據(jù)采集層。主要利用各類采集設(shè)備,在設(shè)備接口的支持下獲取各種類型的數(shù)據(jù),在這些數(shù)據(jù)中,包括結(jié)構(gòu)化、半結(jié)構(gòu)化以及非結(jié)構(gòu)化多種類型的數(shù)據(jù),同時(shí),還有可能涉及錯(cuò)誤、冗余或者是用處不大的數(shù)據(jù),因此需要先對(duì)這些數(shù)據(jù)執(zhí)行數(shù)據(jù)的清洗任務(wù),為干凈可用數(shù)據(jù)的獲取提供便利,同時(shí),保障數(shù)據(jù)安全存取。
(2)數(shù)據(jù)存取與計(jì)算層。涉及大數(shù)據(jù)倉(cāng)庫(kù)、Hadoop平臺(tái)與ETL計(jì)算框架。數(shù)據(jù)倉(cāng)庫(kù)與Hadoop之間具有互補(bǔ)的關(guān)系,前者中的數(shù)據(jù)能夠在后者中轉(zhuǎn)存,這可實(shí)現(xiàn)對(duì)用戶在多種不同場(chǎng)景下業(yè)務(wù)需求的有效滿足。ETL計(jì)算框架同Hadoop結(jié)合可以執(zhí)行對(duì)數(shù)據(jù)的一系列處理,為后期的數(shù)據(jù)查詢、分析以及挖掘提供強(qiáng)有力的平臺(tái)支持。
(3)數(shù)據(jù)服務(wù)層。以ETL計(jì)算框架與Hadoop平臺(tái)為基礎(chǔ),提供對(duì)數(shù)據(jù)的管理、分析以及挖掘服務(wù)。為了達(dá)到數(shù)據(jù)的共享目的,該層同時(shí)提供統(tǒng)一接口,供平臺(tái)及其他相關(guān)應(yīng)用使用。
(4)數(shù)據(jù)應(yīng)用層?;跀?shù)據(jù)服務(wù)層接口的支持,執(zhí)行預(yù)警預(yù)測(cè)、知識(shí)發(fā)現(xiàn)以及決策支持等多種大數(shù)據(jù)應(yīng)用。
圖1 大數(shù)據(jù)處理系統(tǒng)總體架構(gòu)
第一,考慮到Hadoop HDFS可以分布式存取文件,對(duì)其這一功能加以應(yīng)用,從邏輯層面上整合之前那些物理上相互隔離的各類數(shù)據(jù);第二,遵循事先制定好的業(yè)務(wù)規(guī)則,在Hive組件的支持下,執(zhí)行對(duì)HiveQl腳本的編寫任務(wù),同時(shí),有效地發(fā)揮Hadoop MapReduce所具有的對(duì)數(shù)據(jù)進(jìn)行處理的強(qiáng)大功能,進(jìn)一步執(zhí)行對(duì)HDFS中相關(guān)數(shù)據(jù)的轉(zhuǎn)換與處理操作,最終獲取所需要的Hive數(shù)據(jù)表;第三,為了盡可能地將時(shí)間的消耗降到最低程度,發(fā)揮Sqoop工具的作用,對(duì)Hive表進(jìn)行批量加載,并將其存儲(chǔ)至關(guān)系型數(shù)據(jù)庫(kù)中。
圖2 分布式ETL框架圖
在數(shù)據(jù)抽取模塊中,又可以進(jìn)一步分為兩個(gè)子模塊,分別為數(shù)據(jù)源與數(shù)據(jù)過(guò)濾器。而在這兩個(gè)子模塊中,后者的功能在于執(zhí)行對(duì)數(shù)據(jù)的初步清洗與過(guò)濾任務(wù)。
數(shù)據(jù)轉(zhuǎn)換模塊主要由數(shù)據(jù)轉(zhuǎn)換器(Hive)與數(shù)據(jù)轉(zhuǎn)換引擎(Hadoop)2個(gè)子模塊共同構(gòu)成,其中,前者的功能表現(xiàn)為對(duì)轉(zhuǎn)換規(guī)則進(jìn)行制定,并執(zhí)行對(duì)規(guī)則的輸入任務(wù);后者主要運(yùn)行具體轉(zhuǎn)換規(guī)則并得到最終的結(jié)果,是整個(gè)ETL部件的核心,內(nèi)部工作流程在圖2中已給出。
在關(guān)系型數(shù)據(jù)庫(kù)中,數(shù)據(jù)加載模塊存在的意義表現(xiàn)為可執(zhí)行對(duì)最終結(jié)果表的批量加載任務(wù),而該項(xiàng)操作會(huì)進(jìn)一步在Sqoop的支持下來(lái)完成。
在對(duì)數(shù)據(jù)進(jìn)行抽取、轉(zhuǎn)換以及執(zhí)行對(duì)程序的加載任務(wù)等各個(gè)環(huán)節(jié),ETL程序均會(huì)同Hadoop MapReduce庫(kù)建立起相應(yīng)的鏈接關(guān)系,此過(guò)程會(huì)調(diào)用Map以及Reduce這兩個(gè)最為基本的函數(shù),以此轉(zhuǎn)換HDFS數(shù)據(jù),得到Hive數(shù)據(jù)表。圖3所示為其順序執(zhí)行流程圖。
圖3 基于MapReduce的HDFS數(shù)據(jù)轉(zhuǎn)換流程圖
(1)MapReduce庫(kù)先對(duì)HDFS數(shù)據(jù)進(jìn)行M份劃分(M由用戶定義),每1份為16~64M,之后利用分叉拷貝在集群內(nèi)的其他機(jī)器上進(jìn)行用戶進(jìn)程的拷貝。
(2)在ETL程序副本分配的機(jī)器中,有一個(gè)是Master,負(fù)責(zé)調(diào)度,其他的都是Worker,數(shù)量亦由用戶制定。Master為空閑的Worker分配Map作業(yè)或Reduce作業(yè)。
(3)對(duì)于Worker而言,如果其被分配的是Map作業(yè),則需執(zhí)行對(duì)所對(duì)應(yīng)的分片中輸入數(shù)據(jù)的讀取任務(wù),Map作業(yè)數(shù)量并不是固定的,M會(huì)對(duì)其產(chǎn)生決定性影響,也就是說(shuō),Map作業(yè)同分片之間存在著一一對(duì)應(yīng)的關(guān)系;在所輸入的所有數(shù)據(jù)中,Map作業(yè)會(huì)執(zhí)行相應(yīng)的鍵值對(duì)抽取操作,在此基礎(chǔ)上,會(huì)通過(guò)參數(shù)的形式將所抽取到的鍵值對(duì)傳遞給Map函數(shù),而接下來(lái),Map函數(shù)會(huì)基于接收到的鍵值對(duì)而產(chǎn)生對(duì)應(yīng)的中間鍵值對(duì),這些中間鍵值對(duì)會(huì)在內(nèi)存中被緩存下來(lái)。
(4)當(dāng)有一定數(shù)量的中間鍵值對(duì)被緩存下來(lái)之后,它們會(huì)被寫入到本地磁盤之中,而磁盤又會(huì)進(jìn)一步將它們劃分為R個(gè)區(qū),用戶自行定義R的大小,后期,每個(gè)區(qū)均會(huì)與一個(gè)Reduce作業(yè)相對(duì)應(yīng);另外,寫入本地磁盤的中間鍵值對(duì)位置會(huì)經(jīng)由Master向Reduce Worker轉(zhuǎn)發(fā)。
(5)Mater會(huì)對(duì)Worker被分配到的作業(yè)性質(zhì)進(jìn)行判斷,如果是Reduce作業(yè),這時(shí),Worker會(huì)向Worker下達(dá)相應(yīng)的通知,讓其知曉自身所負(fù)責(zé)的具體區(qū)域所處的位置,當(dāng)Reduce Worker完成自身的初步任務(wù),亦即將由自己負(fù)責(zé)的所有中間鍵值對(duì)讀取完畢以后,會(huì)進(jìn)一步地對(duì)它們進(jìn)行排序處理,將有著相同鍵的鍵值對(duì)集聚起來(lái)。
(6)Reduce Worker遍歷按順序排列之后的中間鍵值對(duì),針對(duì)每一個(gè)唯一的鍵,均向Reduce函數(shù)執(zhí)行鍵及其關(guān)聯(lián)值的傳遞任務(wù),在此過(guò)程中,Reduce函數(shù)會(huì)有相應(yīng)的輸出產(chǎn)生,而這些輸出會(huì)添加到該分區(qū)的輸出文件中。
(7)當(dāng)全部的Map作業(yè)以及Reduce作業(yè)均被完成之后,Master會(huì)進(jìn)一步執(zhí)行對(duì)ETL程序的喚醒操作,在此過(guò)程中,MapReduce函數(shù)又會(huì)調(diào)用向ETL程序返回的相關(guān)代碼。
基于上述所有操作的完成,MapReduce輸出會(huì)放于R個(gè)分區(qū)的輸出文件中,用戶可將它們作為輸入交由另一個(gè)MapReduce程序,最終得到Hive數(shù)據(jù)表。
系統(tǒng)設(shè)計(jì)完成之后,需要對(duì)其可應(yīng)用性進(jìn)行測(cè)試,以確定系統(tǒng)是否具有價(jià)值,對(duì)此,本文圍繞系統(tǒng)的具體應(yīng)用及其在應(yīng)用過(guò)程中表現(xiàn)出來(lái)的相關(guān)性能展開(kāi)具體的測(cè)試工作。
在測(cè)試過(guò)程中,將加速比(單機(jī)完成某一應(yīng)用所耗費(fèi)的時(shí)間同多機(jī)并行完成某一應(yīng)用所耗費(fèi)的時(shí)間的比值)作為指標(biāo)分析系統(tǒng)可應(yīng)用性,也就是測(cè)試系統(tǒng)在對(duì)各種數(shù)據(jù)進(jìn)行處理的過(guò)程中表現(xiàn)出來(lái)的實(shí)際加速比,對(duì)此實(shí)際加速比同理想的加速比進(jìn)行比較分析。具體地,將在實(shí)驗(yàn)室中采集到的訓(xùn)練數(shù)據(jù)作為實(shí)驗(yàn)數(shù)據(jù),根據(jù)測(cè)試結(jié)果進(jìn)行加速比變化曲線的繪制,圖4(a)為隨數(shù)據(jù)變化的加速比變化曲線,(b)為隨計(jì)算節(jié)點(diǎn)變化的加速比變化曲線。
圖4 加速比變化曲線圖
根據(jù)圖4(a),在數(shù)據(jù)集不斷變大的過(guò)程中,加速比呈現(xiàn)出逐漸上升之勢(shì),究其原因,在于系統(tǒng)設(shè)計(jì)最初時(shí)的目的在于對(duì)龐大而又復(fù)雜的數(shù)據(jù)進(jìn)行處理,這一處理通常情況下都以一次性的處理為主。以Hadoop與MapReduce為基礎(chǔ)的大數(shù)據(jù)處理系統(tǒng)在運(yùn)行過(guò)程中無(wú)須執(zhí)行對(duì)數(shù)據(jù)的預(yù)處理操作,同時(shí),也不必將它們寫入數(shù)據(jù)庫(kù),系統(tǒng)直接在平面文件的基礎(chǔ)之上將相應(yīng)的分析工作展開(kāi),最小化分析延遲,因此,數(shù)據(jù)集的增大可在一定程度上提高其處理效率。
根據(jù)圖4(b),在計(jì)算節(jié)點(diǎn)數(shù)量不斷增加的過(guò)程中,加速比的變化趨勢(shì)為先上升,后下降,其原因在于網(wǎng)絡(luò)通信過(guò)程中所需支付的費(fèi)用會(huì)在計(jì)算節(jié)點(diǎn)數(shù)量不斷增加的過(guò)程中而逐漸增加,由于Hadoop MapReduce對(duì)以掃描為基礎(chǔ)的數(shù)據(jù)處理模式以及對(duì)中間結(jié)果不斷物化的執(zhí)行策略予以采用,因此這會(huì)在較大程度上提高I/O代價(jià),同時(shí),增加網(wǎng)絡(luò)傳輸?shù)娜蝿?wù)量,在數(shù)據(jù)集并非特別大的前提條件下,節(jié)點(diǎn)數(shù)量的增加會(huì)對(duì)處理效率產(chǎn)生相應(yīng)的影響。
對(duì)于大數(shù)據(jù)處理系統(tǒng),以往學(xué)者已經(jīng)作了相應(yīng)的研究,設(shè)計(jì)出基于SOA平臺(tái)的大數(shù)據(jù)處理系統(tǒng)以及基于多Agent的大數(shù)據(jù)系統(tǒng)等,為確定本文所設(shè)計(jì)的基于Hadoop MapReduce的大數(shù)據(jù)處理系統(tǒng)的優(yōu)越性,本文從系統(tǒng)交互性、靈活性、擴(kuò)展性、穩(wěn)定性以及有效性5個(gè)方面對(duì)本文系統(tǒng)以及基于SOA平臺(tái)的系統(tǒng)和基于多Agent的系統(tǒng)進(jìn)行對(duì)比分析,得到如表1所示對(duì)比分析結(jié)果。
表1 三種平臺(tái)下的系統(tǒng)性能比較
注:“√”表明系統(tǒng)可滿足此項(xiàng)性能要求,“×”表示不可滿足。
根據(jù)表1,基于SOA方式的系統(tǒng)設(shè)計(jì)以對(duì)緊耦合問(wèn)題的解決為目的,可提高ETL之間的交互性,但未較好地解決擴(kuò)展性與有效性問(wèn)題,故對(duì)于大數(shù)據(jù)來(lái)說(shuō),其效率相對(duì)不高;采用多Agent技術(shù)的系統(tǒng)以對(duì)Agent之間負(fù)載均衡問(wèn)題的解決為目的,但無(wú)法確保各Agent之間的穩(wěn)定性,當(dāng)其中任意1個(gè)Agent出現(xiàn)故障之時(shí),整個(gè)系統(tǒng)均會(huì)面臨癱瘓的風(fēng)險(xiǎn),且無(wú)法有效地對(duì)大數(shù)據(jù)進(jìn)行處理;Hadoop平臺(tái)對(duì)數(shù)據(jù)復(fù)制的方式予以采用,可提升節(jié)點(diǎn)之間訪問(wèn)數(shù)據(jù)的效率,對(duì)數(shù)據(jù)丟失的可能性予以降低,因此基于Hadoop平臺(tái)的大數(shù)據(jù)處理系統(tǒng)具有很好的穩(wěn)定性、擴(kuò)展性與有效性,適用性很高。
文章進(jìn)行了一種基于Hadoop與MapReduce的大數(shù)據(jù)處理系統(tǒng)的設(shè)計(jì),給出其框架設(shè)計(jì)方案,并對(duì)各模塊的功能進(jìn)行了介紹,同時(shí),針對(duì)其最為核心的部分,分析了基于MapReduce計(jì)算模型的HDFS數(shù)據(jù)轉(zhuǎn)換實(shí)現(xiàn)。系統(tǒng)可對(duì)分布于不同主機(jī)上的數(shù)據(jù)執(zhí)行簡(jiǎn)單且高效的數(shù)據(jù)抽取、轉(zhuǎn)換與加載操作,實(shí)驗(yàn)顯示,系統(tǒng)可靠性、可擴(kuò)展性、負(fù)載平衡性能良好,執(zhí)行效率高,且在對(duì)海量數(shù)據(jù)的處理中表現(xiàn)出了優(yōu)于采用SOA方式與采用多Agent方式的系統(tǒng)性能。
[1]楊杉,蘇飛,程新洲,等.面向運(yùn)營(yíng)商大數(shù)據(jù)的分布式ETL研究與設(shè)計(jì)[J].郵電設(shè)計(jì)技術(shù),2016(8):47-52.
[2]崔蔚,周力,吳凱峰,等.基于Hadoop平臺(tái)的并行線損分析系統(tǒng)研究與實(shí)現(xiàn)[J].電力信息與通信技術(shù),2014,12(2):60-63.
[3]王艷,蔣義然,劉永立.基于Hadoop的大數(shù)據(jù)處理技術(shù)及發(fā)展[J].信息記錄材料,2020,21(11):146-147.