Mapreduce基本程序

1.Mapper里面的map方法
public void map(Object key,Text value,Context context) throws IOException,InterruptedException{...}

map()方法里面有三个参数,Object key,Text value就是输入的key和value,第三个参数Context context可以记录输入的key和value,此外context还会记录map运算的状态。

2.Reducer里面的reduce()方法
pubilic void reduce(Text key,Iterable<IntWritable> values,Context context) throws IOException,InterruptedException{...}

reduce()函数的输入也是一个key/value的形式,不过它的value是一个迭代器的形式Iterable<IntWritable> values,也就是说reduce中的values是一个key对应一组的值得value。
3.main()函数
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs =
new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: wordcount <in> <out>");
System.exit(2);
}
Job job = new Job(conf, "word count");//构建一个job
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
(1)Configuration conf=new Configuration();//初始化
运行mapreduce程序前都要初始化Configuration,该类主要是读取mapreduce系统配置信息,这些信息包括hdfs还有mapreduce,也就是安装hadoop时候的配置文件例如:core-site.xml、hdfs-site.xml和mapred-site.xml等等文件里的信息。
程序员开发mapreduce时候只是在填空,在map函数和reduce函数里编写实际进行的业务逻辑,其它的工作都是交给mapreduce框架自己操作的,但是至少我们要告诉它怎么操作啊,比如hdfs在哪里啊,mapreduce的jobstracker在哪里啊,而这些信息就在conf包下的配置文件里。
(2) Job job = new Job(conf, "word count");
在mapreduce框架里一个mapreduce任务也叫mapreduce作业也叫做一个mapreduce的job。
具体的map和reduce运算就是task了,这里我们构建一个job,构建时候有两个参数,一个是conf,一个是这个job的名称。
(3) job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
定义输出的key/value的类型,也就是最终存储在hdfs上结果文件的key/value的类型。
(4)
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
第一行就是构建输入的数据文件
第二行是构建输出的数据文件
最后一行是如果job运行成功了,程序就正常退出。
FileInputFormat和FileOutputFormat可以设置输入输出文件路径,
mapreduce计算时候:
输入文件必须存在,不然mapreduce任务直接退出。
输出一般是一个文件夹,而且该文件夹不能存在。

推荐阅读更多精彩内容

  • 摘自:http://staticor.io/post/hadoop/2016-01-23hadoop-defini...
    wangliang938阅读 377评论 0 1
  • 1.分布式计算思想: 1.1基本思想:mapreduce是两个操作步骤,即映射和规约也是这个分布式计算的思想。即实...
    起个什么呢称呢阅读 634评论 0 2
  • MapReduce编程重点把握 MapReduce核心概念 思考几个问题 词频统计wordcount的具体执行过程...
    胖胖的大罗阅读 511评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 123,172评论 18 134
  • 长投初级课结语# 截至今日,终于要结束时而煎熬,时而兴奋的长投初级课了。心中的感慨还是很多,让我对理财这个技能更进...
    难得糊涂magic阅读 258评论 0 1
  • 《落秋》 ——瘦桶 一池秋水 一池秋 秋已过黄昏 落叶成哀伤 白云千里万里 鸿雁不知返 往事像照片 反反复复
    瘦桶阅读 179评论 0 58
  • 因为先生工作的调动,这一段时间一直在南京看房。我首看筛选了二套,叫先生今天再去看。有一套270平,第一次看的时候我...
    当妈姐阅读 54评论 0 0
  • 这几天带着孩子在老家玩儿,每天的活动都排得满满的。昨天和家里亲戚大人孩子一大帮人开车跑到山里一个有水的河边吃烧烤,...
    我是我的光阅读 75评论 0 0