Почему редуктор имеет разные ключи ввода / вывода, значения в карте / редукторе hadoop?
Из-за особенностей приложений Map/Reduce, reduce
Функция может вызываться более одного раза, поэтому значение клавиши ввода / вывода должно быть таким же, как и в реализации Map/Reduce MongoDB. Я задаюсь вопросом, почему в реализации Hadoop все по-другому?
org.apache.hadoop.mapreduce.Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT>
Второй вопрос: откуда hadoop узнает, что выходные данные функции Reduce должны быть возвращены для уменьшения в следующем запуске или записи в HDFS? например:
public class MyReducer extends Reducer<Text, IntWritable, Text, IntWritable>
public void reduce(Text key, Iterable<IntWritable> values, Context context) {
context.write(key, value) /* this key/value will be returned to reduce in next run or will be written to HDFS? */
}
}
1 ответ
Рассмотрим пример, в котором вводятся имя документа (в качестве ключа) и строки документа (значения), а результаты - это STDDEV (стандартное отклонение) длины строки.
Для обобщения - тип агрегации не должен совпадать с типом входных данных. Так что Hadoop оставит свободу разработчикам.
На ваш второй вопрос - Hadoop не имеет механизма, аналогичного MongoDB incremental MapReduce, поэтому результаты редуктора всегда сохраняются в HDFS (или другой DFS) и никогда не возвращаются для уменьшения.