增加Spark任务的大小

5

当我在spark-shell中执行代码时遇到了问题。

[Stage 1:>             (0 + 0) / 16]
17/01/13 06:09:24 WARN TaskSetManager: Stage 1 contains a task of very large size (1057 KB). The maximum recommended task size is 100 KB.
[Stage 1:>             (0 + 4) / 16]

收到此警告后,执行被阻止。

我该如何解决这个问题?

我尝试了这个方法,但它并没有解决问题。

val conf = new SparkConf()
    .setAppName("MyApp")
    .setMaster("local[*]")
    .set("spark.driver.maxResultSize", "3g")
    .set("spark.executor.memory" ,"3g");
val sc = new SparkContext(conf);`
2个回答

8
我遇到了类似的错误:
scheduler.TaskSetManager: Stage 2 contains a task of very large size
(34564 KB). The maximum recommended task size is 100 KB

我的输入数据大小约为150MB,由4个分区组成(即每个分区大小约为30MB)。这就解释了上述错误消息中提到的34564 KB的大小。

原因: 任务是Spark中处理输入数据分区的最小工作单位。因此,如果Spark告诉你任务的大小超过了推荐大小,那么它处理的分区包含的数据太多了。

我采用的解决方案:

reducing task size => reduce the data its handling => increase
numPartitions to break down data into smaller chunks
  • 因此,我尝试增加分区并解决了错误。
  • 可以通过df.rdd.getNumPartitions检查数据框中的分区数。
  • 要增加分区,请使用df.repartition(100)

1
从这个答案中学到了很多。 - d8aninja

5

很可能是由于您的任务中的变量需要大尺寸。这个问题的接受答案应该会对您有所帮助。


是的,我看过这篇文章,但我不知道如何使用它。你能给我一个例子吗? - user7375007
当我尝试时,出现了一个错误,如cartesian不是broadcast的成员。 - user7375007
为此,您可以创建一个新问题(最好的选择),或者发布您的代码并更新您的问题。同时请接受答案 ;) - code

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接