增加分区大小和减少spark中的分区数有什么好处?

时间:2016-04-13 06:00:24

标签: scala apache-spark hadoop-partitioning

我有1个主服务器和3个从服务器(每个4个核心)

默认情况下,我的spark群集中的min分区大小为32MB,文件大小为41 Gb。 所以我试图通过将minsize更改为64Mb来减少分区数

sc.hadoopConfiguration.setLong("mapreduce.input.fileinputformat.split.minsize", 64*1024*1024)
val data =sc.textFile("/home/ubuntu/BigDataSamples/Posts.xml",800) 
data.partitions.size = 657

那么增加分区大小和减少分区数量有什么好处。 因为当我的分区大约是1314时,它需要大约2-3分钟的appx,即使减少了分区数量,它仍然需要相同的时间。

1 个答案:

答案 0 :(得分:1)

分区越多,开销越大,但在某种程度上,它有助于提高性能,因为您可以并行运行所有分区。

因此,一方面保持分区数等于核心数是有意义的。另一方面,可能会发生特定的分区大小导致JVM中的特定垃圾量,这可能超出限制。在这种情况下,您希望增加分区数量以减少每个分区的内存占用量。

它可能还取决于工作流程。考虑groupByKey vs reduceByKey。在后一种情况下,您可以在本地计算很多并且只向远程节点发送一点。 Shuff恰好在被发送到远程之前写入磁盘,因此拥有更多分区可能会降低性能。

每个分区都有一些开销。

如果您想与多个人共享群集,那么您可能会考虑采用更少数量的分区来处理所有内容,以便所有用户都有一些处理时间。

像这样的人。