增加任务规模火花

时间:2017-01-13 05:26:14

标签: scala apache-spark

我在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 个答案:

答案 0 :(得分:3)

这很可能是因为任何任务中的变量对大尺寸的要求。 接受此question的答案可以帮助您。

答案 1 :(得分:3)

我有类似的错误:

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)