package MapReduce;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.mapreduce.Reducer;
import javax.xml.soap.Text;
import java.io.IOException;
public class WordCountReducer extends Reducer <Text, IntWritable,
Text, IntWritable>{
@Override
protected void reduce (Text key, Iterable<IntWritable>value,
Reducer<Text, IntWritable, Text, IntWritable>.Context
context) throws IOException, InterruptedException {
int count = 0;
for (IntWritable iw : value) {
count +=iw.get();
}
context.write(key, new IntWritable(count));
}
}
package MapReduce;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
public class WordCountMapper extends Mapper<LongWritable, Text,
Text, IntWritable> {
@Override
protected void map(LongWritable key, Text value, Mapper<
LongWritable, Text, Text, IntWritable> .Context context)
throws IOException, InterruptedException {
String line = value.toString();
String[] words = line.split("");
for (String word : words) {
context.write(new Text(word), new IntWritable(1));
}
}
}
package MapReduce;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.log4j.BasicConfigurator;
public class WordCountDriver {
public static void main(String[] args) throws Exception {
BasicConfigurator.configure();
Configuration conf = new Configuration();
conf.set("mapreduce.framework.name", "local");
Job wcjob = Job.getInstance(conf);
wcjob.setJarByClass(WordCountDriver.class);
wcjob.setMapperClass(WordCountMapper.class);
wcjob.setReducerClass(WordCountReducer.class);
wcjob.setMapOutputKeyClass(Text.class);
wcjob.setMapOutputValueClass(IntWritable.class);
wcjob.setOutputKeyClass(Text.class);
wcjob.setMapOutputValueClass(IntWritable.class);
FileInputFormat.setInputPaths(wcjob,"D:/mr/input");
FileOutputFormat.setOutputPath(wcjob,new Path("D:/mr/output"));
boolean res = wcjob.waitForCompletion(true);
System.exit(res ? 0 : 1);
}
}
报错:
Exception in thread "main" org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: file:/C:/Users/qy/IdeaProjects/hadoop/D:/mr/output
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:321)
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:264)
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:385)
at org.apache.hadoop.mapreduce.JobSubmitter.writeNewSplits(JobSubmitter.java:302)
at org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:319)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:197)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1297)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1294)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1692)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1294)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1315)
at MapReduce.WordCountDriver.main(WordCountDriver.java:26)
Process finished with exit code 1
输入文件路径不存在,你这个错误信息不全,贴错误信息,不要截图。
猜测是 new Path() 的问题,你不 new 呢,直接写路径。
file:/C:/Users/qy/IdeaProjects/hadoop/D:/mr/output 这个提示 应该就是new Path默认是相对路径 所以自动加上了工程所在路径
new Path("D:/mr/input")试下
用的哪种集群搭建模式啊?输入路径改下试试
试试D://mr//output
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632