Partitioner

  partitioner 是map中的数据映射到不同的reduce时的根据。一般情况下,partitioner会根据数据的key来把数据平均分配给不同的reduce,同时保证相同的key分发到同一个reduce。但当一个数据不平衡时,即某个key对应的数据量太大,导致reduce的空间不够,或者计算耗费太多时间时,可以重写partitioner,来按照实际情况分发数据。

下面是一个partitioner的例子,很简单,不多说了。

	public static class TestPartitioner<K, V> extends Partitioner<K, V> { 

		
		  /** Use {@link Object#hashCode()} to partition. */ 
		  public int getPartition(K key, V value, 
		                          int numReduceTasks) { 
		    return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks; 
//			数据均传给第一个reduce
//			return 0;
		  } 

	} 

  

原文地址:https://www.cnblogs.com/nocml/p/5148093.html