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