我有一个调用UDF的数据框,如下所示:
val myUDF = udf ((x:Int) => {
val t = new Array[Integer](4)
.. processing ..
})
作为列操作的一部分,此UDF被称为2000万次。当我使用Mesos framework
{/ 1}}执行程序内存运行上述函数作为(v 0.28)
8G
的一部分时,我收到以下内存泄漏消息:
11/08/12 11:18:13 ERROR Executor: Managed memory leak detected; size = 67371008 bytes, TID = 10
11/08/12 11:18:13 WARN TaskMemoryManager: leak 64.3 MB memory from org.apache.spark.unsafe.map.BytesToBytesMap@7b56b8b7
如果数组被实例化了2000万次,那么我的内存需求(对于这个特定的UDF)不超过20*128
MB,即2.6GB
。失败总是因64.3 MB
泄漏而失败,这让我觉得这是在某处执行的。
我如何解决这个问题?我已经尝试过Spark版本1.6.0,1.6.1,1.6.2