文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2015.07.039
中文引用格式: 劉有耀,李彬. 基于Hadoop的測(cè)試數(shù)據(jù)處理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2015,41(7):140-143.
英文引用格式: Liu Youyao,Li Bin. The design and implementation of test data processing system based on Hadoop[J].Application of Electronic Technique,2015,41(7):140-143
0 引言
在半導(dǎo)體業(yè)日漸成熟的今天,半導(dǎo)體測(cè)試已逐漸成為整條產(chǎn)業(yè)鏈中必不可少的重要環(huán)節(jié)。與此同時(shí),計(jì)算機(jī)科學(xué)與技術(shù)的不斷發(fā)展同樣為半導(dǎo)體測(cè)試提供了全方位的支持。集成電路規(guī)模的不斷增大,使得所要測(cè)試的項(xiàng)目隨之增多,同時(shí),測(cè)試數(shù)據(jù)量也在不斷增加。如何對(duì)海量的測(cè)試數(shù)據(jù)進(jìn)行有效的存儲(chǔ)以及處理成為集成電路測(cè)試數(shù)據(jù)研究領(lǐng)域里的熱門問題。
本文首先介紹了現(xiàn)階段主流的大數(shù)據(jù)解決方案Hadoop的相關(guān)技術(shù),詳細(xì)研究Hadoop相關(guān)組件的功能和架構(gòu)。在此基礎(chǔ)上,設(shè)計(jì)并且實(shí)現(xiàn)了基于Hadoop的測(cè)試數(shù)據(jù)分布式處理系統(tǒng)。最后搭建實(shí)際的測(cè)試環(huán)境,對(duì)整個(gè)系統(tǒng)進(jìn)行測(cè)試,驗(yàn)證了平臺(tái)的有效性和穩(wěn)定性,并對(duì)結(jié)果進(jìn)行了分析。
1 分布式系統(tǒng)相關(guān)技術(shù)研究
1.1 Hadoop
Hadoop[1]的整體構(gòu)架如圖1所示,圖中每個(gè)最底層的長方形代表一臺(tái)物理服務(wù)器,每臺(tái)物理服務(wù)器或稱物理節(jié)點(diǎn),通過網(wǎng)線連接到交換機(jī),交換機(jī)再連接到中心交換機(jī),客戶端通過互聯(lián)網(wǎng)來訪問。NameNode(名稱節(jié)點(diǎn))[2]、Secondary NameNode(輔助名稱節(jié)點(diǎn))[3]、DataNode(數(shù)據(jù)節(jié)點(diǎn))組成了Hadoop內(nèi)整個(gè)分布式文件系統(tǒng)的體系。
1.2 HDFS
HDFS[4]的分布式文件系統(tǒng)架構(gòu)如圖2所示。其中,NameNode的工作是管理文件系統(tǒng)的命名空間,它是整個(gè)系統(tǒng)的總控節(jié)點(diǎn),會(huì)記錄每個(gè)文件的數(shù)據(jù)塊在各個(gè)DataNode里的位置以及副本的信息,除此之外,它還需要記錄每個(gè)文件具體所在的集群節(jié)點(diǎn)。另外,NameNode還要協(xié)調(diào)客戶端對(duì)文件的訪問,當(dāng)有節(jié)點(diǎn)需要訪問某個(gè)文件時(shí),它會(huì)先去訪問NameNode來獲取此文件的位置信息,獲取信息后,它就可以與DataNode直接通信,來獲取數(shù)據(jù)塊[5]。
在HDFS中,另外一種節(jié)點(diǎn)的角色是DataNode,主要是用來管理所在的物理節(jié)點(diǎn)。DataNode的讀寫方式一般是文件一次性寫入,不能修改,可以刪除,并且可以多次讀取。由于其有此特性,就不需要考慮一致性。在DataNode中,文件是由數(shù)據(jù)塊組成,從Linux的角度來看,每個(gè)數(shù)據(jù)塊就是一個(gè)Block文件,一般缺省的數(shù)據(jù)塊最大可以達(dá)到64 MB。在調(diào)度時(shí),Hadoop系統(tǒng)會(huì)盡量讓數(shù)據(jù)塊散布在集群里的各個(gè)節(jié)點(diǎn)中,來實(shí)現(xiàn)冗余的效果。
1.3 MapReduce
MapReduce的主要思想是“分而治之”[6-7]。這個(gè)思想在MapReduce模型中被反映得淋漓盡致,其中,mapper用來做“分”的工作,把一個(gè)很龐大的工作任務(wù),在數(shù)據(jù)上分配到每個(gè)節(jié)點(diǎn)上,然后在程序計(jì)算上進(jìn)行分割,mapper一般會(huì)跟它處理的數(shù)據(jù)被存放在同一個(gè)節(jié)點(diǎn)中,而不需要網(wǎng)絡(luò)再傳輸數(shù)據(jù),這樣可以減少很多在網(wǎng)絡(luò)中I/O的時(shí)間;reducer的任務(wù)是對(duì)map進(jìn)程中的處理結(jié)果進(jìn)行集中。MapReduce工作原理如圖3所示。
2 測(cè)試數(shù)據(jù)處理系統(tǒng)設(shè)計(jì)
本文所研究的測(cè)試數(shù)據(jù)是基于泰瑞達(dá)公司的J750自動(dòng)測(cè)試機(jī),通過對(duì)集成電路測(cè)試得到標(biāo)準(zhǔn)測(cè)試數(shù)據(jù)格式文件(Standard Test Data Format,STDF)[8]。STDF是一種由泰瑞達(dá)公司開發(fā)的通過自動(dòng)測(cè)試機(jī)來收集測(cè)試數(shù)據(jù)的文件格式,它具有簡(jiǎn)單、靈活、便捷的特點(diǎn),為了最小化地占用存儲(chǔ)空間,它被設(shè)計(jì)為二進(jìn)制文件格式,由于很容易被快速且穩(wěn)定地進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換,因此逐漸被很多自動(dòng)測(cè)試機(jī)供應(yīng)商所接受。
隨著芯片制造工廠的不斷涌現(xiàn)及自動(dòng)測(cè)試機(jī)數(shù)量的不斷增加,產(chǎn)生的測(cè)試數(shù)據(jù)量將是海量的。因此,對(duì)測(cè)試數(shù)據(jù)處理時(shí)產(chǎn)生的時(shí)間損耗及運(yùn)算資源的需求量會(huì)不斷增大。
本文基于MapReduce設(shè)計(jì)并實(shí)現(xiàn)一個(gè)測(cè)試數(shù)據(jù)分布式處理系統(tǒng),該系統(tǒng)通過對(duì)可擴(kuò)展運(yùn)算資源的集中使用,達(dá)到高處理性能。此系統(tǒng)實(shí)現(xiàn)了測(cè)試數(shù)據(jù)的分布式存儲(chǔ),同時(shí)使用了基于MapReduce的程序?qū)崿F(xiàn)了分布式的格式轉(zhuǎn)換功能,將STDF格式文件轉(zhuǎn)換為CSV格式文件,系統(tǒng)顯著提高了格式轉(zhuǎn)換的性能。
系統(tǒng)總體架構(gòu)圖如圖4所示。系統(tǒng)主要由測(cè)試數(shù)據(jù)的分布式存儲(chǔ)與分布式格式轉(zhuǎn)換兩個(gè)部分組成。系統(tǒng)使用HDFS作為分布式并行處理的存儲(chǔ)平臺(tái),從FTP收集到的海量測(cè)試數(shù)據(jù)會(huì)被自動(dòng)分布到HDFS的數(shù)據(jù)節(jié)點(diǎn)中,然后,系統(tǒng)會(huì)利用Hadoop MapReduce對(duì)數(shù)據(jù)進(jìn)行分布式并行處理。
系統(tǒng)執(zhí)行的具體步驟如下:
(1)數(shù)據(jù)采集。ATE收集的測(cè)試數(shù)據(jù)存儲(chǔ)在本地硬盤上,系統(tǒng)將會(huì)采集FTP上的所有STDF文件,并通過DFSClient程序?qū)⑽募蟼鞯紿DFS中,實(shí)現(xiàn)測(cè)試數(shù)據(jù)的分布式存儲(chǔ)。
(2)數(shù)據(jù)處理。系統(tǒng)將HDFS中的數(shù)據(jù)傳遞給Map-Reduce框架,實(shí)現(xiàn)數(shù)據(jù)的分布式處理。這是本系統(tǒng)的主要工作。
(3)數(shù)據(jù)返回。格式轉(zhuǎn)換完成后,數(shù)據(jù)將自動(dòng)上傳到HDFS中。
步驟(2)中的數(shù)據(jù)格式轉(zhuǎn)換為本系統(tǒng)的主要工作部分。首先,通過程序?qū)y(cè)試數(shù)據(jù)文件的目錄路徑作為MapReduce程序的輸入,傳遞給MapReduce框架,也就是將HDFS中的測(cè)試數(shù)據(jù)分發(fā)到集群中的各個(gè)節(jié)點(diǎn);然后,系統(tǒng)將會(huì)利用Hadoop提供給MapReduce框架的文件緩存工具DistributedCache,在運(yùn)行任務(wù)之前,該軟件將會(huì)自動(dòng)被分發(fā)到每臺(tái)機(jī)器上的某個(gè)目錄中,這樣就無需預(yù)先在各個(gè)節(jié)點(diǎn)上放置格式轉(zhuǎn)換軟件,減少了工作量的同時(shí)提高了工作效率;最后,在map()函數(shù)中調(diào)用第三方軟件“StdfToCsv.exe”進(jìn)行格式轉(zhuǎn)換。由于考慮到數(shù)據(jù)實(shí)際并不需要在reduce階段進(jìn)行合并處理過程,因此,系統(tǒng)僅實(shí)現(xiàn)map階段,這樣不僅能夠避免在reduce階段對(duì)數(shù)據(jù)進(jìn)行合并,而且提升了系統(tǒng)的工作效率。
3 測(cè)試數(shù)據(jù)處理系統(tǒng)實(shí)現(xiàn)
3.1 測(cè)試數(shù)據(jù)在HDFS上的存儲(chǔ)實(shí)現(xiàn)
測(cè)試數(shù)據(jù)文件將已“測(cè)試時(shí)間_LotID_WaferID”的格式進(jìn)行命名,DFS Client把測(cè)試數(shù)據(jù)上傳到HDFS中。
圖5為DFS Client將STDF文件上傳到HDFS的流程圖。首先,打開本地文件的輸入流與HDFS的輸出流;然后,將STDF文件全部上傳的HDFS中,直到所有數(shù)據(jù)上傳完畢;最后,關(guān)閉輸入、輸出流。為了實(shí)現(xiàn)測(cè)試數(shù)據(jù)實(shí)時(shí)上傳到HDFS中,需要采用定時(shí)刷新檢測(cè)機(jī)制,將測(cè)試數(shù)據(jù)定時(shí)上傳到HDFS中。
3.2 測(cè)試數(shù)據(jù)格式轉(zhuǎn)換實(shí)現(xiàn)
應(yīng)用程序在JobConf中通過url(hdfs://)指定需要被緩存的文件,即“StdfToCsv.exe”文件。此時(shí)該文件已經(jīng)被存放在HDFS上。MapReduce會(huì)在任務(wù)開始之前,將該文件分發(fā)到Slave節(jié)點(diǎn)上,而且僅會(huì)為沒有該文件的Slave節(jié)點(diǎn)緩存文件,這樣可以節(jié)約網(wǎng)絡(luò)帶寬,提高系統(tǒng)的運(yùn)行效率。測(cè)試數(shù)據(jù)格式轉(zhuǎn)換實(shí)現(xiàn)過程如下:
(1)數(shù)據(jù)格式轉(zhuǎn)換模塊使用InputFormat類中的Record-Reader方法從HDFS中讀取STDF文件。在該系統(tǒng)中,InputFormat主要承擔(dān)兩項(xiàng)工作,第一是預(yù)先向MapReduce框架提供map任務(wù)的數(shù)量信息,從而使MapReduce框架預(yù)先安排所有的map任務(wù);第二是讀取從原始測(cè)試數(shù)據(jù)集傳遞到map類中map()函數(shù)的記錄,這個(gè)函數(shù)通過RecordReader來執(zhí)行,RecordReader是由FileInputFormat提供,用來讀取原始文件,并將它傳遞給map()。
(2)InputFormat將Key-Value對(duì)傳遞給mapper。mapper將會(huì)使用格式轉(zhuǎn)換軟件以完全分布式方式將STDF文件轉(zhuǎn)換為CSV文件,在mapper完成測(cè)試數(shù)據(jù)的格式轉(zhuǎn)換后,將結(jié)果傳遞給OutputFormat作為Key(文件名)和Value(文件內(nèi)容)。
(3)mapper將Key-Value對(duì)傳遞給OutputFormat。也就是說,OutputFormat會(huì)將Key-Value對(duì)重新生成一個(gè)HDFS中的文件。
本文設(shè)計(jì)了一個(gè)StdfInputFormat類來讀取STDF文件,另外還設(shè)計(jì)了StdfRecordReader類從StdfInputFormat讀出數(shù)據(jù)并且傳遞給mapper函數(shù)。
MapReduce的輸入是存儲(chǔ)在HDFS中的STDF文件,一個(gè)STDF文件作為一個(gè)單獨(dú)的map輸入,也就是說,每個(gè)STDF文件為一個(gè)單獨(dú)的邏輯分割,不需要再進(jìn)行分割,即保證了每個(gè)STDF文件的獨(dú)立性與完整性。要實(shí)現(xiàn)此設(shè)計(jì),只需重寫FileInputFormat子類中的isSplitable()方法,將返回值設(shè)為False,就可以達(dá)到將每個(gè)STDF文件作為一個(gè)邏輯分割的目的。
當(dāng)數(shù)據(jù)從HDFS被傳遞到mapper函數(shù)時(shí),由數(shù)據(jù)文件名和數(shù)據(jù)內(nèi)容作為Key-Value對(duì)。在整個(gè)MapReduce程序中,通過繼承mapper這個(gè)類來實(shí)現(xiàn)map,本文重寫map()方法,使得map()每次接收一個(gè)Key-Value對(duì),然后系統(tǒng)就對(duì)這個(gè)Key-Value對(duì)進(jìn)行處理,再分發(fā)出處理后的數(shù)據(jù)。
mapper有setup()、map()、cleanup()和run()四個(gè)方法,其中setup()一般是用來進(jìn)行一些map()前的準(zhǔn)備工作,map()則一般承擔(dān)主要的處理工作,cleanup()則負(fù)責(zé)收尾工作,如關(guān)閉文件或者執(zhí)行map()后的Key-Value分發(fā)等。在本系統(tǒng)中,setup()方法用來執(zhí)行DistributedCache,將第三方軟件分發(fā)到各個(gè)節(jié)點(diǎn)后,執(zhí)行軟件,對(duì)STDF文件進(jìn)行轉(zhuǎn)換。執(zhí)行命令如下:
StdfToCsv.exe-stdf xxx.stdf-csv-o xxx
“xxx”就是待轉(zhuǎn)換文件的名字,也就是Key值,因此,只需要將執(zhí)行命令放入map()函數(shù)即可。程序啟動(dòng)后,數(shù)據(jù)會(huì)以Key-Value對(duì)的形式傳輸?shù)健癝tdfToCsv.exe”軟件中進(jìn)行格式轉(zhuǎn)換。對(duì)于FileOutputFormat而言,與FileInputFormat情況一樣,本文同樣設(shè)計(jì)了StdfOutputFormat和StdfRecordWriter類來接收Key-Value對(duì)作為mapper的結(jié)果,結(jié)果將被輸出到HDFS中,最終實(shí)現(xiàn)海量測(cè)試數(shù)據(jù)的分布式格式轉(zhuǎn)換。
4 系統(tǒng)的測(cè)試與分析
首先對(duì)測(cè)試數(shù)據(jù)格式轉(zhuǎn)換系統(tǒng)的正確性進(jìn)行驗(yàn)證,將20個(gè)STDF文件上傳到Hadoop集群中進(jìn)行格式轉(zhuǎn)換,將得到的CSV格式文件從HDFS中下載到本地,與在本地進(jìn)行格式轉(zhuǎn)換得到的CSV格式文件進(jìn)行對(duì)比,結(jié)果表明兩種方法得到的CSV格式文件完全一致。
其次,為了驗(yàn)證格式轉(zhuǎn)換系統(tǒng)的性能,使用6組不同規(guī)模的數(shù)據(jù)集,如表1所示,每個(gè)原始STDF文件為100 MB左右。
測(cè)試在不同集群規(guī)模下格式轉(zhuǎn)換所用時(shí)間,包括集群中有2節(jié)點(diǎn)、3節(jié)點(diǎn)和4節(jié)點(diǎn)的情況,以及單臺(tái)機(jī)器在本地的格式轉(zhuǎn)換所用時(shí)間,如表2所示,時(shí)間曲線如圖6所示。
表2及圖6顯示了各組數(shù)據(jù)集在格式轉(zhuǎn)換系統(tǒng)中的測(cè)試結(jié)果。從表及圖中可以看出,基于Hadoop的分布式格式轉(zhuǎn)換系統(tǒng)對(duì)于大量測(cè)試數(shù)據(jù)的格式轉(zhuǎn)換展現(xiàn)了非常出色的性能。當(dāng)數(shù)據(jù)集大小為1 GB,同時(shí)采用4個(gè)節(jié)點(diǎn)進(jìn)行格式轉(zhuǎn)換時(shí),效率比本地單機(jī)轉(zhuǎn)換提高了大約70%左右;而當(dāng)數(shù)據(jù)集的大小增加到30 GB,仍然采用4個(gè)節(jié)點(diǎn)進(jìn)行格式轉(zhuǎn)換時(shí),效率比單機(jī)轉(zhuǎn)換更是提高了75%之多。通過對(duì)比可以看出,在處理相同數(shù)據(jù)集時(shí),隨著集群內(nèi)節(jié)點(diǎn)數(shù)目的增長,時(shí)間會(huì)不斷減少,因此,在Hadoop集群上,采用MapReduce編程框架對(duì)數(shù)據(jù)進(jìn)行處理,在系統(tǒng)系能上會(huì)得到極大的提升。
5 結(jié)束語
隨著集成電路測(cè)試領(lǐng)域的飛速發(fā)展,每天都會(huì)產(chǎn)生數(shù)以萬計(jì)的芯片測(cè)試數(shù)據(jù),在未來對(duì)測(cè)試數(shù)據(jù)進(jìn)行存儲(chǔ)與處理方面將會(huì)面臨很多困難。本文以此為背景,圍繞HDFS分布式文件系統(tǒng)與MapReduce分布式編程框架展開討論,重點(diǎn)研究了基于Hadoop的測(cè)試數(shù)據(jù)存儲(chǔ)與格式轉(zhuǎn)換系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。
隨著云計(jì)算與云存儲(chǔ)技術(shù)的不斷發(fā)展,測(cè)試數(shù)據(jù)在基于云平臺(tái)上的相關(guān)技術(shù)與研究也會(huì)越來越深入,同時(shí)為越來越多的用戶提供便利。
參考文獻(xiàn)
[1] GHEMAWAT S,GOBIOFF H,LEUNG S.The google file system[C].Proceedings of the Nineteenth ACM Symposium on Operating Systems Principles,2003.
[2] 李寬.基于HDFS的分布式Namenode節(jié)點(diǎn)模型的研究[D].廣州:華南理工大學(xué),2011.
[3] 鮑彤,陳維鋒,盧磊.基于Hadoop的分布式集群平臺(tái)構(gòu)建方法研究[J].信息通信,2013(8):21-22.
[4] BORTHAKUR D.Hadoop distributed file system[EB/OL].(2007)[2015].http://www.hadoop.org.cn/resource.
[5] 郝向濤.基于Hadoop的分布式文件系統(tǒng)技術(shù)分析及應(yīng)用[D].武漢:武漢理工大學(xué),2013.
[6] BHANDARKAR M.MapReduce programming with apache Hadoop[C].Parallel & Distributed Processing(IPDPS),2010 IEEE International Symposium on.Parallel & Distributed Processing(IPDPS),2010:19-23.
[7] DEAN J,GHEMAWAT S.MapReduce:Simplified data processing on large clusters[C].OSDI′04,2004:137-149.
[8] 袁薇.標(biāo)準(zhǔn)測(cè)試數(shù)據(jù)格式(STDF)文件的研究[J].電子元器件應(yīng)用,2009(4):70-73.