文本文件中的默认MinPartitions

时间:2014-07-22 02:32:28

标签: apache-spark

我最近开始在纱线上使用火花,并在调整程序时发现了一个问题。

当SparkContext初始化为sc并准备从hdfs读取文本文件时,将调用textFile(path,defaultMinPartitions)方法。 我追踪了火花源代码中的第二个参数,最后发现了这个:    CoarseGrainedSchedulerBackend.scala中的conf.getInt(“spark.default.parallelism”,math.max(totalCoreCount.get(),2))

我没有在任何地方指定属性“spark.default.parallelism”,因此getInt将从totalCoreCount和2之间的较大值返回值。

当我使用spark-submit提交应用程序并指定参数: - num-executors 2 --executor-cores 6时,我想totalCoreCount将是 2 * 6 = 12,因此defaultMinPartitions将为12。

但是当我在程序中打印defaultMinPartitions的值时,我仍然得到2回报,这是怎么回事,或者我在哪里犯错?

2 个答案:

答案 0 :(得分:4)

在SparkContext.scala中:

def defaultMinPartitions: Int = math.min(defaultParallelism, 2)

您追踪了defaultParallelism的计算结果。在你的情况下它确实应该是12。所以defaultMinPartitions变为2。

最后,您不应该尝试设置defaultMinPartitions。而是为创建RDD的操作指定显式分区计数。

答案 1 :(得分:0)

我在代码中找到了注释(在SparkContext.scala中),这可能解释了为什么使用最小值:

  

未给出Hadoop RDD的默认最小分区数   用户请注意,我们使用math.min这样的“defaultMinPartitions”   不能高于2.其原因在

中讨论

https://github.com/mesos/spark/pull/718