gpt4 book ai didi

apache-spark - 由于执行者丢失导致洗牌阶段失败

转载 作者:行者123 更新时间:2023-12-05 04:36:18 30 4
gpt4 key购买 nike

当我的 spark 作业失败时,我收到以下错误 **“org.apache.spark.shuffle.FetchFailedException:维护要获取的 block 数据的相对远程执行程序(Id:21)已死。” **

我的 spark 作业概览

输入大小约为 35 GB

我已经广播将所有较小的表与母表连接成一个 dataframe1,然后我在每个大表和 dataframe1 上加盐,然后再与 连接dataframe1(左表)。

使用的配置文件:

@configure(profile=[
'EXECUTOR_MEMORY_LARGE',
'NUM_EXECUTORS_32',
'DRIVER_MEMORY_LARGE',
'SHUFFLE_PARTITIONS_LARGE'
])

使用上述方法和配置文件,我能够将运行时间减少 50%,但我仍然遇到Shuffle Stage Failing Due to Executor Loss 问题。

有什么办法可以解决这个问题吗?

最佳答案

您可以尝试多种方法:

  1. 广播连接:如果您使用广播提示连接多个较小的表,那么(许多较小表的)结果表可能太大而无法容纳在每个执行程序内存中。因此,您需要查看 dataframe1 的总大小。
  2. 35GB 确实不大。也可以尝试配置文件“EXECUTOR_CORES_MEDIUM”,它确实增加了数据计算的并行性。使用动态分配(16 个执行程序应该适合 35GB)而不是静态分配。如果一次没有 32 个执行程序可用,则构建不会开始。 “DRIVER_MEMORY_MEDIUM”应该足够了。
  3. Spark 3.0 通过自适应查询执行自行处理倾斜连接。所以,你不需要使用加盐技术。有一个名为“ADAPTIVE_ENABLED”的配置文件,您可以使用代工厂。自适应查询执行的其他设置,您必须使用 Foundry 随时可用的“ctx”spark 上下文对象手动设置。

AQE 的一些引用资料: https://learn.microsoft.com/en-us/azure/databricks/spark/latest/spark-sql/aqe https://spark.apache.org/docs/latest/sql-performance-tuning.html#adaptive-query-execution

关于apache-spark - 由于执行者丢失导致洗牌阶段失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70863540/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com