2015-04-22 16 views
14

Continuo a vedere questi avvertimenti quando si utilizza trainImplicit:Spark MLlib - trainImplicit avvertimento

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

E poi la dimensione del compito inizia ad aumentare. Ho provato a chiamare repartition sull'RDD di input ma gli avvisi sono gli stessi.

Tutti questi avvisi provengono da iterazioni ALS, da flatMap e anche da aggregato, ad esempio l'origine della fase in cui flatMap mostra questi avvisi (con Spark 1.3.0, ma sono anche mostrati in 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) 

e da aggregati:

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

puoi fornire dati ed esempi di codice? – ipoteka

+0

sfortunatamente no. – Tarantula

+1

Sono sorpreso che un quadro moderno pensi che 208KB sia "grande". Ti chiedi quale sarà la logica su questo ... – Paul

risposta

1

problema simile è stato descritto in Apache liste Spark mail - http://apache-spark-user-list.1001560.n3.nabble.com/Large-Task-Size-td9539.html

I pensa di provare a giocare con il numero di partizioni (usando il metodo ripartizione()), a seconda di quanti host, RAM, CPU hai.

Provare anche a esaminare tutti i passaggi tramite interfaccia utente Web, in cui è possibile visualizzare il numero di fasi, l'utilizzo della memoria in ogni fase e la località dei dati.

O semplicemente non preoccuparti di questo avviso, a meno che tutto funzioni correttamente e velocemente.

Questa notifica è hard-coded in Spark (scheduler/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 
} 
Problemi correlati