首页 > 解决方案 > Apache Spark 分区分布策略

问题描述

Apache Spark 中有分区策略。哈希分区、范​​围分区和编写自定义分区器的能力。但是分区是如何按集群节点分布的呢?有没有办法以某种方式影响这一点?

标签: apache-spark

解决方案


Spark 中的分区分布依赖于数据源和您的配置。您引用的分区器在手动重新分区操作期间使用,例如coalescerepartition。当您决定这样做时,Spark 有时会在节点之间打乱数据(如果 shuffle flat 设置为 true)。分区器也用于一些基于 RDD 的操作,例如RDD.sortByKey看起来像:

def sortByKey(ascending: Boolean = true, numPartitions: Int = self.partitions.length): RDD[(K, V)] = self.withScope 
{ 
   val part = new RangePartitioner(numPartitions, self, ascending)
   new ShuffledRDD[K, V, V](self, part).setKeyOrdering(if (ascending) ordering else ordering.reverse)
}

关于数据读取时的分区,取决于源类型。对于 Kafka,它将是一个主题的分区,对于 HDFS 是一个文件拆分,对于一个 RDBMS 源,一个数字列和 AFAIK,这里不涉及分区器。前段时间我写了一些关于 Spark(和 Spark SQL)分区的文章。有兴趣的可以看看:


推荐阅读