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()方法

最新文章

  1. Ios学习之容器的理解
  2. 简单几何(相对运动距离最值) UVA 11796 Dog Distance
  3. 21、JavaScript加强
  4. html5实现GIF动画!
  5. [drp 5] pageModel的建立,实现分页查询
  6. 用Jsoup实现html中img标签地址替换
  7. Java中PreparedStatement和Statement的用法区别(转)
  8. [译]URL和URI的区别
  9. web 安全知识
  10. javaScript高级程序设计笔记 2
  11. 约定Jenkins构建脚本
  12. Git开发分支使用与管理规范
  13. 关于String类学习的一些笔记(本文参考来自程序员考拉的文章)
  14. socket实现聊天功能(二)
  15. Django ORM相关
  16. Tensorflow实现LeNet-5、Saver保存与读取
  17. 做游戏的小伙伴们注意了,DDoS还可以这样破!
  18. 用友时空KSOA功能挖掘之zl_func函数
  19. Luogu3804 【模板】后缀自动机
  20. 安装完.net core sdk 后部署 ASP.NET Core 出现错误502.5

热门文章

  1. PAT (Basic Level) Practice (中文)1016 部分A+B (15 分)
  2. 设置完代理IP,手机连接WiFi时连不上,一直在转
  3. 自主开发编程语言被指Python套壳,中科院开发者道歉
  4. react admin
  5. go-web 获取get/post请求中的请求头和表单数据
  6. Quartz.NET 2.x教程
  7. (转) 统计在从1到n的正整数中1出现的次数
  8. Virtual DOM(八)
  9. AntDesign(React)学习-13 Warning XX should not be prefixed with namespace XXX
  10. 二分-C - Pie