Testing Hadoop Map reduce测试-自定义记录读取器

Testing Hadoop Map reduce测试-自定义记录读取器,testing,hadoop,mapreduce,recordreader,Testing,Hadoop,Mapreduce,Recordreader,我已经编写了一个定制的记录阅读器,正在寻找样本测试代码,以使用MRUnit或任何其他测试框架测试我的定制阅读器。根据功能,它可以正常工作,但我想在安装之前添加测试用例。任何帮助都是值得的。在我看来,自定义记录阅读器就像任何迭代器一样。为了测试我的记录阅读器,我能够在没有MRUnit或任何其他hadoop junit框架的情况下工作。测试执行得很快,占用空间也很小。在测试用例中初始化记录读取器,并在其上不断迭代。这是我的一个测试中的伪代码。如果你想朝这个方向前进,我可以向你提供更多细节 MyInp

我已经编写了一个定制的记录阅读器,正在寻找样本测试代码,以使用MRUnit或任何其他测试框架测试我的定制阅读器。根据功能,它可以正常工作,但我想在安装之前添加测试用例。任何帮助都是值得的。

在我看来,自定义记录阅读器就像任何迭代器一样。为了测试我的记录阅读器,我能够在没有MRUnit或任何其他hadoop junit框架的情况下工作。测试执行得很快,占用空间也很小。在测试用例中初始化记录读取器,并在其上不断迭代。这是我的一个测试中的伪代码。如果你想朝这个方向前进,我可以向你提供更多细节

MyInputFormat myInputFormat = new MyInputFormat();
//configure job and provide input format configuration
Job job = Job.getInstance(conf, "test");    
conf = job.getConfiguration();

// verify split type and count if you want to verify the input format also
List<InputSplit> splits = myInputFormat.getSplits(job);

TaskAttemptContext context = new TaskAttemptContextImpl(conf, new TaskAttemptID());
RecordReader<LongWritable, Text> reader = myInputFormat.createRecordReader(splits.get(1), context);
reader.initialize(splits.get(1), context);

for (; number of expected value;) {
  assertTrue(reader.nextKeyValue());
  // verify key and value
  assertEquals(expectedLong, reader.getCurrentKey());
}
MyInputFormat MyInputFormat=new MyInputFormat();
//配置作业并提供输入格式配置
Job Job=Job.getInstance(conf,“test”);
conf=job.getConfiguration();
//如果还要验证输入格式,请验证拆分类型和计数
列表拆分=myInputFormat.getSplits(作业);
TaskAttemptContext=newtaskattemptcontextimpl(conf,newtaskattemptid());
RecordReader=myInputFormat.createRecordReader(splits.get(1),上下文);
reader.initialize(splits.get(1),context);
对于(;期望值的数目;){
assertTrue(reader.nextKeyValue());
//验证键和值
assertEquals(expectedLong,reader.getCurrentKey());
}

哦,是的,看起来你的方法更合适。你能提供更多的细节吗?很高兴知道。(当我们添加更多的细节时,我希望你能考虑通过接受或投票我的帮助来帮助我建立我的代表。)我写JUnit测试。我发现基于本地文件系统的文件分割足以验证自定义RecordReader的行为。只有在验证自定义拆分行为时,才需要DistributedFS。许多其他细节取决于要测试的行为。比如,您正在向记录阅读器添加什么自定义逻辑?你是用标准分割法吗?我已经接受了你的答案,但无法投票,因为我现在的代表还不到15岁。我在创建作业对象时出错。我对此非常陌生,无法测试代码。SMInputFormat myInputFormat=新的SMInputFormat();Configuration conf=新配置();//配置作业并提供输入格式配置作业job=job.getInstance(conf,“test”);conf=job.getConfiguration();我错过了什么?谢谢!你犯了什么错误?您是否看到编译时错误?如果是这样,那么您可能没有在类路径中添加hadoop common、hadoop mapreduce和其他库。如果是ClassNotFound错误,请检查相同的。