Hadoop streaming - remova a guia à direita da saída do redutor
Eu tenho um trabalho de streaming hadoop cuja saída não contém pares de chave / valor. Você pode pensar nisso como pares de valor único ou pares somente de chave.
Meu redutor de streaming (um script php) está exibindo registros separados por novas linhas. O streaming do Hadoop trata isso como uma chave sem valor e insere uma guia antes da nova linha. Essa guia extra é indesejada.
Como faço para removê-lo?
Eu estou usando o hadoop 1.0.3 com o AWS EMR. Eu baixei a fonte do hadoop 1.0.3 e encontrei este código em hadoop-1.0.3 / src / contrib / streaming / src / java / org / apache / hadoop / streaming / PipeReducer.java:
reduceOutFieldSeparator = job_.get("stream.reduce.output.field.separator", "\t").getBytes("UTF-8");
Então eu tentei passar-D stream.reduce.output.field.separator=
como um argumento para o trabalho sem sorte. Eu também tentei-D mapred.textoutputformat.separator=
e-D mapreduce.output.textoutputformat.separator=
sem sorte.
Eu procurei no google claro e nada que eu encontrei funcionou. Um resultado da pesquisa até afirmou que não havia nenhum argumento que pudesse ser passado para alcançar o resultado desejado (embora a versão do hadoop nesse caso fosse realmente muito antiga).
Aqui está o meu código (com quebras de linha adicionadas para facilitar a leitura):
hadoop jar streaming.jar -files s3n://path/to/a/file.json#file.json
-D mapred.output.compress=true -D stream.reduce.output.field.separator=
-input s3n://path/to/some/input/*/* -output hdfs:///path/to/output/dir
-mapper 'php my_mapper.php' -reducer 'php my_reducer.php'