Eine schnelle Summen in den Quellcode auf Master (https://github.com/kayousterhout/spark-1/blob/master/core/src/main/scala/org/apache/spark/executor/Executor.scala#L179)
Es ist im Wesentlichen diese:
val (taskFiles, taskJars, taskBytes) = Task.deserializeWithDependencies(serializedTask)
updateDependencies(taskFiles, taskJars)
task = ser.deserialize[Task[Any]](taskBytes, Thread.currentThread.getContextClassLoader)
// If this task has been killed before we deserialized it, let's quit now. Otherwise,
// continue executing the task.
if (killed) {
// Throw an exception rather than returning, because returning within a try{} block
// causes a NonLocalReturnControl exception to be thrown. The NonLocalReturnControl
// exception will be caught by the catch block, leading to an incorrect ExceptionFailure
// for the task.
throw new TaskKilledException
}
attemptedTask = Some(task)
logDebug("Task " + taskId + "'s epoch is " + task.epoch)
env.mapOutputTracker.updateEpoch(task.epoch)
Von dieser Linie (taskFiles, taskJars, taskBytes)
Ich vermute, dass jede Aufgabe, die JAR-Dateien ist Deserialisieren; In meinem Fall habe ich eine 136 MB dicke JAR, die nicht hilft.
Ich bin mir nicht sicher, dass Sie Recht haben. schaue hier: https://github.com/kayousterhout/spark-1/blob/master/core/src/main/scala/org/apache/spark/executor/Executor.scala#L371, die 'Gläser' enthalten nur die Name und der Zeitstempel, so sollte es nicht so viel Zeit brauchen, um zu wünschen – lev