Scala Spark执行任务时没有足够的并行性

Scala Spark执行任务时没有足够的并行性,scala,apache-spark,parallel-processing,rdd,Scala,Apache Spark,Parallel Processing,Rdd,我是Spark的乞丐,我对Spark的行为有点困惑 我正在Scala中开发一种算法,在这种方法中,我创建了一个RDD,其中包含用户以这种方式指定的多个分区: val fichero = sc.textFile(file, numPartitions) 我在一个集群下开发,有12个工人和216个内核(每个节点18个)。但当我转到Spark UI调试应用程序时,我看到了给定阶段的以下事件时间线: 对不起,图像的质量太差了,但是我不得不降低很多缩放比例。在这次执行中,有128个分区。但是,如图中所

我是Spark的乞丐,我对Spark的行为有点困惑

我正在Scala中开发一种算法,在这种方法中,我创建了一个RDD,其中包含用户以这种方式指定的多个分区:

val fichero = sc.textFile(file, numPartitions)
我在一个集群下开发,有12个工人和216个内核(每个节点18个)。但当我转到Spark UI调试应用程序时,我看到了给定阶段的以下事件时间线:

对不起,图像的质量太差了,但是我不得不降低很多缩放比例。在这次执行中,有128个分区。但是,如图中所示,整个RDD只在12个可用执行器中的两个执行,因此有些任务是按顺序执行的,我不希望出现这种行为

所以问题是:这里发生了什么?我是否可以使用所有工人并行执行每个任务?我看到了这样的选择:

spark.default.parallelism

但在选择要使用的分区数时,会修改此选项。我使用spark submit脚本的默认参数启动应用程序。

您应该将
--num executors
设置为更高的数字(默认值为2),您还应该查看
--executor cores
,默认值为1。试试看,例如
--num executors 128

确保分区数是“执行器数乘以每个执行器的内核数”的倍数(我通常使用2或4,具体取决于所需的资源)


请参阅spark submit--help,为了进一步阅读,我建议您看看这个(尤其是“调优并行性”):

numPartition是一个提示,而不是一个要求。 它最终被传递到InputFormat ,int) 您可以随时使用检查分区的实际数量

val fichero = sc.textFile(file, numPartitions)
fichero.partitions.size

您为启动设置了多少执行器?您是否使用了spark submit中的选项
--num executors
--executor cores
?在spark submit中将--num executors设置为12不起作用。仍然使用2个执行器。我在独立模式下使用Spark。我认为这个解决方案应该有效,因为我用不同数量的执行者证明了它的良好效果。但是,我的数据大小不足以发送到集群上的所有物理节点。但是--num executors解决方案是有效的。谢谢