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

当我的 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

https://stackoverflow.com/questions/70863540/

相关文章:

c++ - 用方括号 [] 初始化 std::vector ;怎么了?

visual-studio - 如何在 D 盘中完全安装 Visual Studio?

python - 可视化 DASK 任务图

python - 给定四边形的角,使用 matplotlib 在 3d 中绘制阴影四边形

python - Kubernetespodoperator如何使用cmds或者cmds和argum

python - PyTorch 中的 DataLoader 和 DataLoader2 有什么不同

r - 计算矩阵内的元素

java - Lombok 继承 : how to set default value for fi

sql - Postgres SELECT 查询中的模式匹配

angular - 如何配置 nginx 以在/和代理/api 上为另一个 api 服务器提供 An