错误:
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查询工作正常,毫无例外。
答案 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中对象的内存开销)。设置适当的限制可以保护驱动程序免受内存不足错误的影响。
同时增加maxResultSize
和memoryOverhead
。