目录
一、简介
二、WordCount
三、setup与cleanup
四、Combiner
五、MapReduce中shuffle
六、MapReduce处理数据倾斜的一些方法
七、MapReduce内部处理数据流程
一、简介
MapReduce计算框架
将计算过程分为两个阶段:Map和Reduce
Map阶段并行处理输入数据;
Reduce阶段对Map结果进行汇总
Shuffle连接Map和Reduce两个阶段
Map Task将数据写到本地磁盘;
Reduce Task从每个Map Task上读取一份数据;
仅适合离线批处理
具有较好的容错性和扩展性;
适合批处理任务;
缺点:
启动Map/Reduce任务开销大、过多使用磁盘导致IO频繁等;
二、WordCount
public class Driver {
public static void main(String[] args) throws Exception {
// 获取一个提交mr程序到yarn上去的客户端对象
Configuration conf = new Configuration();
// 设置参数,指定本mr程序将提交到Yarn集群中去分布式执行
conf.set("mapreduce.framework.name", "yarn");
Job job = Job.getInstance(conf);
// 提交mr任务之前,需要先设置这个mr任务的一些信息
// 指定我们的mr程序所在的jar包路径
//job.setJar("/root/wc.jar");
job.setJarByClass(YarnClient.class); //可以根据本类的类加载器获得本类所在jar包的路径
// 指定Mapper类和Reducer类
job.setMapperClass(WordcountMapper.class);
job.setReducerClass(WordcountReducer.class);
// 指定我们的Mapper输出的key-value的类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
// 指定我们的reducer输出的key-value的类型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
// 指定我们要处理的数据文件所在位置
FileInputFormat.setInputPaths(job, new Path("/wordcount/input/"));
// 指定程序最后输出的结果文件所在位置(输出目录必须是不存在的目录,否则会抛异常)
FileOutputFormat.setOutputPath(job, new Path("/wordcount/output/"));
// 指定本mr任务,reduce task的并行实例数
job.setNumReduceTasks(2);
// 将本mr任务提交给yarn
boolean res = job.waitForCompletion(true); //阻塞方法,一直会等待