java - Map reduce 作业执行但不产生输出
问题描述
请寻求帮助。mapreduce 作业执行但不产生输出。这是一个计算文件中总字数的简单程序。我开始非常简单地确保它适用于一个 txt 文件,该文件有一行包含以下内容:
小国 第二大国 第二 小食品出口国 第二 第二 第二
不幸的是,它没有,任何关于下一步看哪里的建议将不胜感激。我已经剪切并粘贴了输出日志的最后一点。
File System Counters
FILE: Number of bytes read=890
FILE: Number of bytes written=947710
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
Map-Reduce Framework
Map input records=1
Map output records=1
Map output bytes=87
Map output materialized bytes=95
Input split bytes=198
Combine input records=0
Combine output records=0
Reduce input groups=1
Reduce shuffle bytes=95
Reduce input records=1
Reduce output records=1
Spilled Records=2
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=7
Total committed heap usage (bytes)=468713472
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=82
File Output Format Counters
Bytes Written=97
Process finished with exit code 0
public class Map extends Mapper<LongWritable, Text, Text,
IntWritable>{
@Override
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String line = value.toString();
String[] datas = line.split("\t");
for(String data: datas) {
Text outputKey = new Text(data);
IntWritable outputValue = new IntWritable();
context.write(outputKey, outputValue);
}
}
}
public class Reduce extends Reducer<Text, IntWritable, Text,
IntWritable> {
@Override
public void reduce(final Text outputKey,
final Iterable<IntWritable> values,
final Context context)
throws IOException, InterruptedException {
int sum = 0;
for(IntWritable value : values)
{
sum += value.get();
}
context.write(outputKey, new IntWritable(sum));
}
}
public class Main extends Configured implements Tool {
@Override
public int run(String[] args) throws Exception {
Job job = Job.getInstance(getConf());
job.setJobName("WordCount");
job.setJarByClass(Main.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
Path inputFilePath = new Path("/Users/francesco/input/input.txt");
Path outputFilePath = new Path("/Users/francesco/output/first");
FileInputFormat.addInputPath(job, inputFilePath);
FileOutputFormat.setOutputPath(job, outputFilePath);
return job.waitForCompletion(true) ? 0 : 1;
}
public static void main(String[] args) throws Exception{
int exitCode = ToolRunner.run(new Main(), args);
System.exit(exitCode);
}
}
解决方案
您没有在映射器中设置要发出的任何 IntWritable 值:
IntWritable outputValue = new IntWritable();
需要替换为:
IntWritable outputValue = new IntWritable(1);
推荐阅读
- spring - 使用 Spring-Integration-Kinesis 消息驱动适配器时的内部故障
- java - 0x7f 有什么特别之处?
- r - ggplot:Y轴作为特定值的计数
- c - 静态代码分析器工具中的函数调用列表
- google-apps-script - 错误代码“属性列表后缺少 }。(第 173 行,文件“代码”)”
- c# - UWP StorageFolder 访问 Downloads 文件夹
- java - 将一个值映射到 JPA 中的多个列
- javascript - 安全问题:使用 XMLHttpRequest 解析 HTML?
- bash - 节省 bash 中每个分叉进程的运行时间
- c++ - 用于 Windows 编程的 Visual C++ 库