如果分配更多的核心,单个spark任务会消耗更多的计算时间

bfhwhh0e  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(332)

我正在运行一个spark作业,输入文件大小为6.6g(hdfs),主文件为本地文件。当我分配local[6]而不是local[2]时,53个分区的spark任务完成得很快,但是当核心数更多时,单个任务需要更多的计算时间。假设我分配了1个核心(local[1]),那么每个任务需要3秒,如果我分配了6个核心(local[6]),那么同样的时间会增加到12秒。在哪里浪费时间?spark ui显示每个任务的计算时间都在增加,在local[6]的情况下,我无法理解为什么在分配更多内核时,同一个代码需要不同的计算时间。
更新:
如果我使用local[6]而不是local[1],我可以在iostat输出中看到更多的%iowait。请让我知道这是唯一的原因或任何可能的原因。我想知道为什么斯巴奎伊没有报道这件事。我看到计算时间比等待时间长。

ohfgkhjo

ohfgkhjo1#

我猜你指的是 spark.task.cpus 而不是 spark.cores.maxspark.tasks.cpus 每个任务都分配了更多的核心,但它不一定要使用它们。如果你的进程是单线程的,它就不能使用它们。最终会带来额外的开销而没有额外的好处,而且这些核心会从其他可以使用它们的单线程任务中移除。
spark.cores.max 同时传输数据是一个简单且开销大的问题。

相关问题