我们有一个没有本地磁盘的 Spark 集群,并且已设置溢出到 NFS。我们意识到这不是 Spark 的设计用途,但这就是我们当前的现实。
在这个世界上,泄漏会大大减慢 Spark 工作的速度,我们希望将其最小化。对于我们拥有的大多数作业,Spark 执行器有足够的 RAM 来保存所有中间计算结果,但我们看到 Spark 总是将 shuffle 结果写入磁盘,即在特殊情况下写入 NFS。我们已经尝试过所有 Spark 配置选项,这些选项看起来与尝试让 Spark 将 shuffle 输出写入 RAM 没有任何效果。
我在一些地方看到 Spark 更喜欢将 shuffle 输出写入磁盘,例如Does Spark write middle shuffleoutputs to disk。我的问题是:
有没有办法让 Spark 在有可用 RAM 的情况下使用 RAM 进行随机输出?
如果不是,有什么方法可以让它使用更少的大写操作?我们看到它执行大量 1-5KB 的小写入,并在每次写入后等待 NFS 延迟。以下配置选项没有帮助:
spark.buffer.size
spark.shuffle.spill.batchSize
spark.shuffle.spill.diskWriteBufferSize
spark.shuffle.file.buffer
spark.shuffle.unsafe.file.output.buffer
spark.shuffle.sort.initialBufferSize
spark.io.compression.*.blockSize
Run Code Online (Sandbox Code Playgroud) apache-spark ×1