Подтвердить что ты не робот

Возможно ли иметь несколько входов с несколькими разными картами в Hadoop MapReduce?

Возможно ли иметь несколько входов с несколькими разными картами в Hadoop MapReduce? Каждый класс сопоставления работает с другим набором входов, но все они будут испускать пары ключ-значение, потребляемые одним и тем же редуктором. Обратите внимание: я не говорю о цепочке mappers здесь, я говорю о запуске разных mappers параллельно, а не последовательно.

4b9b3361

Ответ 1

Это называется соединением.

Вы хотите использовать mappers и редукторы в mapred. * packages (более старые, но все же поддерживаемые). Более новые пакеты (mapreduce. *) Допускают только один вводщик. С помощью отображенных пакетов вы используете класс MultipleInputs для определения соединения:

MultipleInputs.addInputPath(jobConf, 
                     new Path(countsSource),       
                     SequenceFileInputFormat.class, 
                     CountMapper.class);
MultipleInputs.addInputPath(jobConf, 
                     new Path(dictionarySource), 
                     SomeOtherInputFormat.class, 
                     TranslateMapper.class);

jobConf.setJarByClass(ReportJob.class);
jobConf.setReducerClass(WriteTextReducer.class);

jobConf.setMapOutputKeyClass(Text.class);
jobConf.setMapOutputValueClass(WordInfo.class);

jobConf.setOutputKeyClass(Text.class);
jobConf.setOutputValueClass(Text.class);

Ответ 2

Я отвечу на ваш вопрос с вопросом, двумя ответами и анти-рекомендацией.

Вопрос: какое преимущество вы видите при параллельном выполнении гетерогенных заданий карты, в отличие от их запуска последовательно, выводя однородные результаты, которые можно правильно перетасовать? Является ли идея не пропускать одни и те же записи дважды, один раз с идентификационной картой?

Первый ответ заключается в том, чтобы планировать одновременно задания только для сопоставления, каждый на половине вашего флота (или какое-либо соотношение лучше всего соответствует размеру входных данных), выводя однородные результаты, за которым следует задание только для редуктора, выполняющее соединение.

Второй ответ заключается в создании пользовательского InputFormat, который способен распознавать и преобразовывать оба варианта гетерогенного ввода. Это крайне уродливо, но это позволит вам избежать ненужной карты идентичности первого предложения.

Антирекомендация заключается в том, чтобы не использовать устаревшие API Hadoop из ответа Криса. Hadoop очень молод, но APIs стабилизируются вокруг "нового" вкуса. Вы в конце концов придете к блокировке версии.