我开发了一个Map缩小程序。我已经写好习惯了 RecordReader 以及 InputFormat 班级。我正在使用 MR Unit 以及 Mockito 用于mapper和reducer的单元测试。我想知道如何进行自定义单元测试 RecordReader 以及 InputFormat 上课?测试这些类的最佳方法是什么?
RecordReader
InputFormat
MR Unit
Mockito
zlhcx6iw1#
感谢用户7610根据答案编译并测试了示例代码的版本
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.mapreduce.InputFormat; import org.apache.hadoop.mapreduce.RecordReader; import org.apache.hadoop.mapreduce.TaskAttemptContext; import org.apache.hadoop.mapreduce.TaskAttemptID; import org.apache.hadoop.mapreduce.lib.input.FileSplit; import org.apache.hadoop.mapreduce.task.TaskAttemptContextImpl; import org.apache.hadoop.util.ReflectionUtils; import java.io.File; Configuration conf = new Configuration(false); conf.set("fs.default.name", "file:///"); File testFile = new File("path/to/file"); Path path = new Path(testFile.getAbsoluteFile().toURI()); FileSplit split = new FileSplit(path, 0, testFile.length(), null); InputFormat inputFormat = ReflectionUtils.newInstance(MyInputFormat.class, conf); TaskAttemptContext context = new TaskAttemptContextImpl(conf, new TaskAttemptID()); RecordReader reader = inputFormat.createRecordReader(split, context); reader.initialize(split, context);
vqlkdk9b2#
您需要一个可用的测试文件(我假设您的输入格式扩展了fileinputformat)。一旦您有了这个,您就可以配置一个配置对象来使用localfilesystem( fs.default.name 或者 fs.defaultFS 设置为文件:///)。最后,您需要定义一个filesplit,其中包含flie(文件的一部分)的路径、偏移量和长度。
fs.default.name
fs.defaultFS
// DISCLAIMER: untested or compiled Configuration conf = new Configuration(false); conf.set("fs.default.name", "file:///"); File testFile = new File("path/to/file"); FileSplit split = new FileSplit( testFile.getAbsoluteFile().toURI().toString(), 0, testFile.getLength(), null); MyInputFormat inputFormat = ReflectionUtils.newInstance(Myinputformat.class, conf); RecordReader reader = inputFormat.createRecordReader(split, new TaskAttemptContext(conf, new TaskAttemptID()));
现在您可以Assert从读取器返回的记录与您期望的匹配。您还应该测试(如果您的文件格式支持)更改分割的偏移量和长度,以及创建文件的压缩版本。
2条答案
按热度按时间zlhcx6iw1#
感谢用户7610
根据答案编译并测试了示例代码的版本
vqlkdk9b2#
您需要一个可用的测试文件(我假设您的输入格式扩展了fileinputformat)。一旦您有了这个,您就可以配置一个配置对象来使用localfilesystem(
fs.default.name
或者fs.defaultFS
设置为文件:///)。最后,您需要定义一个filesplit,其中包含flie(文件的一部分)的路径、偏移量和长度。现在您可以Assert从读取器返回的记录与您期望的匹配。您还应该测试(如果您的文件格式支持)更改分割的偏移量和长度,以及创建文件的压缩版本。