我读过一些评论,说RDD的分区数量是内核数量的2-3倍。我有8个节点,每个节点都有两个12核处理器,所以我有192个核心,我将分区设置在384-576之间,但似乎工作效率不高,我尝试了8个分区,结果相同。也许我必须设置其他参数,以便我的作业在集群上比在我的机器上更好地工作。我补充说,我分析的文件有15万行。
val data = sc.textFile("/img.csv",384)发布于 2017-09-29 15:17:38
主要效果是指定的分区太少或太多。
在两者之间,第一个对性能的影响要大得多。此时,对于分区数低于1000的分区,调度太多小任务的影响相对较小。如果你有数万个分区,那么spark就会变得非常慢。
现在,考虑到您的情况,您将从8个分区和384-576个分区获得相同的结果。一般来说,经验法则说,CPU = (NumberOfWorkerNodes*NoOfCoresPerWorkerNode)-1,也就是我们知道的,任务是由NoOfPartitions核心处理的。因此,我们应该设置分区数量,这是集群中要处理的核心的总数-1(对于驱动程序的Application Master )。这意味着每个核心将一次处理每个分区。这意味着使用191个分区可以提高性能。另外,设置更少和更多分区的场景的影响将在beginnning中解释。
希望这能有所帮助!
https://stackoverflow.com/questions/31075234
复制相似问题