2017-01-25 1 views
1

Nous obtenons l'erreur suivante après l'exécution de "pio train". Il fonctionne environ 20 minutes et échoue sur la scène 26.Prediction.io - pio train échoue avec OutOfMemoryError

[ERROR] [Executor] Exception in task 0.0 in stage 1.0 (TID 3) 
[ERROR] [SparkUncaughtExceptionHandler] Uncaught exception in thread Thread[Executor task launch worker-0,5,main] 
[ERROR] [SparkUncaughtExceptionHandler] Uncaught exception in thread Thread[Executor task launch worker-4,5,main] 
[WARN] [TaskSetManager] Lost task 2.0 in stage 1.0 (TID 5, localhost): java.lang.OutOfMemoryError: Java heap space 
    at com.esotericsoftware.kryo.io.Output.<init>(Output.java:35) 
    at org.apache.spark.serializer.KryoSerializer.newKryoOutput(KryoSerializer.scala:80) 
    at org.apache.spark.serializer.KryoSerializerInstance.output$lzycompute(KryoSerializer.scala:289) 
    at org.apache.spark.serializer.KryoSerializerInstance.output(KryoSerializer.scala:289) 
    at org.apache.spark.serializer.KryoSerializerInstance.serialize(KryoSerializer.scala:293) 
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:239) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

Notre serveur a sur la mémoire de 30 Go, mais environ 10 Go est prise par HBase + ElasticSearch.

Nous essayons de traiter environ 20 millions d'enregistrements créés par Universal Recommender.

J'ai essayé la commande suivante pour augmenter la mémoire exécuteur testamentaire/pilote, mais il n'a pas aidé:

pio train -- --driver-memory 6g --executor-memory 8g 

Quelles sont les options nous essayons de résoudre le problème? Est-il possible de traiter cette quantité d'événements sur le serveur avec cette quantité de mémoire?

Répondre

1

La mise à l'échelle verticale peut vous prendre seulement jusqu'ici mais vous pouvez essayer d'augmenter la mémoire disponible si elle est AWS en l'arrêtant et en la redémarrant avec une instance plus grande. Comme CF compte beaucoup de données, puisque Spark prend de la vitesse en effectuant des calculs en mémoire (par défaut), vous aurez besoin de suffisamment de mémoire pour stocker toutes vos données sur tous les travailleurs Spark et dans votre cas, vous n'avez que 1.

une autre chose qui vient à l'esprit est que c'est une erreur Kryo donc vous pouvez essayer d'augmenter la taille du tampon Kryo un peu, qui est configuré dans engine.json

il y a également un groupe Google pour la communauté soutien ici: https://groups.google.com/forum/#!forum/actionml-user