2016-02-23 11 views

Odpowiedz

4

Szybkie brzęczenie do kodu źródłowego na mistrza (https://github.com/kayousterhout/spark-1/blob/master/core/src/main/scala/org/apache/spark/executor/Executor.scala#L179)

Jest to zasadniczo:

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) 

Od tej linii (taskFiles, taskJars, taskBytes) Podejrzewam, że każde zadanie jest deserializacji słoików; w moim przypadku mam 136 MB tłuszczu JAR, który nie pomaga.

+3

Nie jestem pewien, czy masz rację. patrz tutaj: https://github.com/kayousterhout/spark-1/blob/master/core/src/main/scala/org/apache/spark/executor/Executor.scala#L371, "słoiki" zawierają tylko nazwa i znacznik czasu, więc nie powinno to zająć tyle czasu, aby desirialze – lev

Powiązane problemy