繁体   English   中英

Spark应用程序仅使用1个执行程序

[英]Spark application uses only 1 executor

我正在使用以下代码运行应用程序。 我不明白为什么即使我有3个执行器也只使用1个执行器。当我尝试增加范围时,我的工作失败,导致任务管理器丢失了执行器。 在摘要中,我看到随机写入的值,但是随机读取的值为0(可能是因为所有数据都在一个节点上,并且不需要随机读取就可以完成工作)。

val rdd: RDD[(Int, Int)] = sc.parallelize((1 to 10000000).map(k => (k -> 1)).toSeq)
val rdd2= rdd.sortByKeyWithPartition(partitioner = partitioner)
val sorted = rdd2.map((_._1))
val count_sorted = sorted.collect()

编辑:我增加了执行程序和驱动程序的内存和核心。 我还将执行程序的数量从4个更改为1个。这似乎有所帮助。 现在,我在每个节点上看到随机读/写。

看起来您的代码最终只为RDD分配了一个分区。 您应该将RDD的分区增加到至少3个,以利用所有3个执行程序。

..可能是因为所有数据都在一个节点上

那应该使您认为您的RDD仅具有一个分区,而不是3个或更多分区,最终将利用所有执行程序。

因此,扩展Hokam的答案,这就是我要做的:

rdd.getNumPartitions

现在,如果是1,则重新分区RDD,如下所示:

rdd = rdd.repartition(3) 

这会将您的RDD分为3个分区。

现在尝试再次执行代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM