理解Spark中的shuffle

3

Spark中的洗牌(据我理解):

  1. 确定记录要进入的分区(哈希和模数)
  2. 序列化需要进入同一分区的数据
  3. 传输数据
  4. 另一端的执行器对数据进行反序列化和读取

我有一个问题:

  1. 执行器之间的数据如何传输?即使我们在内存中有足够的空间。假设我们的执行内存每个执行器为50GiB,而要洗牌的整个数据只有100 MB。数据传输是从存储内存(exec 1)到存储内存(exec 2),还是涉及磁盘写作为中间步骤?
1个回答

2

Spark的Shuffle输出总是写入磁盘。

为什么?因为简单地说,你不能直接从一个执行器内存发送数据到另一个执行器内存,必须先写入本地再加载到执行器内存中,这就是在Shuffling期间进行序列化和反序列化的原因,这也是拥有高质量磁盘(SSD)对于Spark来说非常重要的原因。

摘自blog.scottlogic.com

在Shuffling期间,数据被写入磁盘并在网络上传输,阻止了Spark在内存中进行处理,导致性能瓶颈。


1
请问您能否告诉我获取的数据是否也写入磁盘,即在Reducer端?更具体地说,流程是...映射-->磁盘-->执行器(Reducer端)-->磁盘吗? - figs_and_nuts
但是序列化并不意味着你需要写入磁盘。 - Denziloe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接