如何使用hdfs测试hadoop mapreduce?

如何使用hdfs测试hadoop mapreduce?,hadoop,hdfs,mrunit,Hadoop,Hdfs,Mrunit,我正在使用MRUnit为我的mapreduce作业编写单元测试 但是,我在将hdfs纳入该组合时遇到了困难。我的MR工作需要来自hdfs的文件。如何在MRUnit测试用例中模拟hdfs部分 编辑: 我知道我可以在测试基础设施中为我的MR代码指定输入/exepctedOutput。然而,这不是我想要的。我的MR作业需要读取另一个包含域数据的文件才能执行该作业。这个文件是HDFS格式的。我如何模拟这个文件 我试着用mockito,但没用。原因是FileSystem.open返回从java.io.St

我正在使用MRUnit为我的mapreduce作业编写单元测试

但是,我在将hdfs纳入该组合时遇到了困难。我的MR工作需要来自hdfs的文件。如何在MRUnit测试用例中模拟hdfs部分

编辑:

我知道我可以在测试基础设施中为我的MR代码指定输入/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));
}

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

请遵循MRUnit的这个小教程


在MRUnit测试用例中,我们在testMapper和testReducer方法中提供数据。因此,MRUnit作业不需要来自HDFS的输入。只有MapReduce作业需要从HDFS输入数据。

谢谢您的评论,但这不是我想要的。我知道我可以在MRUnit基础设施中指定输入/预期输出。我的代码读取另一个hdfs文件,我需要将其存根,以便在单元测试上下文中,我从本地文件系统给它一个文件。我该怎么做?我尝试使用mockito来模拟hdfsfilesystem,但由于FSDataInputStream继承了Seekable和另一个接口,因此它无法完全工作。我当然可以嘲弄这整件事,但我还没有走那么远。