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 и т. д. повторяются более или менее до тех пор, пока стек не заполнится.

У кого-нибудь есть подсказка, что это может быть или как это отладить?

Примечание: я запускаю Prediction.io внутри док-контейнера, что может (?) вызвать проблему, но опять же: я действительно не знаю, что делать дальше.

Любая помощь действительно приветствуется.

PS: я увеличил размер стека с помощью SPARK_DAEMON_JAVA_OPTS="-Xss=9m" безрезультатно, но я думаю, что в любом случае виновата бесконечная рекурсия.


person Tommy    schedule 29.06.2016    source источник
comment
какой шаблон вы используете?   -  person alex9311    schedule 30.06.2016
comment
Шаблон similarproduct. Чего я не упомянул, так это того, что пару недель назад (когда я в последний раз пробовал) он работал нормально. Итак, что-то изменилось.   -  person Tommy    schedule 30.06.2016


Ответы (1)


В моем случае возникла аналогичная ошибка (также с использованием контейнера Docker). Я нашел два пути решения проблемы.

Вариант 1. Увеличьте объем памяти драйвера Prediction IO.

Используйте флаг --driver-memory:

pio train -- --driver-memory 2g

Из примера Tapster:

[Используйте] параметр --driver-memory, чтобы ограничить память, используемую Apache PredictionIO (инкубация). Без этого Apache PredictionIO (инкубация) может потреблять слишком много памяти, что приводит к сбою.

Вариант 2: увеличить память JVM

Этого можно добиться, вызвав export JAVA_OPTS=-Xmx2g перед pio train.

См. Каковы параметры Xms и Xmx при запуске JVM? для более подробной информации о параметрах памяти JVM.

person Jonny5    schedule 23.01.2017
comment
У меня сейчас нет кода под рукой. Но мне интересно, что из процитированного вами документа --driver-memory ограничивает использование памяти. Таким образом (если документ прав) память, отдаваемая pio, уменьшается таким образом. - person Tommy; 24.01.2017
comment
Мне не совсем понятно. Возможно ли, что с помощью этого флага алгоритм ограничивает использование памяти вместо увеличения зарезервированной памяти? Но если я правильно помню, я сбросил память JVM до значения, намного меньше 2 ГБ, поэтому кажется, что это также влияет на выделенную память. Когда у меня будет больше времени, я постараюсь немного углубиться в эту тему. - person Jonny5; 25.01.2017
comment
Я попробовал `pio train --driver-memory 4g --conf spark.executor.cores=1` и успешно - person Cyanny; 21.08.2018