hadoop streaming 的两种 key

参考:Hadoop Streaming 0.18 文档

第一种 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

你可能感兴趣的:(hadoop)