gpt4 book ai didi

java - 使用Hadoop时Hadoop MRUnit IllegalStateException-权威指南代码

转载 作者:可可西里 更新时间:2023-11-01 16:32:09 24 4
gpt4 key购买 nike

我正在学习权威指南书中的 Hadoop,并尝试执行导致错误的这段代码。
第 5 章的示例。 Github代码链接:
资源: https://github.com/tomwhite/hadoop-book/blob/master/ch05/src/main/java/v1/MaxTemperatureMapper.java

public class MaxTemperatureMapper
extends Mapper<LongWritable, Text, Text, IntWritable> {
@Override
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String line = value.toString();
String year = line.substring(15, 19);
int airTemperature = Integer.parseInt(line.substring(87, 92));
context.write(new Text(year), new IntWritable(airTemperature));
}

}

测试: https://github.com/tomwhite/hadoop-book/blob/master/ch05/src/test/java/v1/MaxTemperatureMapperTest.java

public class MaxTemperatureMapperTest {
@Test
public void processesValidRecord() throws IOException, InterruptedException {
Text value = new Text("0043011990999991950051518004+68750+023550FM-12+0382" +
"99999V0203201N00261220001CN9999999N9-00111+99999999999");
new MapDriver<LongWritable, Text, Text, IntWritable>()
.withMapper(new MaxTemperatureMapper())
.withInputValue(value)
.withOutput(new Text("1950"), new IntWritable(-11))
.runTest();
}

我得到的错误如下:

java.lang.IllegalStateException: No input was provided
at org.apache.hadoop.mrunit.MapDriverBase.preRunChecks(MapDriverBase.java:286)
at org.apache.hadoop.mrunit.mapreduce.MapDriver.run(MapDriver.java:142)
at org.apache.hadoop.mrunit.TestDriver.runTest(TestDriver.java:640)
at org.apache.hadoop.mrunit.TestDriver.runTest(TestDriver.java:627)
at book.hadoopdefinitiveguide.chap5.examples.MaxTemperatureMapperTest.processesValidRecord(MaxTemperatureMapperTest.java:12)

这恰好是我在 hadoop 中执行的第一个代码,它抛出了这个错误。任何帮助表示赞赏。提前致谢

最佳答案

正如@Thomas Junblut 指出的那样,您需要指定一个键和值。

但是(假设您使用的是 mrunit 1.0 或更高版本),withInputKey|Value is deprecated .您应该改为使用 withInput(K1 key, V1 val) ,您在一个方法中指定 bot 键和值,而不是 withInputValue(..).withInputKey(..)。所以你会有这样的东西

new MapDriver<LongWritable, Text, Text, IntWritable>()
.withMapper(new MaxTemperatureMapper())
.withInput(new LongWritable(), value)
.withOutput(new Text("1950"), new IntWritable(-11))
.runTest();

new LongWritable() 只是一个任意键。


编辑

因此,经过进一步测试,这不是您的代码的问题(弃用除外,但这不是原因)。

我使用我发布的代码运行相同的测试并得到完全相同的错误。我用我拥有的一些旧练习项目进行了测试。这似乎是未正确构建类的问题。我创建了一个全新的项目,重写(复制粘贴)映射器类并创建了一个新的测试用例,保存所有内容,运行它,它运行良好。尝试这样做。顺便说一句,我在 Eclipse 上使用 Eclipse Hadoop 插件创建 MR 项目

关于java - 使用Hadoop时Hadoop MRUnit IllegalStateException-权威指南代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25711266/

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