Spark Shuffle过程

Spark Shuffle是连接Map和Reduce的关键步骤,涉及数据的重新分布和网络传输。它在PairedRDD操作中产生,如reduceByKey,可能导致数据倾斜和性能瓶颈。优化Shuffle包括使用map-side预聚合减少数据传输,以及理解宽窄依赖对Stage划分的影响。内存管理和数据分布均衡对避免Shuffle带来的问题至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. job :由一个 rdd 的 action 触发的动作,可以简单的理解为,当你需要执行一个 rdd 的 action 的时候,会生成一个 job。Job简单讲就是提交给spark的任务。

  2. stage : stage 是一个 job 的组成单位,就是说,一个 job 会被切分成 1 个或 1 个以上的 stage,然后各个 stage 会按照执行顺序依次执行。简单地说Stage是每一个job处理过程要分为的几个阶段。

  3. task : 即 stage 下的一个任务执行单元,一般来说,一个 rdd 有多少个 partition,就会有多少个 task,因为每一个 task 只是处理一个 partition 上的数据。Task是任务运行的最小单位。最终是要以task为单位运行在executor中。

stage的task的数量是由输入文件的切片个数来决定的。在HDFS中不大于128m的文件算一个切片(默认128m)。通过算子修改了某一个rdd的分区数量,task数量也会同步修改。

一般情况下,我们一个task运行的时候,使用一个cores,理论上:每一个stage下有多少的分区,就有多少的task,task的数量就是我们任务的最大的并行度。实际上:最大的并行度,取决于我们的application任务运行时使用的executor拥有的cores的数量。task数量超过这个cores的总数先执行cores个数量的task,然后等待cpu资源空闲后,继续执行剩下的task。

 

RDD,即弹性分布式数据集,全称为Resilient Distributed Dataset,是一个容错的,并行的数据结构,可以让用户显式地 将数据存储到磁盘和内存中,并能控制数据的分区。同时,RDD还提供了一组非常丰富的操作来操作这些数据,如:map,flatMap,filter等转换操作,以及SaveAsTextFile,conutByKey等行动操作。记录了该 RDD 是通过哪些 Transformation 得到的,在计算机中使用 lineage 来表示这种血缘结构,lineage 形成一个有向无环图 DAG, 整个计算过程中,将不需要将中间结果落地到 HDFS 进行容错,加入某个节点出错,则只需要通过 lineage 关系重新计算即可.

PairedRDD:(键值对分布式数据集)Spark 为包含键值对类型的 RDD 提供了一些专有的操作,称为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值