如何避免“任务大小太大”?

Posted

技术标签:

【中文标题】如何避免“任务大小太大”?【英文标题】:How to avoid "Task size too large"? 【发布时间】:2017-03-06 02:31:32 【问题描述】:

我的问题是,在使用 Spark SQL 将表非规范化为更大的表时,我收到了任务大小过大的警告。

在人们指出其他答案说使用广播或避免关闭整个班级之前;让我说我已经阅读了这些内容,但在使用 Spark SQL 时仍然感到困惑。

在使用 Spark SQL 时,我的任务大小达到了推荐大小的 10 倍。

情况如下:

我有 10 多个表/数据框要加入一个超级表。 我创建了一个 scala 对象,并在正文中从它们的 CSV 中填充了这 10 个表。 我将该对象的成员(仅表)导入到其他对象中,以形成他的超级表。 当这 10 个表之间的 Spark-SQL 连接运行以将结果表写入 parquet 文件时,我会收到任务大小警告。

额外信息:

我已经尝试将源表移动到不同的类中并将它们嵌入到函数中,并且任务大小没有改变。

我不确定广播如何帮助解决这个问题,因为源数据是使用 Spark-CSV 直接读入数据帧的,因此应该已经分发了。

【问题讨论】:

你能在问题中包含警告吗?你能显示导致警告的代码吗? 【参考方案1】:

在 Spark 中,您可以选择 caching (persistence) level 将一些大型内存对象卸载到磁盘,并使用 unpersist() 选择丢弃哪些已经缓存的结果。

【讨论】:

请进一步充实您的答案,例如解释选择缓存级别如何避免大量内存使用以及如何使用unpersist() 来释放内存的示例。

以上是关于如何避免“任务大小太大”?的主要内容,如果未能解决你的问题,请参考以下文章

如何避免在 Luigi 中与多个工作人员同时运行特定任务

Play Framework + Akka:如何避免在关闭应用程序时执行计划任务

如何使Ansible通知主机是相同的,避免任务冲突

如何在django中复制数据,我该如何避免?

项目管理中的“偏差”该如如何避免?

如何避免 VxWorks 中条件变量中的竞争条件