作家
登录

Spark源码分析之分区器的作用

作者: 来源: 2017-04-24 14:03:54 阅读 我要评论

  override def equals(other: Any): Boolean = other match { 
  •     case h: HashPartitioner => 
  •       h.numPartitions == numPartitions 
  •     case _ => 
  •       false 
  •   } 
  •  
  •   override def hashCode: Int = numPartitions 
  • 这里最重要的是这个Utils.nonNegativeMod(key.hashCode, numPartitions),它决定了数据进入到哪个分区。

    说白了,就是基于这个key获取它的hashCode,然后对分区个数取模。因为HashCode可能为负,这里直接断定下,如不雅小于0,再加上分区个数即可。

    那么这个界线是怎么肯定的呢?

    1. def defaultPartitioner(rdd: RDD[_], others: RDD[_]*): Partitioner = { 
    2.     val bySize = (Seq(rdd) ++ others).sortBy(_.partitions.size).reverse 
    3.     for (r <- bySize if r.partitioner.isDefined && r.partitioner.get.numPartitions > 0) { 
    4.       return r.partitioner.get 
    5.     } 
    6.     if (rdd.context.conf.contains("spark.default.parallelism")) { 
    7.       new HashPartitioner(rdd.context.defaultParallelism) 
    8.     } else { 
    9.       new HashPartitioner(bySize.head.partitions.size
    10.     } 
    11.   } 

    算法参考源码:

    是以,基于hash的分区,只要包管你的key是分散的,那么最终数据就不会出现数据倾斜的情况。

    这个分区器,合适想要把数据打散的场景,然则如不雅雷同的key反复量很大年夜,依然会出现数据倾斜的情况。

    每个分区器,最核心的办法,就是getPartition

    1. def getPartition(keyAny): Int = { 
    2.     val k = key.asInstanceOf[K] 
    3.     var partition = 0 
    4.     if (rangeBounds.length <= 128) { 
    5.       // If we have less than 128 partitions naive search 
    6.       while (partition < rangeBounds.length && ordering.gt(k, rangeBounds(partition))) { 
    7.         partition += 1 
    8.       } 
    9.     } else { 
    10.       // Determine which binary search method to use only once. 
    11.       partition = binarySearch(rangeBounds, k) 
    12.       // binarySearch either returns the match location 

        推荐阅读

        SDN能解决很多问题,但不包括安全

      跟着数字化企业尽力寻求最佳安然解决筹划来保护其赓续扩大的收集,很多企颐魅正在寻求供给互操作性功能的下一代对象。软件定义收集(SDN)具有很多的优势,经由过程将多个设备的┞菲握平面整>>>详细阅读


      本文标题:Spark源码分析之分区器的作用

      地址:http://www.17bianji.com/lsqh/34919.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)