MapReduce 源码分析

本篇博客根据wordCount代码进行分析底层源码的。以下称它为WC类。

package com.henu;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.Partitioner;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;/*** @author George* @description** hello you**/
public class WC {public static class WCMapper extends Mapper<LongWritable, Text,Text, IntWritable>{Text k1 = new Text();IntWritable v1 = new IntWritable(1);@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line = value.toString();String[] strings = line.split("\\s+");for (String s : strings) {k1.set(s);context.write(k1,v1);}}}public static class WCReducer extends Reducer<Text, IntWritable,Text, IntWritable> {int count;IntWritable v2 = new IntWritable();@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {count = 0;for (IntWritable value : values) {count += value.get();}v2.set(count);context.write(key,v2);}}public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setJarByClass(WC.class);job.setMapperClass(WCMapper.class);job.setReducerClass(WCReducer.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);//map阶段设置分区job.setPartitionerClass(MyPartitoner.class);job.setNumReduceTasks(1);FileInputFormat.setInputPaths(job,new Path(args[0]));FileOutputFormat.setOutputPath(job,new Path(args[1]));job.waitForCompletion(true);}private static class MyPartitoner extends Partitioner<Text,IntWritable> {@Overridepublic int getPartition(Text text, IntWritable intWritable, int i) {String kStr = text.toString();return kStr.equalsIgnoreCase("hello")?0:1;}}
}

在WC类的main方法中,点击进入job的waitForCompletion方法。

waitForCompletion()调用 submit()

点击进入submit

submit()调用 submitJobInternal()方法把作业提交到集群

点击进入submitJobInternal方法中

点击进入writeSplits方法,writeSplits()调用 writeNewSplits()

进入WriteNewSplits方法中

然后搜索进入FileInputFormat类中

之前都是提交前的准备,最终提交作业

总的来说,客户端做了以下几件事:
配置完善
检查路径
计算 split:maps
资源提交到 HDFS
提交任务
然后,AppMaster 根据 split 列表信息向 ResourceManager 申请资源,RS 创建 container,然
后 AppMaster 启动 container,把 MapReducer 任务放进去。

图示总结:

MapReduce 源码分析(一)准备阶段相关推荐

  1. 嵌入式之uboot源码分析-启动第一阶段学习笔记

    注: 以下的内容来自朱老师物联网大讲堂uboot部分课件 Uboot启动第一阶段start.S执行步骤 1.头文件包含 <config.h>(x210的各种宏定义) <version ...

  2. uboot源码分析-启动第一阶段

    注:基于九鼎x210 uboot 在SourceInsight软件下 一.start.S引入 1.u-boot.lds中找到start.S入口 (1)在C语言中整个项目的入口就是main函数(这是C语 ...

  3. MapReduce源码分析_李孟_新浪博客

    job.waitForCompletion(true);进入源码 submit()-> connect();连接,客户端获取服务端的代理对象 connect()->new Cluster( ...

  4. Mapreduce源码分析(一):FileInputFormat切片机制,源码详解

    FileInputFormat切片机制,源码详解 1.InputFormat:抽象类 只有两个抽象方法 public abstract List<InputSplit> getSplits ...

  5. MapReduce源码分析之作业Job状态机解析(一)简介与正常流程浅析

    作业Job状态机维护了MapReduce作业的整个生命周期,即从提交到运行结束的整个过程.Job状态机被封装在JobImpl中,其主要包括14种状态和19种导致状态发生的事件. 作业Job的全部状态维 ...

  6. MapReduce源码分析总结

    http://blog.csdn.net/HEYUTAO007/article/details/5725379 参考: 1 caibinbupt的源代码分析http://caibinbupt.java ...

  7. MapReduce源码分析之JobSplitWriter

    JobSplitWriter被作业客户端用于写分片相关文件,包括分片数据文件job.split和分片元数据信息文件job.splitmetainfo.它有两个静态成员变量,如下: [java] vie ...

  8. ConcurrentHashMap的源码分析-数据迁移阶段的实现分析

    通过分配好迁移的区间之后,开始对数据进行迁移.在看这段代码之前,先来了解一下原理 synchronized (f) {//对数组该节点位置加锁,开始处理数组该位置的迁移工作 if (tabAt(tab ...

  9. UBOOT源码分析的第一阶段start.S分析(3)

    之前我们更新到了lowlevel_init代码处了. 看到lowlever_init这里的代码还是有点多哈. 但是看英语的注释我们也能看懂每一部分的代码到底是干什么的. 第42行 push {lr}, ...

最新文章

  1. Windows Vista和XP系统功能大比拼
  2. 手把手 | Python代码和贝叶斯理论告诉你,谁是最好的棒球选手
  3. vue点击按钮怎么跳转图片_vue-router组件里面点击一个按钮跳转到一个新的组件该怎么实现...
  4. python3 urllib安装_对python3 urllib包与http包的使用详解
  5. java ssm框架 缓存_SSM框架之Mybatis(7)延迟加载、缓存及注解
  6. HDU 4099 Revenge of Fibonacci (数学+字典数)
  7. php图片上传有黑色背景,php Imagemagick jpg黑色背景
  8. 前端笔记 | CSS基础
  9. linux C语言 SOCKET 服务器断开导致客户端SEND崩溃问题解决办法
  10. 软件设计 抽象_调试抽象给软件工程师带来正念的好处
  11. 淘宝直通车展现位置和人群精准如何运用
  12. 2021桂林市高考一调成绩查询,2021年广西桂林市高考化学一调试卷.docx
  13. 一家VC支持企业的发展轨迹——了解每次融资后股权和期权的变化,以及股份是如何被稀释的【转载】...
  14. ipc4 - A 转换AV号(avtobv)
  15. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException异常产生的原因及解决办法
  16. Docker实现SpringBoot项目的快速构建(二)
  17. Flink入门技术分享PPT之二
  18. android 7.1 权限自动授权(不弹出授权对话框)
  19. STM32+AD7124+热电偶方案+Pt100冷端补偿解析工程源码
  20. 这几款效率神器,Windows装机必备

热门文章

  1. CodeForces - 1486E Paired Payment(分层图最短路)
  2. POJ - 3422 Kaka's Matrix Travels(网络流-最大费用最大流+拆点法)
  3. HDU - 1540 Tunnel Warfare(线段树+区间合并)
  4. pythonrequests解析_Python requests获取网页常用方法解析
  5. Duplicate entry ‘211‘ for key ‘PRIMARY‘异常解决
  6. Miller-Rabin素数测试
  7. 梅朵是藏语鲜花的意思
  8. 【Boost】以boost::function和boost:bind取代虚函数
  9. __declspec(novtable) 的用法
  10. 如何定位Release程序崩溃原因