在map之后和reduce之前,有一个排序阶段.在流模式下,hadoop如何知道您的密钥类型是什么,并对其进行排序.
例如
输入文件格式
1990 1 1991 4 1992 5 ...
地图的结果有钥匙1990,1991,1992 ......,怎么用hadoop排序呢?(数字排序或字母排序)
在StreamJob中,地图输出键/值对被指定为
idResolver.resolve(jobConf_.get("stream.map.output", IdentifierResolver.TEXT_ID)); jobConf_.setClass("stream.map.output.reader.class", idResolver.getOutputReaderClass(), OutputReader.class); jobConf_.setMapOutputKeyClass(idResolver.getOutputKeyClass()); jobConf_.setMapOutputValueClass(idResolver.getOutputValueClass());
除非将stream.map.output
属性设置为rawbytes
或typedbytes
,否则在IdentifierResolver #resolution中将地图输出键/值设置为Text.class.
setOutputKeyClass(Text.class); setOutputValueClass(Text.class);
在Text.java中,Comparator子类扩展了WritableComparator并实现了比较方法,它以字典顺序(字典或字母顺序)进行比较.
检查StreamJob,IdentifierResolver和Text类.