我们在独立模式下运行 Spark,在 240GB“大”EC2 盒子上使用 3 个节点,以使用 s3a 将读取到 DataFrames 到 JavaRDD 的三个 CSV 文件合并到 S3 上的输出 CSV 部分文件中。
我们可以从 Spark UI 中看到,读取和合并以生成最终 JavaRDD 的第一阶段按预期在 100% CPU 上运行,但使用 CSV 文件写入的最后阶段saveAsTextFile at package.scala:179
在 3 个节点中的 2 个节点上“卡住”了好几个小时32 个任务中有 2 个需要几个小时(整个时间段内,CPU 占用率为 6%,内存占用率为 86%,网络 IO 为 15kb/s,磁盘 IO 为 0)。
我们正在读取和写入未压缩的 CSV(我们发现未压缩的 CSV 比 gzip 压缩的 CSV 快得多),并在三个输入 DataFrame 中的每一个上重新分区 16 并且不关闭写入。
非常感谢我们可以调查的任何提示,为什么最后阶段需要这么多小时在我们独立本地集群中的 3 个节点中的 2 个节点上做的很少。
非常感谢
- - 更新 - -
我尝试写入本地磁盘而不是 s3a 并且症状是相同的 - 最后阶段的 32 个任务中有 2 个saveAsTextFile
被“卡住”了几个小时: