2016-02-23 7 views
6

私は、タスクがタスクの逆シリアル化時間によって支配されるいくつかの仕事を持っています。タスク自体は、タスクの逆シリアル化の3分後に約10秒で完了します。Spark Taskの逆シリアル化にどのような操作が関係していますか?

このメトリックの正確な境界は何ですか?どのようなリソースの制限が、長時間のデシリアライズ時間に最も貢献するのでしょうか?

答えて

4

マスターのソースコードへの迅速な話題は(https://github.com/kayousterhout/spark-1/blob/master/core/src/main/scala/org/apache/spark/executor/Executor.scala#L179

は、それは本質的に、このです:私は、各タスクはJARをデシリアライズされている疑いがある。このライン(taskFiles, taskJars, taskBytes)から

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) 

。私の場合、136 MBの太っているJARがありますが、これは助けにはなりません。

+3

あなたが正しいとは確信していません。ここを見てください:https://github.com/kayousterhout/spark-1/blob/master/core/src/main/scala/org/apache/spark/executor/Executor.scala#L371、 'jars'には名前とタイムスタンプが含まれているので、デシリアスにはあまり時間がかかりません – lev

関連する問題