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等会或多或少地重复,直到堆栈已满。
有没有人提示这可能是什么或如何调试?
NB :我在docker容器中运行的是prediction.io,这可能会导致问题,但是又一次:我真的不知道该怎么做了。
真正感谢任何帮助。
PS:我使用SPARK_DAEMON_JAVA_OPTS="-Xss=9m"
增加了stacksize但没有效果,但我想无论如何无限递归都是罪魁祸首。
答案 0 :(得分:2)
在我的案例中也出现了类似的错误(也使用了Docker容器)。我找到了两种解决问题的方法。
使用--driver-memory
标志:
pio train -- --driver-memory 2g
[使用] --driver-memory选项来限制Apache PredictionIO使用的内存(孵化)。没有这个Apache PredictionIO(孵化)可能会消耗太多内存导致崩溃。
这可以通过在export JAVA_OPTS=-Xmx2g
之前调用pio train
来完成。
有关JVM内存选项的更多详细信息,请参阅What are the Xms and Xmx parameters when starting JVMs?。