Spark MLlib — поездНеявное предупреждение

Я продолжаю видеть эти предупреждения при использовании trainImplicit:

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

И тогда размер задачи начинает увеличиваться. Я попытался вызвать repartition на входном RDD, но предупреждения остались прежними.

Все эти предупреждения исходят от итераций ALS, от flatMap, а также от агрегата, например, от источника этапа, на котором flatMap показывает эти предупреждения (с Spark 1.3.0, но они также отображаются в 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)

и из совокупности:

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)

person Tarantula    schedule 22.04.2015    source источник
comment
Можете ли вы предоставить данные и пример кода?   -  person Nikita    schedule 25.04.2015
comment
Я удивлен, что современный фреймворк считает 208 КБ большим. Интересно, какое обоснование будет в этом...   -  person Paul    schedule 30.04.2015
comment
Это размер задачи, а не данных.   -  person Tarantula    schedule 30.04.2015
comment
Скорее всего, у вас искажены данные, и это увеличивает нагрузку на одну задачу.   -  person ayan guha    schedule 26.05.2015
comment
Просто из любопытства. У вас случайно не было статического списка, преобразованного в RDD в какой-то момент. Какой-то список больше 100 КБ?   -  person Hitesh Dharamdasani    schedule 03.06.2015
comment
@HiteshDharamdasani У меня похожие проблемы, и мне довелось это сделать. У вас есть идея? Это список из ~100 тыс. объектов шейп-файла.   -  person fanfabbb    schedule 06.06.2015
comment
Кажется, что эти проблемы, по крайней мере, для обучения неявной обратной связи, можно смело игнорировать.   -  person Tarantula    schedule 15.06.2015
comment
@ipoteka, пожалуйста, посмотрите пример кода с похожей проблемой здесь.   -  person xenocyon    schedule 07.07.2015


Ответы (1)


Аналогичная проблема была описана в списках рассылки Apache Spark — http://apache-spark-user-list.1001560.n3.nabble.com/Large-Task-Size-td9539.html

Я думаю, вы можете попробовать поиграть с количеством разделов (используя метод repartition()), в зависимости от того, сколько у вас хостов, оперативной памяти, процессоров.

Попробуйте также исследовать все шаги через веб-интерфейс, где вы можете увидеть количество этапов, использование памяти на каждом этапе и местоположение данных.

Или просто не обращайте внимания на эти предупреждения, если все работает правильно и быстро.

Это уведомление жестко запрограммировано в 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
} 
person Vit D    schedule 15.06.2015