在Spark 1.6.0上,获取与spark.driver.maxResultSize相关的org.apache.spark.SparkException

时间:2016-04-26 18:09:19

标签: java scala apache-spark

错误:

org.apache.spark.SparkException: Job aborted due to stage failure: Total size of serialized results of 1401 tasks (1024.3 MB) is bigger than spark.driver.maxResultSize (1024.0 MB)

我在调用spark-shell时遇到了这个异常

sqlContext.cacheTable("TableName")
sqlContext.sql("SELECT COUNT(*) FROM TableName").count()

我知道collect()可能会向驱动程序发送大结果,但这里只需要count,所以我不明白为什么使用1024.3 MB内存。如果表没有被缓存,那么sql查询工作正常,毫无例外。

1 个答案:

答案 0 :(得分:1)

当我将表格格式从textfile更改为镶木地板时,我遇到了这个问题。 起初工作运行得更快更好。但经过几次尝试,司机抛出了熟悉的异常:

Total size of serialized results of 498 tasks (1024.8 MB) is bigger than spark.driver.maxResultSize (1024.0 MB)

随着spark.driver.maxResultSize增加(2g),我遇到了GC问题:

Exception in thread "broadcast-hash-join-9" java.lang.OutOfMemoryError: GC overhead limit exceeded at org.apache.spark.sql.catalyst.expressions.UnsafeRow.copy(UnsafeRow.java:535)

As the official doc description

具有上限可能会导致驱动程序中出现内存不足错误(取决于spark.driver.memory和JVM中对象的内存开销)。设置适当的限制可以保护驱动程序免受内存不足错误的影响。

同时增加maxResultSizememoryOverhead