2016-02-23 6 views
6

Ich habe einige Jobs, bei denen Tasks durch Task-Deserialisierungszeit dominiert werden. Die Aufgaben selbst sind in etwa 10 Sekunden nach 3 Minuten der Deserialisierung der Aufgabe abgeschlossen.Welche Operationen tragen zu der Deserialisierungszeit der Task bei?

Was sind die genauen Grenzen dieser Metrik? Welche Ressourcenbeschränkungen tragen am häufigsten zu langen Deserialisierungszeiten bei?

Antwort

4

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.

+3

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

Verwandte Themen