如何在使用hash partition-er时平衡负载?

时间:2017-01-25 05:42:00

标签: apache-spark hash partitioning

在apache spark中 - >通过使用哈希分区,我相信具有相同哈希值的密钥将继续到同一个节点?如果大多数密钥进入相同的分区,以及如何在这种情况下平衡多个工作节点上的数据,该怎么办?请帮帮我

1 个答案:

答案 0 :(得分:1)

Doc说.. A Partitioner that implements hash-based partitioning using Java's Object.hashCode

即可。你是对的。因此,如果密钥的分配不均匀,则可能会在群集的一部分处于空闲状态时结束。 See

您有责任确保密钥均匀分布。(这意味着哈希码不应相同)

为此,您需要更好地了解HashPartitioner及其在内部的作用。

注意:密钥的哈希码只是密钥本身。 HashPartitioner将使用总分区数修改它。即hashcode Mod with totnumpartions。

以下Util类方法由HashPartitioner

用于此目的
def nonNegativeMod(x: Int, mod: Int): Int = {
  val rawMod = x % mod
  rawMod + (if (rawMod < 0) mod else 0)
}