文献标识码: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.