【问题标题】:Hadoop Map reduce Testing - custom record readerHadoop Map reduce 测试 - 自定义记录阅读器
【发布时间】:2014-04-14 12:15:42
【问题描述】:

我编写了一个自定义记录阅读器并寻找示例测试代码来使用 MRUnit 或任何其他测试框架测试我的自定义阅读器。它根据功能工作正常,但我想在安装之前添加测试用例。任何帮助都将不胜感激。

【问题讨论】:

    标签: testing hadoop mapreduce recordreader


    【解决方案1】:

    在我看来,自定义记录阅读器就像任何迭代器一样。为了测试我的记录阅读器,我已经能够在没有 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());
    }
    

    【讨论】:

    • 哦,是的,看起来你的方法更合适。您能否提供更多详细信息。
    • 很高兴知道。 (虽然我们添加了更多细节,但我希望你会考虑通过接受或投票支持我的答案来帮助我建立我的代表。)我编写 junit 测试。我发现基于 LocalFileSystem 的文件拆分足以验证自定义 RecordReader 的行为。只有在验证自定义拆分行为时才需要 DistributedFS。许多其他细节取决于您要测试的行为。比如,你在记录阅读器中添加了什么自定义逻辑?您使用的是标准拆分吗?
    • 我已接受您的回答,但无法投票,因为我目前的代表低于 15。我在创建工作对象时遇到错误。我对此很陌生,无法测试代码。 SMInputFormat myInputFormat = new SMInputFormat();配置 conf = new Configuration(); //配置job并提供输入格式配置 Job job = Job.getInstance(conf, "test"); conf = job.getConfiguration();我在这里错过了什么?
    • 谢谢!你遇到了什么错误?您是否看到编译时错误?如果是这样,那么您可能错过了在类路径中添加 hadoop-common、hadoop-mapreduce 和其他库。如果是ClassNotFound错误,同样检查。
    猜你喜欢
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 2012-06-15
    • 2011-07-21
    • 2014-03-22
    相关资源
    最近更新 更多