在RDD上设置正确的分区数

时间:2015-06-26 14:02:13

标签: apache-spark partitioning rdd

我读了一些评论,说RDD的分区数量是核心数量的2-3倍。我有8个节点,每个节点有两个12核处理器,所以我有192个核心,我设置分区beetween 384-576但它似乎没有效率,我尝试8分区,相同的结果。也许我必须设置其他参数,以便我的工作在群集上工作得更好,而不是在我的机器上工作。我补充一点,我分析的文件生成150k行。

 val data = sc.textFile("/img.csv",384)

1 个答案:

答案 0 :(得分:0)

主要影响是指定的分区太少或分区太多。

  1. 分区太少您将无法使用群集中的所有可用核心。
  2. 分区太多管理许多小任务会产生过多的开销。
  3. 在两者之间,第一个对性能影响更大。对于分区计数低于1000,调度太多小任务对此点的影响相对较小。如果你有数万个分区的数量级,那么spark变得非常慢。

    现在,考虑到您的情况,您从8和384-576分区获得相同的结果。通常拇指规则说, NoOfPartitions =(NumberOfWorkerNodes * NoOfCoresPerWorkerNode)-1 它说,正如我们所知,任务由CPU核心处理。因此,我们应该设置多个分区,即集群中的核心总数为process-1(对于驱动程序的Application Master)。这意味着每个核心将一次处理每个分区。 这意味着191个分区可以提高性能。否则,在开始时会解释设置越来越少的分区场景的影响。

    希望这会有所帮助!!!