Доступ к конфигурации задания из RecordReader / InputFormat

#hadoop #mapreduce

#hadoop #mapreduce

Вопрос:

Я использую Hadoop, и мне нужно создать пользовательский формат ввода.

Для этого я переопределяю классы InputFormat и RecordReader, как описано здесь

Я хотел бы получить доступ к конфигурации задания (для доступа к некоторой переменной, установленной перед запуском задания). Я могу получить доступ к «TaskAttemptContext» и получить из него объект конфигурации, но это не глобальная конфигурация задания.

Я не знаю, возможно ли то, что я хочу, но было бы очень полезно, если у вас есть идея.

Спасибо.

Ответ №1:

Наконец, TaskAttemptContext содержит глобальную конфигурацию, возможно, я допустил ошибку. Таким образом, можно передать переменную из средства запуска main() в InputFormat.

Комментарии:

1. Привет, Гийомеп, как ты справился с этим? Я в такой же ситуации, имею дело с пользовательским InputFormat .

Ответ №2:

Не уверен, решит ли это вашу проблему.

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

 Configuration conf = new Configuration();
conf.setInt ("paramname",value);
Job job = new Job(conf);
 

Доступ к тому же в вашем mapper / reducer с помощью

 Configuration conf = context.getConfiguration();
int myParam = conf.getInt("paramname", 0);
 

Комментарии:

1. Проблема в том, что я не хочу получать доступ к переменной конфигурации из mapper / reducer, а из классов InputFormat или RecordReader.

Ответ №3:

TaskAttempContext будет содержать конфигурацию уровня задания. Иерархия

 JobContext - contains job level context

TaskAttemptContext - contains TaskAttempt level context   JobContext

TaskInputOutputContext - contains TaskInputOutput level context   TaskAttemptContext     JobContext

MapContext - contains Mapper specific context   TaskInputOutputContext   TaskAttemptContext     JobContext

ReduceContext - contains Reducer specific context   TaskInputOutputContext   TaskAttemptContext     JobContext