2015-04-22 13 views
14

Ciągle widzę te ostrzeżenia przy stosowaniu trainImplicit:Spark MLlib - ostrzeżenie trainImplicit

WARN TaskSetManager: Stage 246 contains a task of very large size (208 KB). 
The maximum recommended task size is 100 KB. 

I wtedy wielkość zadanie zaczyna wzrastać. Próbowałem wywołać repartition na wejściu RDD, ale ostrzeżenia są takie same.

Wszystkie te ostrzeżenia pochodzą z iteracji ALS, od FlatMap, a także z agregatu, na przykład początek etapu, na którym FlatMap wyświetla te ostrzeżenia (w/Spark 1.3.0, ale są one również pokazane w Spark 1.3. 1):

org.apache.spark.rdd.RDD.flatMap(RDD.scala:296) 
org.apache.spark.ml.recommendation.ALS$.org$apache$spark$ml$recommendation$ALS$$computeFactors(ALS.scala:1065) 
org.apache.spark.ml.recommendation.ALS$$anonfun$train$3.apply(ALS.scala:530) 
org.apache.spark.ml.recommendation.ALS$$anonfun$train$3.apply(ALS.scala:527) 
scala.collection.immutable.Range.foreach(Range.scala:141) 
org.apache.spark.ml.recommendation.ALS$.train(ALS.scala:527) 
org.apache.spark.mllib.recommendation.ALS.run(ALS.scala:203) 

iz łączna:

org.apache.spark.rdd.RDD.aggregate(RDD.scala:968) 
org.apache.spark.ml.recommendation.ALS$.computeYtY(ALS.scala:1112) 
org.apache.spark.ml.recommendation.ALS$.org$apache$spark$ml$recommendation$ALS$$computeFactors(ALS.scala:1064) 
org.apache.spark.ml.recommendation.ALS$$anonfun$train$3.apply(ALS.scala:538) 
org.apache.spark.ml.recommendation.ALS$$anonfun$train$3.apply(ALS.scala:527) 
scala.collection.immutable.Range.foreach(Range.scala:141) 
org.apache.spark.ml.recommendation.ALS$.train(ALS.scala:527) 
org.apache.spark.mllib.recommendation.ALS.run(ALS.scala:203) 
+0

Czy możesz podać przykład kodu i danych? – ipoteka

+0

Niestety nie. – Tarantula

+1

Jestem zaskoczony, że nowoczesne ramy uważają, że 208KB jest "duże". Zastanawiasz się, jakie będzie to uzasadnienie ... – Paul

Odpowiedz

1

Podobny problem został opisany w listach Apache Spark Mail - http://apache-spark-user-list.1001560.n3.nabble.com/Large-Task-Size-td9539.html

i Myślę, że możesz spróbować grać z wieloma partycjami (używając metody repartition()), w zależności od tego, ile masz hostów, pamięci RAM, procesorów.

Spróbuj również zbadać wszystkie kroki za pomocą interfejsu WWW, w którym można zobaczyć liczbę etapów, zużycie pamięci na każdym etapie i lokalizację danych.

Lub po prostu nie przejmuj się tymi ostrzeżeniami, chyba że wszystko działa poprawnie i szybko.

Powiadomienie to jest zakodowane w Spark (planującego/TaskSetManager.scala)

 if (serializedTask.limit > TaskSetManager.TASK_SIZE_TO_WARN_KB * 1024 && 
      !emittedTaskSizeWarning) { 
     emittedTaskSizeWarning = true 
     logWarning(s"Stage ${task.stageId} contains a task of very large size " + 
      s"(${serializedTask.limit/1024} KB). The maximum recommended task size is " + 
      s"${TaskSetManager.TASK_SIZE_TO_WARN_KB} KB.") 
     } 

.

private[spark] object TaskSetManager { 
    // The user will be warned if any stages contain a task that has a serialized size greater than 
    // this. 
    val TASK_SIZE_TO_WARN_KB = 100 
} 
Powiązane problemy