我正在运行一个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。请让我知道这是唯一的原因或任何可能的原因。我想知道为什么斯巴奎伊没有报道这件事。我看到计算时间比等待时间长。
1条答案
按热度按时间ohfgkhjo1#
我猜你指的是
spark.task.cpus
而不是spark.cores.max
与spark.tasks.cpus
每个任务都分配了更多的核心,但它不一定要使用它们。如果你的进程是单线程的,它就不能使用它们。最终会带来额外的开销而没有额外的好处,而且这些核心会从其他可以使用它们的单线程任务中移除。与
spark.cores.max
同时传输数据是一个简单且开销大的问题。