本人其他博文中写了自定义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/ .