第一种 key,用来做 reducer 里面的排序
-jobconf stream.map.output.field.separator=. \
-jobconf stream.num.map.output.key.fields=4 \
第二种 key,用来将具有相同 key 的数据分配到同一个 reducer 里面
-jobconf num.key.fields.for.partition=2 \
-jobconf mapred.reduce.tasks=12
理解
如果只使用第一种 key ,那么,具有相同前两个 key 的数据可能会被分到不同的 reducer。
如果只使用第二种 key ,那么,在排序时就不能有效地对主键后面的部分进行排序。
这种高效的方法等价于指定前两块作为主键,后两块作为副键。
主键用于切分块,主键和副键的组合用于排序。一个简单的示例如下:
Map的输出(key)
11.12.1.2
11.14.2.3
11.11.4.1
11.12.1.1
11.14.2.2
切分给3个reducer(前两块的值用于切分)
11.11.4.1
-----------
11.12.1.2
11.12.1.1
-----------
11.14.2.3
11.14.2.2
在每个切分后的组内排序(四个块的值都用于排序)
11.11.4.1
-----------
11.12.1.1
11.12.1.2
-----------
11.14.2.2
11.14.2.3