2015-04-22 15 views
14

Tôi tiếp tục nhìn thấy những cảnh báo khi sử dụng trainImplicit:Spark MLlib - cảnh báo trainImplicit

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

Và sau đó kích thước nhiệm vụ bắt đầu tăng. Tôi đã cố gắng gọi repartition trên RDD đầu vào nhưng cảnh báo giống nhau.

Tất cả các cảnh báo này đến từ các lần lặp ALS, từ flatMap và cũng từ tổng hợp, ví dụ nguồn gốc của giai đoạn mà flatMap hiển thị các cảnh báo này (w/Spark 1.3.0, nhưng chúng cũng được hiển thị trong 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) 

và từ tổng hợp:

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

bạn có thể cung cấp ví dụ về dữ liệu và mã không? – ipoteka

+0

Unfortunatelly no. – Tarantula

+1

Tôi ngạc nhiên một khuôn khổ hiện đại cho rằng 208KB là "lớn". Tự hỏi lý do sẽ là gì ... – Paul

Trả lời

1

vấn đề tương tự đã được mô tả trong Apache danh sách Spark mail - http://apache-spark-user-list.1001560.n3.nabble.com/Large-Task-Size-td9539.html

tôi nghĩ rằng bạn có thể thử chơi với số phân vùng (sử dụng phương thức repartition()), tùy thuộc vào số lượng máy chủ, RAM, CPU mà bạn có.

cũng cố gắng để điều tra tất cả các bước thông qua giao diện người dùng Web, nơi bạn có thể thấy số lượng các giai đoạn, sử dụng bộ nhớ trên mỗi sân khấu, và địa phương dữ liệu.

Hoặc không bao giờ bận tâm về cảnh báo này trừ khi mọi thứ hoạt động chính xác và nhanh chóng.

Thông báo này được mã hóa cứng trong 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 
} 
Các vấn đề liên quan