2016-04-26 41 views
2

错误有关:在星火1.6.0,得到org.apache.spark.SparkException与spark.driver.maxResultSize

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) 

我得到这个例外,而在火花外壳调用

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

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

+0

我遇到了与RDD.sum相同的问题。 Althoguth,增加spark.driver.maxResultSize解决了这个问题,我仍然困惑为什么RDD.sum会导致分区向驱动程序发回大量数据(超过1GB)。 – bourneli

回答

1

我在将表格格式从文本文件更改为实木复合地板时遇到此问题。 起初,这项工作运行得更快,更好。但经过多次尝试,司机抛出熟悉的例外:

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