在我的Spark作业中,我发送给驱动程序的结果只有几个KB。尽管spark.driver.maxResultSize
设置为4 GB,但我仍然得到以下异常:
ERROR TaskSetManager: Total size of serialized results of 3021102 tasks (4.0 GB) is bigger than spark.driver.maxResultSize (4.0 GB)
Spark累加器或其他任何东西对spark.driver.maxResultSize
分配的内存使用率有贡献吗?是否有我可以参考的官方文档/代码来了解更多信息?
有关代码/执行的更多详细信息:
- 有300万个任务
- 每个任务从S3读取50个文件,并在转换后将它们重新写入S3
- 任务返回S3文件的前缀以及一些元数据,这些元数据在驱动程序处收集以保存到文件中。该数据是<50 MB
这个问题在这里已经解决:原因是当Spark计算结果大小时,它实际上还计算发送回驱动程序的任务二进制结果中的元数据(如度量(。因此,如果你有大量的任务,但几乎什么都没有收集(真实的数据(,你可能仍然会遇到错误。