Mapreduce 多输出的MRUnit示例

Mapreduce 多输出的MRUnit示例,mapreduce,elastic-map-reduce,amazon-emr,mrunit,multipleoutputs,Mapreduce,Elastic Map Reduce,Amazon Emr,Mrunit,Multipleoutputs,我已经编写了一个Map-only hadoop作业,其中使用了multipleOutput概念。这里的问题是,我想用MRUnit测试这段代码。我没有看到任何用于多次输出测试的工作示例 我的映射程序代码如下: public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String inputString = va

我已经编写了一个Map-only hadoop作业,其中使用了multipleOutput概念。这里的问题是,我想用MRUnit测试这段代码。我没有看到任何用于多次输出测试的工作示例

我的映射程序代码如下:

    public void map(LongWritable key, Text value, Context context)
        throws IOException, InterruptedException {

    String inputString = value.toString();
    String outputString = null;
    Text resultValue = null;

    String finalResult = null;
    String exceptionMessage = null;

    try {

        outputString = processInput(dataSet, inputString);

    } catch (MalformedURLException me) {
        System.out.println("MalformedURLException Occurred in Mapper:"
                + me.getMessage());
        exceptionMessage = me.getMessage();
    } catch (SolrServerException se) {
        System.out.println("SolrServerException Occurred in Mapper:"
                + se.getMessage());
        exceptionMessage = se.getMessage();
    } 
    if (outputString == null || outputString.isEmpty()
            && exceptionMessage != null) {
        exceptionMessage = exceptionMessage.replaceAll("\n", ", ");
        finalResult = inputString + "\t[Error] =" + exceptionMessage;
        resultValue = new Text(finalResult);
        multipleOutputs.write(SearchConstants.FAILURE_FILE,NullWritable.get(), resultValue);
    } else {
        finalResult = inputString + outputString;
        resultValue = new Text(finalResult);
        multipleOutputs.write(SearchConstants.SUCCESS_FILE,NullWritable.get(), resultValue);
    }

}

你们中有谁能给我一个使用multipleoutput的mrunittest的工作示例吗?

这里有一个示例,它是您的类的一个稍微简化的版本

import org.apache.hadoop.io.LongWritable;
导入org.apache.hadoop.io.NullWritable;
导入org.apache.hadoop.io.Text;
导入org.apache.hadoop.mapreduce.Mapper;
导入org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;
导入java.io.IOException;
公共类SomeMapper扩展了Mapper{
公共静态最终字符串SUCCESS\u FILE=“successFile”;
专用静态多路输出多路输出;
私有静态文本结果=新文本();
@凌驾
公共无效设置(上下文上下文)引发IOException、InterruptedException{
multipleoutput=新的multipleoutput(上下文);
超级设置(上下文);
}
@凌驾
公共void映射(LongWritable键、文本值、Mapper.Context上下文)引发IOException、InterruptedException{
String outputString=“some result”;//此处为逻辑
result.set(输出字符串);
multipleOutputs.write(SUCCESS_文件,nullwriteable.get(),result);
}
}
import org.apache.hadoop.io.LongWritable;
导入org.apache.hadoop.io.NullWritable;
导入org.apache.hadoop.io.Text;
导入org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;
导入org.apache.hadoop.mrunit.mapreduce.MapDriver;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入org.powermock.core.classloader.annotations.PrepareForTest;
导入org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({MultipleOutputs.class,SomeMapper.class})
公共类SomeMapperTest{
@试验
public void someTest()引发异常{
MapDriver MapDriver=MapDriver.newMapDriver(newsomemapper());
withInput(新的LongWritable(0)、新文本(“某些输入”))
.withMultiOutput(SomeMapper.SUCCESS_文件,NullWritable.get(),新文本(“某些结果”))
.runTest();
}
}
还有身材,格雷德尔

apply插件:“java”
sourceCompatibility=1.7
targetCompatibility=1.7
存储库{
mavenCentral()
}
依赖关系{
编译“org.apache.hadoop:hadoop客户端:2.4.0”
testCompile“junit:junit:4.12”
testCompile(“org.apache.mrunit:mrunit:1.1.0:hadoop2”){
排除(组:“org.mockito”)
}
testCompile“org.powermock:powermock-module-junit4:1.6.2”
testCompile“org.powermock:powermock api mockito:1.6.2”
}
注意Mockito排除。没有它,我得到了异常
java.lang.NoSuchMethodError:org.mockito.mock.MockCreationSettings.getSerializableMode()Lorg/mockito/mock/SerializableMode
,这与Powermock想要使用的mockito版本冲突


您可以在MRUnit的单元测试中找到其他示例。

我正在使用Maven。当我尝试使用PowerMock时,出现以下错误。我也排除了mockito依赖项,我使用的是Maven。当我尝试使用PowerMock时,出现以下错误。我也排除了mockito依赖项<代码>java.lang.NoClassDefFoundError:org/mockito/cglib/proxy/Enhancer位于org.powermock.api.extension.proxyframework.ProxyFrameworkImpl.isProxy(ProxyFrameworkImpl.java:50)
org.apache.mrunit mrunit 1.1.0 hadoop2 org.mockito mockito core
您的依赖项版本是否与我的示例中的版本不同?显然,
mvn依赖:tree
可能会提供一些见解。听起来好像你的Powermock版本没有包含Mockito。我编辑了我的答案,使用了EMR提供的最高版本Hadoop,因为你把你的问题标记为EMR。