【问题标题】:Pyspark job freezes with too many vcpusPyspark 作业因 vcpus 过多而冻结
【发布时间】:2021-06-07 09:45:16
【问题描述】:

TLDR:我有一个 pyspark 作业,当我在具有 16 个 vcpus 的 ec2 实例中运行它时,它会在 10 分钟内完成,但如果我使用它会冻结(它不会失败,只是永远不会完成)一个拥有超过 20 个 vcpus 的实例。我已经尝试了所有我能想到的方法,但我只是不知道为什么会这样。

全文

我有大约 200 个小型 pyspark 作业,出于成本和灵活性的考虑,我使用带有 spark docker 的 aws batch 而不是 EMR 来执行这些作业。最近,我决定围绕这些作业的最佳配置进行试验,我意识到一些奇怪的事情:使用 16 个或更少 vcpus 快速完成(大约 10 分钟)的作业永远不会以 20 个或更多(我等了 3 小时)结束。我首先想到的是批处理或 ecs-agents 管理任务的方式可能有问题,所以我尝试直接在 ec2 中运行 docker 并遇到了同样的问题。然后我认为问题出在docker镜像上,所以我尝试创建一个新的:

同样的事情发生了。然后我认为问题完全出在使用 docker 上,所以我直接在 ec2 中安装了所有东西,得到了相同的结果。尝试更改火花版本,也发生了同样的事情。认为这可能是硬件阻塞太多线程的问题,所以我切换到 AMD 的实例,没有任何改变。尝试修改一些配置,驱动程序使用的内存量,但总是有相同的结果:16个vcpus它工作,超过它,它停止。

其他细节:

  • 根据日志,它似乎总是停在同一点:s3 上的 parquet 读取操作,但 parquet 文件非常小(> 1mb),所以我认为这不是实际问题。
  • 之后它有时仍然有日志,但没有什么真正有用的,只是“INFO ContextCleaner: Cleaned accumulator”。
  • 我使用 s3a 从 s3 读取文件。
  • 我没有收到任何错误或火花日志。

感谢您对此事的任何帮助!

【问题讨论】:

    标签: amazon-web-services docker apache-spark amazon-s3 pyspark


    【解决方案1】:
    1. 停止使用 Hadoop 2.7 二进制文件。它们已经过时了,特别是对于 S3 连接。将所有 hadoop 2.7 工件替换为 Hadoop 2.8 工件,或者最好使用具有一致依赖关系的 Hadoop 3.2 或更高版本。
    2. 将“spark.hadoop.fs.s3a.experimental.fadvise”设置为随机。

    如果您仍然发现问题,请查看是否可以在 hadoop 3.3.x 上复制它们,如果可以:提交错误。

    (2021-03-9 的建议正确;它在未经编辑的 SO 中停留的时间越长,就越不应该相信)

    【讨论】:

    • 您知道与 hadoop 3.2 一起使用的 hadoop-aws 和 aws-java-sdk-bundle 的正确版本吗?我用 hadoop 3.2 和 hadoop-aws-3.2.2.jar 试了一下,得到一个“java.lang.NoSuchMethodError: 'void org.apache.hadoop.util.SemaphoredDelegatingExecutor.(java.util.concurrent.ExecutorService, int, boolean)'" 这可能是版本不匹配。
    • 还有谁可能需要这个:使用 aws-java-sdk-bundle-1.11.874.jar 和 hadoop-aws-3.2.0.jar 的 hadoop 3.2 一切正常
    • 很高兴听到。您需要在所有 hadoop- 之间进行精确的 x.y.x 匹配,就像您在 spark- jar 中需要的那样;它们本质上都是一个单一的产品版本,并不是为混合搭配而设计的。两个团队都将那里的所有错误报告视为无效
    猜你喜欢
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多