如何用hdfs测试hadoopmapreduce?

m2xkgtsf  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(433)

我正在使用mrunit为我的mapreduce工作编写单元测试。
然而,我有困难,包括hdfs的混合。我的mr工作需要hdfs的文件。如何在mrunit测试用例中模拟hdfs部分?
编辑:
我知道我可以在测试基础设施中为mr代码指定inputs/exepctedoutput。然而,这不是我想要的。我的mr作业需要读取另一个包含域数据的文件才能执行该作业。这个文件是hdfs格式的。如何模拟这个文件?
我试着用mockito,但没用。原因是filesystem.open()返回从java.io.stream以外的其他接口继承的fsdatainputstream。模仿所有的接口太痛苦了。所以,我在我的代码中做了如下操作

if (System.getProperty("junit_running") != null)
{
    inputStream = this.getClass().getClassLoader().getResourceAsStream("domain_data.txt");
    br = new BufferedReader(new InputStreamReader(inputStream));
} else {
    Path pathToRegionData = new Path("/domain_data.txt");

    LOG.info("checking for existence of region assignment file at path: " + pathToRegionData.toString());

    if (!fileSystem.exists(pathToRegionData))
    {
        LOG.error("domain file does not exist at path: " + pathToRegionData.toString());
        throw new IllegalArgumentException("region assignments file does not exist at path: " + pathToRegionData.toString());
    }

    inputStream = fileSystem.open(pathToRegionData);

    br = new BufferedReader(new InputStreamReader(inputStream));
}

这个解决方案并不理想,因为我必须在我的产品代码中放入特定于测试的代码。我还在等着看是否有一个优雅的解决方案。

tpxzln5u

tpxzln5u1#

请按照这个mrunit小教程。
https://github.com/malli3131/hadooptutorial/blob/master/mrunit/tutorial
在mrunit测试用例中,我们在testmapper()和testreducer()方法中提供数据。因此,mrunit作业不需要hdfs的输入。只有mapreduce作业需要来自hdfs的数据输入。

相关问题