Потоковая передача Hadoop - удаление конечной вкладки с выхода редуктора
У меня есть потоковое задание Hadoop, вывод которого не содержит пары ключ / значение. Вы можете думать об этом как о парах только для значений или пар только для ключей.
Мой потоковый редуктор (скрипт php) выводит записи, разделенные переводами строки. Потоковая передача Hadoop рассматривает это как ключ без значения и вставляет вкладку перед новой строкой. Эта дополнительная вкладка нежелательна.
Как мне это убрать?
Я использую hadoop 1.0.3 с AWS EMR. Я скачал источник hadoop 1.0.3 и нашел этот код в 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");
Поэтому я попытался передать-D stream.reduce.output.field.separator=
как аргумент к работе без удачи. Я тоже пробовал-D mapred.textoutputformat.separator=
а также-D mapreduce.output.textoutputformat.separator=
без удачи
Я искал в Google, конечно, и ничего, что я нашел, не сработало. В одном из результатов поиска даже указывалось, что не было аргумента, который можно было бы передать для достижения желаемого результата (хотя версия hadoop в этом случае была действительно очень старой).
Вот мой код (с добавлением разрывов строк для удобства чтения):
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'