2013-12-09 4 views
1

У меня есть вопрос. Можно ли разделить наш вклад программы mapreduce на процесс с несколькими функциями отображения? Я имею в виду, можем ли мы назначить определенный диапазон ввода для каждой функции карты?Разделите ввод на несколько карт

+1

Конечно, это распределенный алгоритм? Если вы хотите контролировать количество карт, которые вы можете играть с разделенным размером, вы можете разделить свой вход в разные файлы ... Можете ли вы быть более конкретными относительно того, что вы пытаетесь сделать? – DDW

+0

Спасибо за ваш ответ .. Да, мой вход от кассандры. например, я хочу, чтобы данные, считываемые с карты1, от строки 1 до 1000, map2 считывали данные из строки с 1000 по 2000 и т. д. таким образом, это возможно? –

ответ

1

Самый простой способ сделать это - использовать MultipleInputs. В частности, используйте функцию addInputPath, которая имеет параметр для передачи в классе сопоставления.

Вот пример:

MultipleInputs.addInputPath(thejob, new Path(path1), TextInputFormat.class, Mapper1.class); 
MultipleInputs.addInputPath(thejob, new Path(path2), TextInputFormat.class, Mapper2.class); 
... 
MultipleInputs.addInputPath(thejob, new Path(pathN), TextInputFormat.class, MapperN.class); 

Это сделает это так Mapper1 запускается против path1 и Mapper2 запускается против path2 и т.д.

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

Смежные вопросы