Распределенное планирование заданий, управление и отчетность

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

Мне интересно, существует ли что-нибудь в домене Java для распределенного выполнения заданий, которые нелегко выразить как проблемы MapReduce? Для пример:

  • задания, требующие координации и синхронизации задач. Например, они могут включать последовательное выполнение задач, но некоторые задачи можно выполнять одновременно:

                   .-- B --.
            .--A --|       |--.
            |      '-- C --'  |
    Start --|                 |-- Done
            |                 |
            '--D -------------'
    
  • CPU интенсивные задачи, которые вы хотели бы распространять, но не предоставляют никаких выходов для уменьшения-преобразование/изменение размера изображения, например.

Итак, есть Java framework / платформа, которая предоставляет такой распределенный вычислительная среда? Или это приемлемо / достижимо с помощью Hadoop - и если да, то есть ли какие-либо шаблоны/рекомендации для таких заданий?

6 ответов


с тех пор я нашел Весенний Замес и Весенняя Пакетная Интеграция которые, по-видимому, касаются многих моих требований. Я дам вам знать, как у меня дела.


посмотри кварцевые. Я думаю, что он поддерживает такие вещи, как удаленное управление заданиями и кластеризация нескольких машин для запуска заданий.


Я думаю, вы ищете механизм рабочего процесса для задач с интенсивным процессором (также знаете "научный рабочий процесс", например http://www.extreme.indiana.edu/swf-survey). Но я не уверен, насколько распределены вы хотите, чтобы это было. Обычно все механизмы рабочих процессов имеют "единую точку отказа".


Я считаю, что довольно много проблем можно выразить как проблемы с уменьшением карты.

для проблем, которые вы не можете изменить, чтобы соответствовать структуре, вы можете посмотреть на настройку своего собственного с помощью Java ExecutorService. Но он будет ограничен одним JVM,и он будет довольно низким. Однако это позволит обеспечить легкую координацию и синхронизацию.


Упреждающий Планировщик похоже, соответствует вашим требованиям, особенно сложным рабочим процессам, которые вы упомянули с координацией задач. Это с открытым исходным кодом и на основе Java. Вы можете использовать его для запуска чего угодно, заданий Hadoop, скриптов, Java-кода...

отказ от ответственности: я работаю на компанию за это


попробовать Рэдиссон основы. Он обеспечивает простой api для выполнения и планирования java.util.concurrent.Callable и java.lang.Runnable задач. Вот документация о distributed исполнитель услуги и служба планировщика