使用MRUnit进行Hadoop测试

我将先前在内存集群(使用MiniMRCluster)中运行的一系列现有Hadoop单元测试加装到MRUnit中。 现有的测试用例主要为Map阶段提供输入,然后测试Reduce阶段的输出。

我有三个问题,其中任何一个的最佳答案都有资格:

1)通过使用MRUnit而不是内存集群进行单元测试,在架构上会失去什么?

2)将现有的测试案例分解为仅Map测试和Reduce-Only测试是否值得? 有什么情况下我不得不把它们分开?

3)MRUnit无法覆盖哪些测试场景?


改造过程教会了我一些潜在的答案,我将在这里发布。 尽管如此,我仍然倾向于听取别人的意见,所以我不会接受这个答案。

1)我至少失去两件事。 首先,MR管道被嘲笑。 所以,有些“嘲弄”隐藏了MR工作中可能存在的问题。 其次,除了映射和缩小阶段之间的分区和排序外,MR作业还包括文件系统的输入和文件系统的输出。 MRUnit并未完全处理Hadoop的这些方面,因此如果MR作业依赖于这些功能,则无法对其进行测试。 不过,仍然可以重写测试来测试Map / Reduce部件。

2)大多数情况下,打破现有测试是不值得的。 例如,如果现有的测试依赖于分区器,那么分解测试可能是有意义的,这样就可以在不涉及分区器的情况下测试Map和Reduce。 但总的来说,这不值得“仅仅这样做”。

3)是 - 分区为一个。 另一种输出格式。 对于某些人来说,这可能不是什么大事,但我们现有的许多作业都依赖于这两个特性,而且由于单元测试与输出格式的最终​​输出相反,所以我不得不重写很多测试让他们工作。

[编辑]

只需从Cloudera上阅读一篇博客文章即可获得答案:

http://www.cloudera.com/blog/2009/07/debugging-mapreduce-programs-with-mrunit/


看看MRUNIT-101,在一个星期左右的时间里,我们将增加测试真实输出格式的能力

链接地址: http://www.djcxy.com/p/67707.html

上一篇: Hadoop testing using MRUnit

下一篇: Chaining multiple MapReduce jobs in Hadoop