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