3

У меня есть функция, которую нужно вызывать на большом количестве файлов (1000). Каждый из них независим от другого и может выполняться параллельно. Выход функции для каждого из файлов не нужно комбинировать (в настоящее время) с другими. У меня есть много серверов я могу масштабировать это на, но я не знаю, что делать:MapReduce или пакетное задание?

1) Запуск MapReduce на нем

2) Создание 1000-х рабочих мест (каждый из них имеет другой файл, он работает на).

Будет ли одно решение предпочтительнее другого?

Спасибо!

ответ

6

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

Итак, я бы предпочел запустить кучу динамически созданных пакетных файлов.

Или, как вариант, использовать менеджер кластера и планировщик заданий, как Слермаhttps://computing.llnl.gov/linux/slurm/

SLURM: высокомасштабируемый менеджер ресурсов

SLURM является менеджер с открытым исходным кодом ресурс, предназначенный для Кластеры Linux всех размеров. Он обеспечивает три ключевые функции. Сначала он выделяет эксклюзивный и/или неэксклюзивный доступ к ресурсам (компьютерным узлам) до пользователей в течение некоторого времени, чтобы они могли выполнять работу. Во-вторых, он обеспечивает основу для запуска, выполнения и мониторинга работы (обычно параллельное задание) на множестве выделенных узлов. Наконец, он арбитражает конкуренцию за ресурсы, управляя очередью ожидающих работы.

+2

+1. В общем, вы хотите сделать простейшую вещь, которая будет хорошо работать для вашей проблемы. Настройка mapreduce для выполнения чего-то, что может быть выполнена с независимыми сценариями в независимых файлах, - указывает @PA, - излишне. Сказав это, если вы знаете, что хотите изучить MapReduce по какой-то другой причине, и вы хотите использовать эту более простую проблему в качестве отправной точки, перейдите к ней. Но я бы не рекомендовал его в этом случае. –

2

Так как это всего лишь 1000 файлов (а не файлов 1000000000), полная настройка HADOOP, вероятно, будет излишней. GNU Parallel пытается заполнить пробел между последовательными сценариями и Hadoop:

ls files | parallel -S server1,server2 your_processing {} '>' out{} 

Вы, вероятно, хотите, чтобы узнать о --sshloginfile. В зависимости от того, где хранятся файлы, вы можете также изучить --trc.

Смотреть вводное видео, чтобы узнать больше: http://www.youtube.com/watch?v=OpaiGYxkSuQ