Shuffle 操作
在spark中的主要操作,触发一个叫作shuffle的事件。shuffle是spark对于重新分布数据的机制,因此数据
能在partitions上进行不同的分组。Shuffle包含在executors和machines上的数据复制,使得
shuffle成为一个复杂的和昂贵的操作。
backgroud
为了理解在shuffle期间发生了什么,参照reduceByKey操作。reduceByKey操作产生新的RDD,单
个key的所有的value被放入到一个tuple中 -- 这个key和对所有的values执行一个减函数的结果。这个挑战
是并不是单个key的所有的values驻留在相同的partition,或者甚至相同的机器,但是它们必须被共同定位来
计算结果。在spark中,数据通常并不是分布在相同一个partition,为了在必要的地方指定的操作。在计算期
间,单个task将运行在单个partition - 因此,为单个reduceByKey的reduce任务执行去组织所有的数据,
Spark需要去执行个多对多的操作。它必须读取所有的partition来找到所有key的所有value,然后在
partition获取values到一起,来为每个key计算最终的结果--这就叫作shuffle。虽然在每个分区的新的shuffle的数据的一系列元素将被确定,partition是排序的,元素是无序的。如
果希望在shuffle之后进行排序,可能通过如下方式:1.mapPartitions 用来排序每个partition,例如:.sorted2.repartitionAndSortWithinPartitions 重新分区的同时,也重新排序3.sortBy 全局排序Rdd可能引起shuffle的操作有 repartition -- repartition coalesce'ByKey' -- groupByKey reduceByKeyjoin -- cogroup join
性能影响
shuffle是一个昂贵的操作,因此它包含 Disk I/O,数据序列化,网络I/O。为shuffle组织数据,
spark产生了一系列的任务 -- map任务来组织数据,一系列的reduce任务来聚合数据。这个命名来自于
MapReduce,并不直接关联Spark的map和reduce操作。本质上,每个map任务的结果是被保存在内存,除非内存不能容纳。然后,结果是基于目标分区进行排序,并
且写入到单个文件中。在Reduce端,task读取相关排序的blocks。shuffle操作能够消耗大量的 heap内存。因此在shuffle之前,在on-heap中申请了数据结构去组织记
录,然后再去转换这个记录。特别是,reduceByKey和aggregateByKey产生这些数据结构在map
端,’ByKey'操作产生数据结果在reduce端。当内存不能容纳数据时,Spark溢写这些表到disk,引进额外的disk I/O吞吐和增加GC。shuffle也产生
大量的中间文件在磁盘上。在Spark1.3时,这些文件是被保存,直到相关的RDDs是不再使用并且GC。这样做的
目的是,如果lineage是被重新计算时,shuffle的文件是不需要重新创建的。GC也可能只发生在一个很长的期
间之后的,如果application保持这个RDD的引用,或者如果GC不是很频繁。这意味着长时间的运行spark job
可能消耗大量的disk空间。临时存储的路径是通过spark.local.dir进行指定,在配置spark Context时。shuffle行为优化通过调整一些配置参数。 http://spark.apache.org/docs/1.6.0/configuration.html
Shuffle 操作相关推荐
- shuffle操作图解以及job-stage-task-partition区别
--------------------------------------------------------------shuffle操作图---------------------------- ...
- 2021年大数据HBase(十五):HBase的Bulk Load批量加载操作
全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 HBase的Bulk Load批量加载操作 一.Bulk L ...
- Spark Shuffle原理解析
Spark Shuffle原理解析 一:到底什么是Shuffle? Shuffle中文翻译为"洗牌",需要Shuffle的关键性原因是某种具有共同特征的数据需要最终汇聚到一个计算节 ...
- Spark shuffle调优
Spark shuffle是什么 Shuffle在Spark中即是把父RDD中的KV对按照Key重新分区,从而得到一个新的RDD.也就是说原本同属于父RDD同一个分区的数据需要进入到子RDD的不同的分 ...
- spark调优(一)-开发调优,数据倾斜,shuffle调优
主要分为开发调优.资源调优.数据倾斜调优.shuffle调优几个部分. 开发调优和资源调优是所有Spark作业都需要注意和遵循的一些基本原则,是高性能Spark作业的基础:数据倾斜调优,主要讲解了一套 ...
- Shuffle 相关
2019独角兽企业重金招聘Python工程师标准>>> Shuffle操作大概是对Spark性能影响最大的步骤之一(因为可能涉及到排序,磁盘IO,网络IO等众多CPU或IO密集的操作 ...
- [Spark][翻译]Spark 架构: Shuffle过程分析
为什么80%的码农都做不了架构师?>>> Spark Architecture: Shuffle Spark架构:Shuffle This is my second artic ...
- Spark Shuffle 解析
5.Spark Shuffle 解析 5.1 Shuffle 的核心要点 5.1.1 ShuffleMapStage 与 FinalStage 在划分 stage 时,最后一个 stage 称为 Fi ...
- RDD 与 DataFrame原理-区别-操作详解
1. RDD原理及操作 RDD (resilientdistributed dataset),指的是一个只读的,可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用.RDD内 ...
最新文章
- Spring中AOP相关的API及源码解析,原来AOP是这样子的
- 如何用极致业务基础平台做一个通用企业ERP系列之二一览表培训
- 运维少年系列 python and cisco (1)
- K3删除物料时提示“物料在存货表-物料中....”
- 网站压力测试软件(Apache JMeter)2.13 官方版 Error: Unable to access jarfile ApacheJMeter.jar
- 【公告】社区周刊即日起停刊
- 计算机组成原理个人笔记(一)
- 关于IE浏览器以及Firefox下冒泡事件的响应层级
- 主管好当:一不指点工作,二不检查工作,三不改正错误
- Mac安装brew及adb环境
- jsp+ssm计算机毕业设计st音乐网站论文【附源码】
- 什么是元数据(Metadata)
- 【魔改蜗牛星际】B双主板变“皇帝板”扩展到8个SATA口
- 华为网络篇 BPDU报文格式-11
- .key+.cer 转成.jks
- 更换Ubuntu的软件仓库为国内的镜像
- Spring学习之旅(二) AOP(面向切面编程)的使用
- 4G DTU的特点及应用方法
- 工具推荐:15款代码生成器
- Python编程练习(三):21 - 30