什么是Spark溢出(磁盘和内存)?

qacovj5a  于 2022-12-19  发布在  Apache
关注(0)|答案(1)|浏览(428)

根据文件:
Shuffle spill(memory〉是内存中已重排数据的反序列化形式的大小。
随机溢出(磁盘)是磁盘上数据的序列化形式的大小。
我对洗牌的理解是:
1.每个执行器都有自己的分区,并将它们散列分区为200个新分区(这200个分区可以更改)。每个新分区都与一个执行器相关联,稍后它将转到该执行器。例如:For each existing partition: new_partition = hash(partitioning_id)%200; target_executor = new_partition%num_executors,其中%是模运算符,num_executors是群集上的执行器数。
1.这些新分区被转储到其初始执行器的每个节点的磁盘上。每个新分区稍后将由target_executor读取
1.目标执行器(从生成的200个分区中)选择各自的新分区
我对洗牌操作的理解正确吗?
你能帮我把shuffle spill(内存)和shuffle spill(磁盘)的定义放在shuffle机制的上下文中(如果上面描述的是正确的话)吗?例如(也许):“shuffle spill(disk)是发生在上面提到的点2中的部分,其中200个分区被转储到它们各自节点的磁盘”(我不知道这样说是否正确;仅举一个例子)

g2ieeal7

g2ieeal71#

让我们看看docu,我们可以找到这个:

Shuffle read: Total shuffle bytes and records read, includes both data read locally and data read from remote executors

这是在stage处理开始时执行器加载到内存中的内容,您可以将其视为其他执行器在前一个stage中准备的shuffle文件

Shuffle write: Bytes and records written to disk in order to be read by a shuffle in a future stage

这是您的阶段的输出大小,它可能会被下一阶段拾取进行处理,换句话说,这是此阶段创建的随机文件的大小
现在什么是洗牌溢出

Shuffle spill (memory) is the size of the deserialized form of the shuffled data in memory.
Shuffle spill (disk) is the size of the serialized form of the data on disk.

当你的执行程序正在阅读随机文件,但它们不能放入这个执行程序的执行内存时,随机溢出就会发生。当这种情况发生时,一些数据块会从内存中删除并写入磁盘(换句话说,它会溢出到磁盘)
回到你的问题:溢出(内存)和溢出(磁盘)之间的区别是什么?它描述的是完全相同的数据块。第一个指标是描述那些溢出的数据在移动到磁盘之前在内存中所占用的空间,第二个指标是描述它们在写入磁盘时的大小。这两个指标可能不同,因为数据在写入磁盘时可能有不同的表示,例如它们可能被压缩。

相关问题