gpt4 book ai didi

hadoop - 如何使用 hdfs 测试 hadoop mapreduce?

转载 作者:行者123 更新时间:2023-12-02 21:35:52 24 4
gpt4 key购买 nike

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

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

编辑:

我知道我可以在测试基础设施中为我的 MR 代码指定输入/执行输出。然而,这不是我想要的。我的 MR 工作需要读取另一个具有域数据的文件才能完成这项工作。该文件位于 HDFS 中。我如何模拟这个文件?

我尝试使用 mockito,但它没有用。原因是 FileSystem.open() 返回一个 FSDataInputStream,它继承自 java.io.Stream 之外的其他接口(interface)。模拟所有接口(interface)太痛苦了。所以,我通过执行以下操作在我的代码中破解了它

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 的这个小教程。

https://github.com/malli3131/HadoopTutorial/blob/master/MRUnit/Tutorial

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

关于hadoop - 如何使用 hdfs 测试 hadoop mapreduce?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32359149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com