public class WordCountApp { public static class MyMapper extends Mapper<LongWritable, Text, Text, LongWritable>{
@Override
protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, LongWritable>.Context context) throws IOException, InterruptedException {
String line = 【填空1:将输入的值转换为字符串】;
String[] splited = 【填空2:按制表符分割字符串】;
for (String word : splited) {
Text k2 = 【填空3:取k2的值】;
LongWritable v2 = 【填空4:取v2的值】;
【填空5:对每个单词输出键值对】;
}
}
}
public static class MyReducer extends Reducer<Text, LongWritable, Text, LongWritable>{
@Override
protected void reduce(Text k2, Iterable<LongWritable> v2s, Reducer<Text, LongWritable, Text, LongWritable>.Context context) throws IOException, InterruptedException {
long 【填空6:赋count的初始值】;
for (LongWritable times : v2s) {
【填空7:对count进行计算】;
}
LongWritable v3 = 【填空8:赋值v3】;
context.write(k2, v3);
}
}
public static void main(String[] args) throws Exception{
Configuration conf =【填空9:创建Hadoop配置】;
Job job = Job.getInstance(conf , WordCountApp.class.getSimpleName());
//必须指定
job.setJarByClass(【填空10】);
//指定本业务job要使用的Mapper业务类
job.setMapperClass(【填空11】);
//指定mapper输出数据的<k2,v2>的类型
job.setMapOutputKeyClass(【填空12】);
job.setMapOutputValueClass(【填空13】);
//指定本业务job要使用的Reducer业务类
job.setReducerClass(【填空14】);
//指定reducer输出数据的<k3,v3>的类型
job.setOutputKeyClass(【填空15】);
job.setOutputValueClass(【填空16】);
//输入数据来自哪里
FileInputFormat.setInputPaths(job, 【填空17】);
//输出数据写到哪里
FileOutputFormat.setOutputPath(job, 【填空18】));
//true表示将运行进度等信息及时输出给用户
boolean res = job.waitForCompletion(true);
System.exit(res?0:1);
}
}