Apache PIG - 如何在GROUP操作的Reducer之间分配数据

时间:2014-03-27 17:08:31

标签: mapreduce apache-pig

我想知道PIG如何确实如何在减少阶段对数据进行分区,以及我是否可以影响数据分布以避免不平衡的减速器负载。

例如:

grouped_data = GROUP data BY (year, month, day) PARALLEL 10;

是否可以通过以下方式更改分区: 1.)在组操作之前洗牌数据 要么 2.)改变元组中变量的顺序 ???

或者你建议采用不同的方法吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

默认情况下,在大多数情况下,PIG使用Hadoop的默认分区程序,即HashPartitioner。

public int getPartition(K key, V value, int numReduceTasks) {
  return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}

您可以使用PARTITION BY提供自己的策略。

B = GROUP data BY (year, month, day) PARTITION BY foo.bar.CustomPartitioner PARALLEL 10;