自定义代码流程
WordCount-Map实现
- 1、实例一个class 继承Mapper<输入的key的数据类型,输入的value的数据类型,输出的key的数据类型,输出的value的数据类型
- 2、重写map方法 map(LongWritable key, Text value, Context context)
key: 行首字母的偏移量
value: 一行数据
context:上下文对象 - 3、根据业务需求进行切分,然后逐一输出
WordCount-Reduce实现
- 1、实例一个class 继承Reducer<输入的key的数据类型,输入的value的数据类型,输出的key的数据类型,输出的value的数据类型
- 2、重写reduce方法 reduce(Text key, Iterable values, Context context)
key: 去重后单词
values: 标记的1(好多个1,key出现几次就有几个1)
context:上下文对象 - 3、遍历values 进行汇总计算
WordCount-Driver实现
1、实例一个class 继承Configured 实现Tool
2、重写run方法
3、在run方法中将自己编写的map和reduce添加到集群
package com.czxy.hadoop.mapReduce.demo02;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocalFileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
/**
* @author 550894211@qq.com
* @version v 1.0
* @date 2019/11/16
*/
public class PosCountDriver extends Configured implements Tool {
public static void main(String[] args) throws Exception {
ToolRunner.run(new PosCountDriver(), args);
}
@Override
public int run(String[] args) throws Exception {
//判断目录是否存在 存在则删除
Path outPath = new Path("posCount");
LocalFileSystem local = FileSystem.getLocal(new Configuration());
if (local.exists(outPath)) {
local.delete(outPath, true);
}
//1.获取job实例
Job job = Job.getInstance(new Configuration(), "posCount");
//2.注册主类
job.setJarByClass(PosCountDriver.class);
//3.设置输入
job.setInputFormatClass(TextInputFormat.class);
TextInputFormat.setInputPaths(job, new Path("C:\\Users\\27727\\Desktop\\学习文件夹\\03.课后作业\\03.MapReduce\\运营商题目\\数据"));
//4.设置mapper
job.setMapperClass(PosCountMapper.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
//5.设置reduce
job.setReducerClass(PosCountReduce.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(NullWritable.class);
//6.设置输出
job.setOutputFormatClass(TextOutputFormat.class);
TextOutputFormat.setOutputPath(job, outPath);
//7.开启作业
boolean result = job.waitForCompletion(true);
return result ? 0 :1;
}
}