一、MapReduce第一讲WordCount(单词计数)
在这里小编做一下简介:MapReduce计算框架。
MapReduce是面向大数据并行处理的计算模型、框架和平台,它隐含了以下三层含义:
1)MapReduce是一个基于集群的高性能并行计算平台(Cluster Infrastructure)。它允许用市场上普通的商用服务器构成一个包含数十、数百至数千个节点的分布和并行计算集群。
2)MapReduce是一个并行计算与运行软件框架(Software Framework)。它提供了一个庞大但设计精良的并行计算软件框架,能自动完成计算任务的并行化处理,自动划分计算数据和计算任务,在集群节点上自动分配和执行任务以及收集计算结果,将数据分布存储、数据通信、容错处理等并行计算涉及到的很多系统底层的复杂细节交由系统负责处理,大大减少了软件开发人员的负担。
3)MapReduce是一个并行程序设计模型与方法(Programming Model & Methodology)。它借助于函数式程序设计语言Lisp的设计思想,提供了一种简便的并行程序设计方法,用Map和Reduce两个函数编程实现基本的并行计算任务,提供了抽象的操作和并行编程接口,以简单方便地完成大规模数据的编程和计算处理。
关于MapReduce的教程
我推荐大家去哔哩哔哩上面搜一些尚硅谷的教程,了解一下
下面话不多说,开始讲解案例。
Demo:交通大数据
需求:统计所有车牌号的次数
代码如下:
package demo;
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.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
//京123456,京343466,京734554,京654686,
public class WordCount {
//主类
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
//***注意主函数里的内容全部都是固定的***
Configuration conf=new Configuration();
Job job = Job.getInstance(conf);
//指定我这个job所在的jar包
job.setJarByClass(WordCount.class);
//指定MapReduce的Map类
job.setMapperClass(MMapper.class);
//指定MapReduce的Reduce类
job.setReducerClass(MReduce.class);
//指定Map类的输入类型
job.setMapOutputKeyClass(Text.class);
//指定Map类的输出类型
job.setMapOutputValueClass(IntWritable.class);
//指定Reduce类的输入类型
job.setOutputKeyClass(Text.class);
//指定Reduce类的输出类型
job.setOutputValueClass(IntWritable.class);
//指定输入路径 args[0] 意思是输入路径第一个
FileInputFormat.setInputPaths(job, new Path(args[0]));
//指定输出路径 注意! 输出路径是可以自动生成的
FileOutputFormat.setOutputPath(job, new Path(args[1]));
boolean res = job.waitForCompletion(true);
//成功返回0 否则1.
System.exit(res?0:1);
}
//Map类
//这里解说一下 一般常用的偏移量就是object和longwritable
public static class MMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
//转换数据类型并切割
String[] line = value.toString().split(",");
//遍历数组,输出<车牌号,1>
for (String v : line) {
context.write(new Text(v), new IntWritable(1));
}
// 京734554 1
}
}
//Reduce类
public static class MReduce extends Reducer<Text, IntWritable, Text, IntWritable>{
protected void reduce(Text key, Iterable<IntWritable> value,
Context context) throws IOException, InterruptedException {
//定义一个计数器
int sum =0 ;
////遍历这一组kv的所有v,累加到sum中
for (IntWritable v : value) {
sum+=v.get();
}
context.write(key, new IntWritable(sum));
}
}
}
运行结果
本次教程到此结束,下面附上部分数据:
![](/qrcode.jpg)
京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,京222566,京111156,京667890,京757775,京234563,京135664,京123456,京343466,京734554,京654686,京234579,京356711,京224564,京553456,京886432,京556780,京122345,京665475,