本人其他博文中写了自定义InputFormat的制作。
可是直接加入后一直得不到想要的结果。
查看源码发现:
PipeMapper.java
if (!this.ignoreKey) {
write(key);
clientOut_.write(getInputSeparator());
}
write(value);
clientOut_.write('\n');
if(skipping) {
//flush the streams on every record input if running in skip mode
//so that we don't buffer other records surrounding a bad record.
clientOut_.flush();
}
只有TextInputFormat时,streaming才默认只处理Value,其他inputFormat,key和value都要处理,改写PipeMapper.java
并重新生成streaming.jar只需要在MANIFEST.MF中指定主类就可以。
MANIFEST.MF:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 20.1-b02 (Sun Microsystems Inc.)
Main-Class: org.apache.hadoop.streaming.HadoopStreaming
jar cvfm jar/hadoop-streaming-1.0.0.jar MANIFEST.MF -C classes/ .