java.lang.StackOverflowError在pio列车阶段

pio train (在成功的pio build )给了我这样一个错误:

 [ERROR] [Executor] Exception in task 0.0 in stage 39.0 (TID 34) [WARN] [TaskSetManager] Lost task 0.0 in stage 39.0 (TID 34, localhost): java.lang.StackOverflowError at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2321) at java.io.ObjectInputStream$BlockDataInputStream.peek(ObjectInputStream.java:2614) at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2624) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1321) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373) at scala.collection.immutable.$colon$colon.readObject(List.scala:362) at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1058) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1909) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2018) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1942) 

从这里,ObjectInputStreams等重复或多或less的堆栈已满。

有没有人有提示这可能是或如何debugging?

注意 :我正在docker容器中运行prediction.io,可能会导致这个问题,但是我再也不知道如何继续下去了。

任何帮助是真正的赞赏。

PS:我增加了使用SPARK_DAEMON_JAVA_OPTS="-Xss=9m"的堆栈大小,没有任何效果,但是我猜无论如何,无限recursion是罪魁祸首。

在我的情况下(也使用Docker容器)出现类似的错误。 我find了两种方法来解决这个问题。

选项1:增加预测IO的驱动程序内存

使用--driver-memory标志:

pio train -- --driver-memory 2g

从Tapster的例子 :

[使用] –driver-memory选项来限制Apache PredictionIO使用的内存(孵化)。 没有这个Apache PredictionIO(孵化)可能会消耗太多的内存导致崩溃。

选项2:增加JVM内存

这可以通过在pio train之前调用export JAVA_OPTS=-Xmx2g来完成。

请参阅启动JVM时,Xms和Xmx参数是什么? 有关JVM内存选项的更多细节。