clojure: параллельная обработка с использованием нескольких компьютеров

у меня есть 500 каталогов и 1000 файлов (каждый около 3-4 тыс. строк) для каждого каталога. я хочу запустить одну и ту же программу clojure (уже написанную) для каждого из этих файлов. у меня 4 восьмиядерных сервера. как лучше распределить процессы по этим ядрам? Каскалог (hadoop + clojure)?

в основном, программа читает файл a, использует сторонний Java jar для выполнения вычислений и вставляет результаты в БД

обратите внимание, что: 1. возможность использования сторонних библиотек/jar является обязательной 2. нет никаких запросов


person Pradnyesh Sawant    schedule 02.01.2015    source источник
comment
до сих пор я обрабатывал один каталог за раз на 1 сервере, используя pmap. но для обработки 500 каталогов мне нужно масштабировать по горизонтали   -  person Pradnyesh Sawant    schedule 02.01.2015
comment
вы думали о STORM?   -  person Shawn Zhang    schedule 02.01.2015
comment
@shawn-zhang спасибо за предложение, я посмотрю. тем не менее, я никогда не занимался обработкой больших данных и не знаю многих вариантов, кроме самых популярных, таких как hadoop, или найденных с помощью базового поиска, такого как cascalog и т. д.   -  person Pradnyesh Sawant    schedule 02.01.2015


Ответы (2)


Поскольку, насколько я понимаю, в вашем общем процессе нет этапа «уменьшения», имеет смысл разместить 125 каталогов на каждом сервере, а затем потратить оставшееся время, пытаясь заставить эту программу обрабатывать их быстрее. До момента, когда вы насыщаете БД, конечно.

Большинство доступных инструментов «больших данных» (Hadoop, Storm) сосредоточены на процессах, которые нуждаются как в очень мощных операциях сопоставления, так и в уменьшении, возможно, с несколькими этапами каждой. В вашем случае все, что вам действительно нужно, - это достойный способ отслеживать, какие задания прошли, а какие нет. Я так же плохо, как и все (и хуже, чем многие) в прогнозировании времени разработки, хотя в этом случае я бы сказал, что есть равные шансы, что переписывание вашего процесса с помощью одного из инструментов map-reduce-esque займет больше времени, чем добавление процесс мониторинга, чтобы отслеживать, какие задания завершены, а какие нет, чтобы вы могли повторно запустить неудачные задания позже (предпочтительно автоматически).

person Arthur Ulfeldt    schedule 02.01.2015
comment
Точно мои мысли; просто хотел проверить. Спасибо :) - person Pradnyesh Sawant; 04.01.2015

Onyx — это недавняя альтернатива Hadoop/Storm на чистом Clojure. Если вы знакомы с Clojure, работать с Onyx довольно просто. Вы должны попробовать этот подход, основанный на данных:

https://github.com/MichaelDrogalis/onyx

person myguidingstar    schedule 04.01.2015