分享

麻烦大家帮我看一个这个Combiner错在哪里?

Hedera 发表于 2015-3-4 21:00:33 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 8053
  1. package test;
  2. import java.io.IOException;
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.Path;
  5. import org.apache.hadoop.io.IntWritable;
  6. import org.apache.hadoop.io.Text;
  7. import org.apache.hadoop.mapreduce.Job;
  8. import org.apache.hadoop.mapreduce.Mapper;
  9. import org.apache.hadoop.mapreduce.Reducer;
  10. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  11. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  12. public class test {
  13.   
  14.   public static class findMaxMinMapper
  15.        extends Mapper<Object, Text, Text, IntWritable>{
  16.    
  17.     public void map(Object key, Text value, Context context
  18.                     ) throws IOException, InterruptedException {
  19.       
  20.       context.write(new Text("flag"), new IntWritable(1));
  21.     }
  22.   }
  23.   
  24.   public static class findMaxMinCombiner
  25.           extends Reducer<Text,IntWritable,Text,Text> {
  26.        
  27.                 public void reduce(Text key, Iterable<IntWritable> values,
  28.                                   Context context
  29.                                   ) throws IOException, InterruptedException {
  30.                   context.write(new Text(key), new Text(""));
  31.                 }
  32.         }
  33.   
  34.   public static class findMaxMinReducer
  35.        extends Reducer<Text,Text,Text,Text> {
  36.     public void reduce(Text key, Iterable<Text> values,
  37.                        Context context
  38.                        ) throws IOException, InterruptedException {
  39.        context.write(new Text(key), new Text(""));
  40.     }
  41.   }
  42.   
  43.   public static void main(String[] args) throws Exception {
  44.     Configuration conf = new Configuration();
  45.     Job job = Job.getInstance(conf, "findMinMax");
  46.     job.setJarByClass(test.class);
  47.     job.setMapperClass(findMaxMinMapper.class);
  48.     job.setCombinerClass(findMaxMinCombiner.class);
  49.     job.setReducerClass(findMaxMinReducer.class);
  50.     job.setOutputKeyClass(Text.class);
  51.     job.setOutputValueClass(Text.class);
  52.     FileInputFormat.addInputPath(job, new Path(args[0]));
  53.     FileOutputFormat.setOutputPath(job, new Path(args[1]));
  54.     if(!job.waitForCompletion(true))
  55.             System.exit(1);
  56.    
  57.   }
  58. }
复制代码


输出的目录为空目录,麻烦大神帮忙看看是错在哪个地方?

已有(3)人评论

跳转到指定楼层
Hedera 发表于 2015-3-4 21:02:34
如果把上面的map和combiner中的IntWritble改成Text类型,则输出目录就不会为空。这是什么原因?
回复

使用道具 举报

xuanxufeng 发表于 2015-3-4 21:56:44
Hedera 发表于 2015-3-4 21:02
如果把上面的map和combiner中的IntWritble改成Text类型,则输出目录就不会为空。这是什么原因?

只看到context
函数的参数都是固定的,改成别的,出错的可能性比较大,下面IntWritable可以改成LongWritable,其它的不用该。


在工程下创建一个WordMapper类,该类要继承Mapper< Object, Text, Text, IntWritable>抽象类,并且实现如下方法。

public void  map(Object key, Text value, Context context )

throws IOException, InterruptedException

这个方法是Mapper抽象类的核心方法,它有三个参数。

Object key:每行文件的偏移量。

Text value:每行文件的内容。

Context context:Map端的上下文,与OutputCollector和Reporter的功能类似。



回复

使用道具 举报

rsgg03 发表于 2015-3-4 22:01:27
以单词为例:

reduce方法
*  
* KEYIN,     行中出现单词
* VALUEIN,   行中出现单词个数
* KEYOUT,    文件中出现不同单词
* VALUEOUT   文件中出现不同单词总个数
*/  
个数作为context显然不太妥

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条