Apache spark 平行度降低会不会导致洗牌溢出?

Apache spark 平行度降低会不会导致洗牌溢出?,apache-spark,Apache Spark,举个例子: 我有一个有5个节点的集群,每个节点有64个内核和244 GB内存 我决定在每个节点上运行3个执行器,并将执行器内核设置为21,执行器内存设置为80GB,这样每个执行器可以并行执行21个任务。现在考虑315个(63×5)的数据分区,其中314个分区的大小为3GB,但其中一个是30GB(由于数据偏移)。p> 所有接收到3GB分区的执行器都占用了63GB(21*3=因为每个执行器可以并行运行21个任务,每个任务占用3GB的内存空间) 但是,接收30GB分区的一个执行器将需要90GB(20*

举个例子:

我有一个有5个节点的集群,每个节点有64个内核和244 GB内存

我决定在每个节点上运行3个执行器,并将执行器内核设置为21,执行器内存设置为80GB,这样每个执行器可以并行执行21个任务。现在考虑315个(63×5)的数据分区,其中314个分区的大小为3GB,但其中一个是30GB(由于数据偏移)。p> 所有接收到3GB分区的执行器都占用了63GB(21*3=因为每个执行器可以并行运行21个任务,每个任务占用3GB的内存空间)

但是,接收30GB分区的一个执行器将需要90GB(20*3+30)内存。那么,这个执行器是先执行3GB的20个任务,然后加载30GB的任务,还是只加载21个任务,然后发现一个任务必须溢出到磁盘?如果我将executor cores设置为15,那么接收30 GB分区的executor只需要14*3+30=72 GB,因此不会溢出到磁盘

那么在这种情况下,减少并行度会不会导致洗牌溢出?

@Venkat Dabri

请用适当的回车/空格将问题格式化好吗

这里有几点建议

Spark(Shuffle)Map Stage==>每个分区的大小取决于文件系统的块大小。例如,如果数据是从HDFS读取的,每个分区将尝试使数据接近128MB,因此对于输入数据,分区数=楼层(文件数*块大小/128(实际使用的是122.07兆字节))

现在,您描述的场景是针对Reducer(结果阶段)中的无序数据

在这里,由reducer任务处理的块被称为无序块,默认情况下,Spark(用于SQL/Core API)将启动200个reducer任务

现在需要记住的重要一点是Spark可以保存最大2GB,因此,如果您的分区太少,并且其中一个分区执行了洗牌块>2GB的远程提取,您将看到类似
大小超过整数的错误。Max_值


为了缓解这种情况,在默认限制内Spark采用了许多优化(压缩/钨排序洗牌等),但作为一名开发人员,我们可以尝试智能地重新划分扭曲的数据,并调整默认并行性,我知道你上面说的。这个答案不能回答我的问题。可以使用重新分区来设置输入分区。类似地,可以使用spark.sql.shuffle.partitions相应地设置每个阶段的分区。因此,我没有使用您在回复中建议的默认值。