#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