Hadoop(七)——中下下

shuffle

MapReduce的shuffle分为map阶段的shuffle和reduce阶段的shuffle,下面就分别来做介绍。

map阶段的shuffle:

之前我们学的是map阶段并不是直接把数据给reduce,而是会把数据分好,该分区的分区,该封装的封装,该合并的合并再给到reduce,下面就来详细介绍这个过程。

在这里插入图片描述
1.每一个MapTask都会自带一个缓冲区(默认大小100m)。

2.在缓冲区中会进行分区,排序,合并。

3.缓冲区的大小是固定的,当达到溢出边界(是缓冲区的80%)的时候,缓冲区就会产生溢写操作,
把数据写入磁盘的溢写文件,每次溢写都会产生一个溢写文件。

4.溢写文件都是局部有序整体无序的。

5.当mapTask处理完所有数据后会做一个merge操作会将所有的溢写文件合并,如果缓冲区里也有数据,则会把缓冲区里的数据一起merge到finalout文件中,无论如何,都会产生一个final out 。

6.merge操作:会对整体文件进行分区排序合并,使用的是归并排序。

reduce阶段的shuffle:

这里我们将会知道reduce是如何抓取map中finalout的数据,并且如何输出数据到hdfs上。
在这里插入图片描述
1.当达到启动阈值(默认是0.05,即当有5%的MapTask结束)的时候,ReduceTask就会启动去MapTask抓取数据

2.ReduceTask启动fetch线程通过get请求(携带分区号)的方式来抓取数据,在抓取数据的时候只抓取当前要处理的分区的数据

3.ReduceTask会将抓取来的每一段数据临时存储到本地磁盘上,抓取完成之后,会将这些临时文件merge成一个大文件。在merge过程中,会对数据再次排序。这次排序依然使用的是归并排序

4.merge完成之后,将这个文件中相同的键对应的值分到一组去,形成一个伪迭代器,这个过程称之为分组(group)

5.形成迭代器之后,每一个键调用一次reduce方法

shuffle的优化:

  • 重要 增大缓冲区,实际开发中缓冲区大小一般是250M~400M
  • 增大溢写阈值,可能导致阻塞的风险增加(不建议)
  • 重要 考虑增加Combiner过程,减少数据总量但不改变计算结果
  • 重要 考虑将final out压缩之后再传输,但是解压和压缩过程需要耗费时间和CPU。所以这种方案是在网络资源和压缩时间的取舍
  • 调节ReduceTask的启动阈值(不建议)
  • 重要 适当的增加fetch线程的数量,一般而言这个值会在5000~10000
  • 考虑调大merge因子(不建议)

热门文章

暂无图片
编程学习 ·

Python:% 和 .format() 的使用

目录基本的格式化值转换填充和对齐字符串截断长串结合截断与填充数字填充数字带符号的数字有名字的占位符Getitem 和 Getattr日期时间参数化的格式自定义对象多年来,Python 具有出色的字符串格式化程序,但是有关它们的文档在理论和技术上都太过严格了。通过此站点,我们尝试通…
暂无图片
编程学习 ·

由Spring管理的对象的生命周期

注:完整代码在文章最后 生命周期:某个对象从创建到最终销毁会经历的历程! 通常,需要讨论生命周期时,对应的数据类型的对象都不是由开发人员自行维护的! 被容器维护的对象,都是由容器创建对象,并在适当的时候调用其中的某些方法的!而开发人员需要做的就是“确定满足某条…
暂无图片
编程学习 ·

为什么 SELECT * 效率低?

面试官:“小程,说一下你常用的SQL优化方式吧。” 程序猿小一:“那很多啊,比如不要用SELECT *,查询效率低。巴拉巴拉…” 面试官:“为什么不要用SELECT * ?它在哪些情况下效率低呢?” 程序猿小一:“SELECT * 它好像比写指定列名多一次全表查询吧,还多查了一些无用的字…
暂无图片
编程学习 ·

selenium 点击按钮,打开新标签页后,无法定位新标签页的元素

使用selenium爬取页面时,在弹出浏览器界面上我们明明看到已经自动到达新标签页,却无法定位新标签页的元素原因:实际上程序并没有随浏览器上所看的标签页改变而该改变,也就是说我们在浏览器上看到已经到达标签2,实际上程序默认的还是标签1解决方案:browser.switch_to_wind…
暂无图片
编程学习 ·

NC6 基于元数据的持久化服务接口实现类

基于元数据的持久化服务接口实现类: package nc.md.persist.framework.imp;import java.util.Collection;import nc.md.data.access.NCObject; import nc.md.data.criterion.QueryCondition; import nc.md.model.MetaDataException; import nc.md.persist.framework.IMDPersis…
暂无图片
编程学习 ·

例题 6-18 雕塑(Sculpture,ACM/ICPC NWERC 2008,UVa12171)

原题链接:https://vjudge.net/problem/UVA-12171 分类:图 备注:离散化;floodfill 紫书思路:利用离散化把三维图缩小,用floodfill求出外围空气体积和内表面积,总体积减去空气体积即所求体积,内表面积即所求表面积。 离散化知识参考:https://blog.csdn.net/tlonline/art…
暂无图片
编程学习 ·

51单片机8*8点阵显示“中国”

#include <reg52.h> #include <intrins.h> //位移函数 sbit DIO=P3^4; //2片74HC595数据输入端 sbit S_CLK=P3^5;//串行输入时钟 sbit R_CLK=P3^6;//并行输出时钟 unsigned char code table[2][8]={0xEF,0xEF,0xEF,0x01,0x6D,0x01,0xEF,0xEF,0x01,0x7D,0x01,0x69,0…
暂无图片
编程学习 ·

Spring测试中的事务

目录 文章目录@Transactional @Transactional 1、测试方法加上该注解后事务自动回滚。 2、@BeforeEach与@AfterEach在测试方法的事务中执行 3、@BeforeTransactional与@AfterTransactional在事务执行之前之后执行;并且没有加@Transactional的测试方法不执行这两个注解下的方法…
暂无图片
编程学习 ·

一周信创舆情观察(6.22~6.28)

一、一周舆情要点 第四届世界智能大会本周成功举办,技术服务项目由腾讯云提供支持。大会云签约148个项目,其中内资项目投资809亿元,外资项目投资约16亿美元。会议期间,天津港集团和华为签署战略合作协议,双方将加强信息化顶层设计及智慧港口合作。 数据安全监管趋严,网安…
暂无图片
编程学习 ·

Pytorch_Day02_MNIST数据集识别

欢迎来到黄黄自学室MNIST数据集识别损失函数非线性函数ReLU识别步骤加载数据构建网络模型训练测试加载包utils.py 亲爱的朋友们! 任何时候都要抬头挺胸收下巴,慢慢追赶! MNIST数据集识别 损失函数 待识别目标【0、1、2、3、4、5、6、7、8、9】 做标签:采用one-hot编码方式 …
暂无图片
编程学习 ·

Java学习篇2_入门程序说明、注释、关键字、标识符

上一篇博客:JDK、JRE、JVM三者之间的联系目录 关于一些小补充 入门程序说明 注释 关键字 标识符命名规则 命名规范开始一、关于一些小补充 Java语言的发展历史1995年Sun公司发布Java1.0版本 1997年发布Java 1.1版本 1998年发布Java 1.2版本 2000年发布Java 1.3版本 2002年发布…
暂无图片
编程学习 ·

Java语言基础(二)变量和数据类型

Java语言基础(二)二、变量和数据类型2.1 变量的基本概念2.2 变量的声明和使用2.3 变量使用是注意事项2.4 标识符的命名规则(笔试)关键字2.5 变量输入输出的案例实现2.6 变量输入输出案例的优化和手册介绍2.7 数据类型的分类2.8 常用的进制2.9 十进制与二进制之间的转换(1)正…
暂无图片
编程学习 ·

算法与数据结构(part3)--数据结构

学习笔记,仅供参考,有错必纠文章目录算法与数据结构--基于python数据结构什么是数据结构数据结构的概念抽象数据类型(ADT)算法与数据结构–基于python数据结构什么是数据结构我们为了解决问题,需要将数据保存下来,然后根据数据的存储方式来设计算法,数据的存储方式不同,会…
暂无图片
编程学习 ·

2020抖音小店入驻流程

原文链接:https://blog.ccswust.org/15574.html一、访问入驻后台使用电脑浏览器打开网址https://sso.douyin.com/login/?service=https://fxg.jinritemai.com/index.html#/home,选择【抖音号登陆】,【重要,一定要登录自己的抖音号,才能把店铺和抖音号绑定在一起】※建议请…
暂无图片
编程学习 ·

https://www.cnblogs.com/sunsky303/p/7731911.html https://blog.csdn.net/lilele12211104/article/details/80393463
暂无图片
编程学习 ·

django-基础二(url与视图)

一、视图 1、视图作用:完成相关逻辑 2、视图写在app的views.py文件夹中,且视图函数的第一个参数一定是request,且必须renturn返回httpresponsebase对象或者是子类对象 二、url 1、URL映射 url作用:视图与浏览器界面沟通桥梁。在用户输入了某个url,请求到我们的网站的时候,…