The various 2G limit in Spark

DAG:

影响DAG性能的有以下几点:

  1. 反序列化TaskResult实例时使用的SerializerInstance没有重用
  2. TaskSchedulerImpl.resourceOffers方法只能单线程处理, 且生成其返回TaskDescription实例 时需要调用耗时的序列化操作
  3. taskScheduler中有不必要的序列化操作
    taskScheduler在创建TaskDescription实例时调用Task.serializeWithDependencies(task, sched.sc.addedFiles, sched.sc.addedJars, ser)把task和其依赖信息序列化, 但是在SPARK-2521: Broadcast RDD object once per TaskSet (instead of sending it for every task) 合并之后
    ResultTask和ShuffleMapTask类不在包含rdd和closure等复杂对象,没有必要独立序列化, 可以把TaskDescription类改成下面这样:
class TaskDescription[T](
val taskId: Long,
val attemptNumber: Int,
val executorId: String,
val name: String,
val index: Int, 
val task: Task[T]) extends Serializable

你可能感兴趣的:(The various 2G limit in Spark)