博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大数据小项目之电视收视率企业项目08--》MapReduce编写之Wordcount
阅读量:5056 次
发布时间:2019-06-12

本文共 2936 字,大约阅读时间需要 9 分钟。

编程规范

(1)用户编写的程序分成三个部分:Mapper,Reducer,Driver(提交运行mr程序的客户端)

(2)Mapper的输入数据是KV对的形式(KV的类型可自定义)

(3)Mapper的输出数据是KV对的形式(KV的类型可自定义)

(4)Mapper中的业务逻辑写在map()方法中

(5)map()方法(maptask进程)对每一个<K,V>调用一次

(6)Reducer的输入数据类型对应Mapper的输出数据类型,也是KV

(7)Reducer的业务逻辑写在reduce()方法中

(8)Reducetask进程对每一组相同k的<k,v>组调用一次reduce()方法

(9)用户自定义的Mapper和Reducer都要继承各自的父类

(10)整个程序需要一个Drvier来进行提交,提交的是一个描述了各种必要信息的job对象

wordcount示例编写:

(1)定义一个mapper类

package com.it18wang.TextMaven;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
{ //map方法的生命周期: 框架每传一行数据就被调用一次 //key : 这一行的起始点在文件中的偏移量 //value: 这一行的内容 protected void map(LongWritable key, Text value,Context context) throws IOException, InterruptedException { String line=value.toString(); String[] words = line.split(" "); //遍历数组,输出
<单词,1>
for(String word:words){ context.write(new Text(word), new IntWritable(1)); }   }    }}

(2)定义一个reducer类

//生命周期:框架每传递进来一个kv 组,reduce方法被调用一次    @Override    protected void reduce(Text key, Iterable
values, Context context) throws IOException, InterruptedException { //定义一个计数器 int count = 0; //遍历这一组kv的所有v,累加到count中 for(IntWritable value:values){ count += value.get(); } context.write(key, new IntWritable(count)); }}

(3)定义一个主类,用来描述job并提交job

package com.it18wang.TextMaven;import java.io.IOException;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;public class WordCountDriver {    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {        Configuration conf=new Configuration();        Job job=Job.getInstance(conf);        job.setJarByClass(WordCountDriver.class);        job.setMapperClass(WordCountMapper.class);        job.setReducerClass(WordCountReducer.class);                FileInputFormat.addInputPath(job, new Path(args[0]));        FileOutputFormat.setOutputPath(job, new Path(args[1]));                job.setMapOutputKeyClass(Text.class);        job.setMapOutputValueClass(IntWritable.class);                job.setOutputKeyClass(Text.class);        job.setOutputValueClass(IntWritable.class);

      //向yarn集群提交这个job

      int result=job.waitForCompletion(true)?0:1;

System.exit(result);        }}

把这个项目打jar包,上传到Linux上,然后

hadoop jar mr.jar com.it18wang.testmaven.WordCountRunner /wc_input /wc_output1

运行

运行成功后,会在 HDFS上生成一个/wc_output1目录,目录下面就是结果。

 

转载于:https://www.cnblogs.com/wakerwang/p/9474049.html

你可能感兴趣的文章
(转载)Java基础知识总结
查看>>
自动类型转换
查看>>
三维地理信息平台介绍与比较
查看>>
hard(2018.10.18)
查看>>
Mongo连接池操纵MongoOptions
查看>>
UVA 11609 Teams 组合数学+快速幂
查看>>
线性回归
查看>>
TCP、UDP以及HTTP的简单讲解
查看>>
Python学习之路-24 (面向对象Python2.7类继承)
查看>>
数据挖掘概念杂记
查看>>
MongoDB工具
查看>>
JAVA反射机制(转)
查看>>
springboot扫描通用的依赖模块
查看>>
Swift - 39 - 枚举类型关联默认值
查看>>
测试随笔功能
查看>>
SPOJ #692. Fruit Farm
查看>>
LeetCode "Teemo Attacking"
查看>>
uuid Makefile share
查看>>
目标文件格式分析工具: ar,nm,objdump,objcopy,readelf 之(nm,objdump,readelf篇)
查看>>
git 常用命令
查看>>