Spark 的 Shuffle 浅析

前言:

Spark: version 2.3.2 (mater branch)

HiBench: version 6

Hadoop: version 2.7.1

一、内容:

1. Terasort测试用例 registerShuffle 里的 dependency 默认会用 Kryo serializer。

因为它是根据  SerializerManager.scala 里的 getSerializer 来判断是否用 Kryo serializer。 而不是用户设置的 spark.serializer                 org.apache.spark.serializer.JavaSerializer 值。参考代码  getSerializer 函数,会根据key和value的类型来选择,如下:

  /**
   * Pick the best serializer for shuffling an RDD of key-value pairs.
   */
  def getSerializer(keyClassTag: ClassTag[_], valueClassTag: ClassTag[_]): Serializer = {
    if (canUseKryo(keyClassTag) && canUseKryo(valueClassTag)) {
      kryoSerializer
    } else {
      defaultSerializer
    }
  }

Spark 官网的文档也做了相关说明,参考 http://spark.apache.org/docs/latest/tuning.html:  Since Spark 2.0.0, we internally use Kryo serializer when shuffling RDDs with simple types, arrays of simple types, or string type.

2. SortShuffleManager里的registerShuffle函数决定job 使用哪种 shufflehandle(来决定用哪种shufflewriter)

注意:Spark 里的 Application/Job/Stage/Task(ShuffleMap/Result Tasks) 关系图如下,并且container(其中一个container 固定跑driver + 其它的container跑tasks(数目=executor数))分配后,会一直使用直到所有stages的Tasks执行完毕。

3. Spark里application, Job, Stage and shuffle的关系

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值