1、reduce源码中的

GroupComparable和SecondaryComparable到底都是干什么的

理解点1:

源码位置

理解点

secondaryComparable这个是可以对map端按照某种规则排序好的数据进
行边界的界定,就是比如你map端排序的根据是按点之前的字段进行分组的
之后传输到了reduce端了,但是你reduce端想要计算的时候是需要的是
按照点前面的如bj、sh等,和点后面的如cp等,进行计算的话,这个secondaryCpmpare
排序器可以在不改变原有map传输过来的数据的分组排序顺序的情况下进行边界的界定

理解点2:ReduceTask.class这个类和reducer的开始关联了

对于其中的Reducer对象的获取是通过反射实现的,可以看上面的 图片中,的ReflectionUtils.getClass()方法

这个方法调用的是JobContext中的方法

接着ReducerTask.class进行学习

RecordWriter这个是为了最后计算完毕之后向外写出结果的时候用的

而其中的ReducerContext是为了帮助reducer完成数据迭代的一个上下文容器

具体的这个容器的创建的过程见下图

接下来进入到createReduceContext()方法

在这个方法里面初始化ReduceContext对象

下面深入源码进入ReduceContextImpl()

本方法中将获取的方法的参数赋值给ReduceContextimpl类的成员变量,供下面的使用

最后这个方法返回了reducerContext

有reduceTask中的reducerContext对象来接收

之后调用自己定义的reducer或者默认的reducer.class的run()

进入run方法

又跳回到Reducer.class类的run方法

接下来进入nextKey()方法

reducerContextImpl类中的nextKey()方法

进入这个方法的nextKeyValue()

回到Reducer.class的方法,

这个nextKey()仅仅会有一种情况为真,其他的时候都是为假的,而不是看这个和上一个的key是否是是以昂扬的,直到最后的时候,map传递过来的数据集没有数据的时候才会返回false结束左侧的while循环,结束run的调用

接下来看看reducer是怎么界定当前的这个reduce任务该结束了

转到自带源码中的reducer.class的run中的getVlues()方法,

进入RecduceContextImpl类中的到getValue()方法

其中的迭代器的类型

转到迭代器的源码ReduceContextImpl .class

进入到ValueIterIterater类,这个类实现了Iterater接口

这个方法重写了Iterater中的next()方法和hasNext()方法

接下来回到ReduceContextImpl.class的 ValueIterator中理解这个方法中的hasNext()方法

hadoop之mr框架的源码理解注意点的更多相关文章

  1. 卷积神经网络CNN介绍:结构框架,源码理解【转】

    1. 卷积神经网络结构 卷积神经网络是一个多层的神经网络,每层都是一个变换(映射),常用卷积convention变换和pooling池化变换,每种变换都是对输入数据的一种处理,是输入特征的另一种特征表 ...

  2. 【安卓网络请求开源框架Volley源码解析系列】定制自己的Request请求及Volley框架源码剖析

    通过前面的学习我们已经掌握了Volley的基本用法,没看过的建议大家先去阅读我的博文[安卓网络请求开源框架Volley源码解析系列]初识Volley及其基本用法.如StringRequest用来请求一 ...

  3. 【Struts2】如何查看Struts2框架的源码

    学习三大框架时难免遇到不太理解的地方需要去研究框架源码,这里总结一下查看struts2源码的两种方式. 1.直接解压struts2.X.X-all.zip,在的到的解压文件中看到如下目录: 打开图中蓝 ...

  4. 框架-spring源码分析(一)

    框架-spring源码分析(一) 参考: https://www.cnblogs.com/heavenyes/p/3933642.html http://www.cnblogs.com/BINGJJF ...

  5. 框架-springmvc源码分析(一)

    框架-springmvc源码分析(一) 参考: http://www.cnblogs.com/heavenyes/p/3905844.html#a1 https://www.cnblogs.com/B ...

  6. JUC同步器框架AbstractQueuedSynchronizer源码图文分析

    JUC同步器框架AbstractQueuedSynchronizer源码图文分析 前提 Doug Lea大神在编写JUC(java.util.concurrent)包的时候引入了java.util.c ...

  7. .NET Core 3.0之深入源码理解Startup的注册及运行

    原文:.NET Core 3.0之深入源码理解Startup的注册及运行   写在前面 开发.NET Core应用,直接映入眼帘的就是Startup类和Program类,它们是.NET Core应用程 ...

  8. Java8集合框架——LinkedList源码分析

    java.util.LinkedList 本文的主要目录结构: 一.LinkedList的特点及与ArrayList的比较 二.LinkedList的内部实现 三.LinkedList添加元素 四.L ...

  9. 通过transmittable-thread-local源码理解线程池线程本地变量传递的原理

    前提 最近一两个月花了很大的功夫做UCloud服务和中间件迁移到阿里云的工作,没什么空闲时间撸文.想起很早之前写过ThreadLocal的源码分析相关文章,里面提到了ThreadLocal存在一个不能 ...

随机推荐

  1. php 常用数学函数

    函数 描述 实例 输入 输出 abs() 求绝对值 $abs = abs(-4.2); //4.2 数字 绝对值数字 ceil() 进一法取整 echo ceil(9.999); // 10 浮点数 ...

  2. ISCC2018 Reverse & Pwn writeup

    Reference:L1B0 Re RSA256 春秋欢乐赛原题..flag都不变的 给了三个加密文件和公钥证书public.key,可以使用openssl进行处理 $openssl rsa -pub ...

  3. AC自动机(模板+例题)

    首先要明白AC自动机是干什么的: AC自动机其实就是一种多模匹配算法,那么你可能会问什么叫做多模匹配算法.下面是我对多模匹配的理解,与多模与之对于的是单模,单模就是给你一个单词,然后给你一个字符串,问 ...

  4. C 基础 _Generic 泛型应用

    引言 - _Generic 用法简介 #include <stdio.h> #define TYPENAME_CASE(type) \ type: #type, #define TYPEN ...

  5. spring框架中用到了哪些设计模式

    1.代理模式:在AOP和remoting中被用的比较多 2.单例模式:在spring配置文件中定义的bean默认为单例模式 3.模板方法模式:解决代码重复问题 4.前端控制器模式:spring提供了D ...

  6. linux下载phantomjs记录

    step1:建目录: cd /root mkdir PhantomJS step2:下载phantomjs安装包 可以直接进网址下载到本地后,再传到linux路径,例如phantomjs-1.9.7- ...

  7. 环境配置 | 安装Jupyter Notebook及jupyter_contrib_nbextensions库实现代码自动补全

    一.Jupyter Notebook的安装与启动 安装Jupyter Notebook pip3 install jupyter 启动 jupyter notebook 输入命令后会自动弹出浏览器窗口 ...

  8. Selenium3+python自动化013-操作浏览器的Cookie

    为什么要用Cookie?在测试多个页面时候可绕过验证码输入,直接添加cookie,也可以在添加唯一标识时候使用. 一.操作浏览器的Cookie 1.1.验证码的处理方式 说明:WebDriver类库中 ...

  9. Selenium3+python自动化012-测试用例模块化

    测试用例模块化特点:为po模型做准备. 1.提取公共方法. 2.提取数据. 3.提取逻辑. # @Author:lsj # @version V1.0 # -*- coding:UTF-8 -*- i ...

  10. SSM项目集成Lucene+IKAnalyzer在Junit单元测试中执行异常

    个人博客 地址:http://www.wenhaofan.com/article/20181108132519 问题描述 在项目运行以及main方法中能够正常运行,但是使用junit单元测试时却报如下 ...