Shuffle(洗牌)
Shuffle(洗牌)
图
map
1.Map Task的输出k v,一开始会进入溢写缓冲区中,对数据做处理,比如分区、排序等操作。
2.有几个Map Task,就有几个对应的溢写缓冲区(分区)
3.溢写缓冲区默认是100MB,溢写阈值:0.8。(都可通过配置文件调节)
4.当缓冲区中的数据达到溢写阈值时,会发生Spill溢写过程。把内存中数据溢写到磁盘的文件上。
5.第4步生成的文件,称为Spill溢写文件
6.每一个Spill文件里的数据都是已分好区,且排好序的
7.当Spill过程结束之后,会发生Merge过程。目的是将多个Spill合成最后的结果文件(Finaloutput)。
8.结果文件是一个已分好区,且已排序的文件。
9.Spill和Merge过程不一定会发生。
10.如果发生了Spill过程,最后存留在溢写缓冲区里数据,会Flush到文件中。目的是确保数据都落到文件中。
11.如果发生了Spill过程,但不一定会发生Merge。即如果只有一个Spill文件,则此文件就是最后的结果文件。
12.从性能调优的角度,可以加入Combiner中间过程,会减少数据在溢写缓冲区的存储,间接减少了Spill次数,即减少了磁盘的I/O次数。
13.如果加入了Combiner中间过程,在溢写缓冲区的处理阶段是一定会发生的。但是在Merge过程中,可能会发生。
14.Merge的Combiner不发生的条件:Spill文件的数量<3
15.从性能调优的角度,可以适当增大溢写缓冲区的大小,可以减少Spill的溢写次数。要根据服务的硬件情况来调节。一般服务器内存:32GB或64GB。结合集群的:slave节点数量+Job数量+每个Job的MapTask数量
16.溢写缓冲区也叫环写缓冲区(环形缓冲区),注意:溢写阈值的参数可调,但是不要调成100%。目的是为了避免产生写阻塞时间。此外,环形缓冲区的好处是每个MapTask重复利用同一块内存地址空间,可以减少内存碎片的产生,提高内存使用率,而且从GC角度来看,可以减少full gc发生的次数。
17.可以开启Map Task的压缩机制,将最后的结果文件做压缩。好处可以减少网络数据的传输。
18.当Merge过程结束后,所有的Spill文件被删除
19.有几个Map Task ,就有几个最后结果文件。
20.最后的结果文件存到服务节点的本地磁盘上。
21.虽然一个Map Task处理的切片数据是128MB(满的情况),但是不能凭输入的数据大小来判断map的输出大小,要根据实际的业务代码来判断。
22.Map Task的输出结果有两类收集器:
①DirectMapOutputCollector 在没有reducer组件的情况下使用
②MapOutputBuffer 在有reducer组件的情况收集,在这个类中,包含了Spill 、溢写缓冲区相关的对象
Reduce
1.当Map阶段接收,reduce会Fetch自己分区的数据
2.reduce 的Fetch结束后,会进行Merge 和Sort
3.Merge和Sort结束后,会发生reduce,按相同key聚合,形成key iterator传给开发者
4.Fetch线程数默认是5个,此参数可以调节。一般的做法是让此线程数接近或等于map task 数量。达到并行抓取的目的。
Shuffle(洗牌)的更多相关文章
- 【BZOJ-1965】SHUFFLE 洗牌 快速幂 + 拓展欧几里德
1965: [Ahoi2005]SHUFFLE 洗牌 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 541 Solved: 326[Submit][St ...
- BZOJ 1965: [Ahoi2005]SHUFFLE 洗牌( 数论 )
对于第x个数, 下一轮它会到位置p. 当x<=N/2, p = x*2 当x>N/2, p = x*2%(N+1) 所以p = x*2%(N+1) 设一开始的位置为t, 那么t*2M%(N ...
- 1965: [Ahoi2005]SHUFFLE 洗牌
1965: [Ahoi2005]SHUFFLE 洗牌 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 408 Solved: 240[Submit][St ...
- 【bzoj1965】: [Ahoi2005]SHUFFLE 洗牌 数论-快速幂-扩展欧几里得
[bzoj1965]: [Ahoi2005]SHUFFLE 洗牌 观察发现第x张牌 当x<=n/2 x=2x 当x>n/2 x=2x-n-1 好像就是 x=2x mod (n+1) 就好 ...
- [AHOI2005] SHUFFLE 洗牌
1965: [Ahoi2005]SHUFFLE 洗牌 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 952 Solved: 630[Submit][St ...
- random array & shuffle 洗牌算法 / 随机算法
random array & shuffle shuffle 洗牌算法 / 随机算法 https://en.wikipedia.org/wiki/Fisher–Yates_shuffle ES ...
- Fisher–Yates shuffle 洗牌算法(zz)
1,缘起 最近工作上遇到一个问题,即将一组数据,比如[A,B,C,D,E]其中的两个B,E按随机排列,其他的仍在原来的位置: 原始数组:[A,B,C,D,E] 随机字母:[B,D] 可能结果:[A,B ...
- bzoj 1965: [Ahoi2005]SHUFFLE 洗牌
#include<cstdio> #include<cstring> #include<iostream> #define ll long long using n ...
- 1965: [Ahoi2005]SHUFFLE 洗牌 - BZOJ
Description 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联 ...
- 【BZOJ】【1965】SHUFFLE 洗牌
扩展欧几里德+快速幂 每次转换位置:第x位的转移到2*x %(n+1)这个位置上 那么m次后就到了(2^m)*x %(n+1)这个位置上 那么找洗牌m次后在 l 位置上的牌就相当于解线性模方程: (2 ...
随机推荐
- Python开课复习9-28
一.什么是迭代器#迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 举例: l=[1,2,3] count=0 while co ...
- java.io.IOException: java.sql.SQLException: ORA-01502: index 'BTO.PK_xxxxx' or partition of such index is in unusable state
最近由于数据库的全备出问题了,所以一直在观察. 刚好发现很多不需要的数据,就删了几百个G的数据吧. 今天突然就报这个问题. java.io.IOException: java.sql.SQLExcep ...
- 2019.01.23 hdu1964 Pipes(轮廓线dp)
传送门 题意简述:给一个没有障碍的网格图,任意两个格子连通需要花费一定代价,现在求一条覆盖所有格子的哈密顿回路的总权值的最小值. 思路: 跟这道题一毛一样,除了把求和变成求最小值以外. 代码: #in ...
- 2019.01.04 洛谷P4719 【模板】动态dp(链分治+ddp)
传送门 ddpddpddp模板题. 题意简述:给你一棵树,支持修改一个点,维护整棵树的最大带权独立集. 思路: 我们考虑如果没有修改怎么做. 貌似就是一个sbsbsb树形dpdpdp,fi,0f_{i ...
- 2019.01.02 poj1322 Chocolate(生成函数+二项式定理)
传送门 生成函数好题. 题意简述:一个袋子里有ccc种不同颜色的球,现要操作nnn次,每次等概率地从袋中拿出一个球放在桌上,如果桌上有两个相同的球就立刻消去,问最后桌上剩下mmm个球的概率. 第一眼反 ...
- 2018.10.25 uoj#308. 【UNR #2】UOJ拯救计划(排列组合)
传送门 有一个显然的式子:Ans=∑A(n,i)∗用i种颜色的方案数Ans=\sum A(n,i)*用i种颜色的方案数Ans=∑A(n,i)∗用i种颜色的方案数 这个东西貌似是个NPCNPCNPC. ...
- vue 开发系列(六) 企业微信整合
概述 手机端程序可以和企业微信进行整合,我们也可以使用企业微信JSSDK功能,实现一些原生的功能. 整合步骤 在整合之前需要阅读 整合步骤. http://work.weixin.qq.com/api ...
- IntelliJ IDEA 2017版 spring-boot2.0.4+mybatis 自动部署的细节问题
一.加载pom依赖包 <!--spring-boot开发热部署--> <dependency> <groupId>org.springframework.boot& ...
- Effective C++ 随笔(4)
条款21:必须返回对象时,别妄想返回其reference 例子: Raional类可以执行有理数的一些运算,并且使用heap内存申请 并且其operator*函数为 const Rational&am ...
- docker 搭建 MYSQL并且完成主从复制
mysql主从复制逻辑: 1.从库执行start slave 开启主从复制. 2.从库请求连接到主库,并且指定binlog文件以及位置后发出请求. 3.主库收到从库请求后,将信息返回给从库,除了信息日 ...