Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing hadoop mapreduce作业的最佳单元测试工具/方法_Unit Testing_Hadoop_Mapreduce - Fatal编程技术网

Unit testing hadoop mapreduce作业的最佳单元测试工具/方法

Unit testing hadoop mapreduce作业的最佳单元测试工具/方法,unit-testing,hadoop,mapreduce,Unit Testing,Hadoop,Mapreduce,我是新来的,但我需要知道对使用ApacheHadoop编写的程序进行单元测试的最佳方法。我知道我们可以用jUnit方式为map和reduce方法中的逻辑编写单元测试用例。我们也可以对涉及的其他逻辑执行相同的操作,但这不能保证它经过良好的测试,并且可以在实际运行环境中工作 我读过关于MRUnit的书,但它似乎也和我上面提到的一样,但以一种更成熟的方式。但它也不是真正的mapreduce作业,而是一个模拟作业 任何帮助都将不胜感激 谢谢。您当然还有其他选择。稍微用谷歌搜索一下,你就会得到它。这是我为

我是新来的,但我需要知道对使用ApacheHadoop编写的程序进行单元测试的最佳方法。我知道我们可以用jUnit方式为map和reduce方法中的逻辑编写单元测试用例。我们也可以对涉及的其他逻辑执行相同的操作,但这不能保证它经过良好的测试,并且可以在实际运行环境中工作

我读过关于MRUnit的书,但它似乎也和我上面提到的一样,但以一种更成熟的方式。但它也不是真正的mapreduce作业,而是一个模拟作业

任何帮助都将不胜感激


谢谢。

您当然还有其他选择。稍微用谷歌搜索一下,你就会得到它。这是我为你做的

以下是我粘贴的文本:

除了使用传统的jUnit和MRUnit之外,您还有以下选项:

本地Job Runner测试–在单个JVM中的单个计算机上运行MR Jobs 传统的单元测试和MRUnit应该在早期检测bug方面做得相当充分,但它们都不会用Hadoop测试您的MR作业。本地作业运行器允许您在一台JVM中的本地机器上运行Hadoop,从而在作业失败的情况下使MR作业更易于调试

要启用本地作业运行器,请将“mapred.job.tracker”设置为“local”,将“fs.default.name”设置为file:///some/local/path“(这些是默认值)

请记住,在使用本地作业运行程序时,不需要启动任何Hadoop守护进程。运行bin/hadoop将启动JVM,并为您运行作业。创建一个新的hadoop-local.xml文件(如果使用0.20,则创建mapred-local.xml和hdfs-local.xml)可能是有意义的。然后可以使用–config参数告诉bin/hadoop要使用哪个配置目录。如果您不想摆弄配置文件,可以创建一个实现和使用的类,然后使用bin/hadoop jar foo.jar com.example.Bar-d mapred.job.tracker=local-d fs.default.name=file://(args)运行这个类,其中Bar是工具实现

要开始使用本地job runner在Hadoop中测试您的MR作业,请创建一个启用本地job runner的新配置目录,并像往常一样调用您的作业,记住包括–config参数,该参数指向包含本地配置文件的目录

-conf参数也适用于0.18.3,允许您指定hadoop-local.xml文件,而不是使用–config指定目录。Hadoop将愉快地运行该作业。这种测试形式的困难在于验证作业是否正确运行。注意:在运行作业之前,必须确保输入文件设置正确,并且输出目录不存在

假设您已成功配置本地作业运行器并运行作业,则必须验证作业是否正确完成。仅仅依靠退出代码来获得成功是不够的。至少,您需要验证作业的输出是否正确。您可能还希望扫描bin/hadoop的输出以查找异常。您应该创建一个脚本或单元测试,用于设置前提条件、运行作业、区分实际输出和预期输出,以及扫描引发的异常。然后,此脚本或单元测试可以以适当的状态退出,并输出解释作业如何失败的特定消息

请注意,本地job runner有几个限制:仅支持一个减速器,并且不工作()

伪分布式测试—使用守护进程在单机上运行MR作业 本地作业运行器允许您在单个线程中运行作业。在单个线程中运行MR作业对于调试很有用,但它不能正确模拟运行多个Hadoop守护进程的真实集群(例如,NameNode、DataNode、TaskTracker、JobTracker、SecondaryNameNode)。伪分布式集群由一台运行所有Hadoop守护进程的机器组成。这个集群仍然相对容易管理(尽管比本地job runner更难),并且比本地job runner更好地测试与Hadoop的集成

要开始使用伪分布式集群在Hadoop中测试MR作业,请遵循前面提到的使用本地作业运行器的建议,但在前提条件设置中包括所有Hadoop守护进程的配置和启动。然后,要开始您的工作,只需像平常一样使用bin/hadoop

完全集成测试–在QA集群上运行MR作业 测试MR作业最彻底但最麻烦的机制可能是在至少由几台机器组成的QA集群上运行它们。通过在QA集群上运行MR作业,您将测试作业及其与Hadoop集成的所有方面

在QA集群上运行作业与本地作业运行程序有许多相同的问题。也就是说,您必须检查作业的输出是否正确。您可能还希望扫描每个任务尝试产生的stdin和stdout,这将需要将这些日志收集到一个中心位置并将它们变灰。是收集日志的有用工具,尽管它可能是多余的,这取决于您的QA集群

我们发现,我们的大多数客户都有某种QA或开发集群,他们可以在其中部署和测试新作业,尝试更新版本的Hadoop,并练习将集群从一个Hadoop版本升级到另一个版本。如果Hadoop是生产流水线的主要部分,那么创建QA或开发集群非常有意义,并且在其上反复运行作业将确保对作业的更改继续得到彻底测试。EC2可能是QA集群的一个很好的主机,因为您可以根据需要将其上下移动。如果您对在EC2中创建QA集群感兴趣,请查看我们的测试版

您应该根据QA对您的组织的重要性以及