Настройка параметра в конфигурации задания MapReduce

Есть ли способ установить параметр в конфигурации задания из Mapper и доступен из Reducer,

Я попробовал приведенный ниже код

В Mapper: map(..): context.getConfiguration().set("Sum","100");В редукторе: reduce(..): context.getConfiguration().get("Sum");

Но в редукторе значение возвращается как null,

Есть ли способ реализовать это или что-то упущенное с моей стороны?

2 ответа

Насколько я знаю, это невозможно. Конфигурация задания сериализуется в XML во время выполнения с помощью Jobtracker и копируется во все узлы задачи. Любые изменения в объекте конфигурации будут влиять только на этот объект, который является локальным для конкретной задачи JVM; это не изменит XML на каждом узле.

В общем, вы должны стараться избегать любого "глобального" состояния. Это противоречит парадигме MapReduce и, как правило, предотвращает параллелизм. Если вам абсолютно необходимо передать информацию между этапами Map и Reduce, и вы не можете сделать это с помощью обычного шага перемешивания / сортировки, то вы можете попробовать выполнить запись в распределенный кэш или напрямую в HDFS.

Если вы используете новый API, ваш код в идеале должен работать. Вы создали это свойство "Сумма" в начале создания вакансии? Например, вот так

Configuration conf = new Configuration();
conf.set("Sum", "0");
Job job = new Job(conf);

Если не лучше использовать

context.getConfiguration().setIfUnset("Sum","100");

В вашем классе картографа, чтобы исправить проблему. Это единственное, что я вижу.

Другие вопросы по тегам