2009-12-16 5 views
9

Недавно я играл с Hadoop и был впечатлен его планированием, управлением и представлением отчетов о работе MapReduce. Похоже, что распределение и исполнение новых рабочих мест совершенно безболезненно, что позволяет разработчику сосредоточиться на реализации своих рабочих мест.Распределенное планирование, управление и отчетность

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

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

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

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

ответ

3

С тех пор я нашел Spring Batch и Spring Batch Integration, которые, как представляется, соответствуют многим моим требованиям. Я дам вам знать, как я себя чувствую.

+0

Как Spring Batch помогает распараллелить работу через кластер, как Hadoop? – Marquez

0

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

0

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

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

2

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

+0

+1 отличная фреймворк – JamesC

0

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

Отказ от ответственности: Я работаю на company за ним

0

Попробуйте Redisson рамки. Он обеспечивает легкий api для выполнения и планирования заданий java.util.concurrent.Callable и java.lang.Runnable. Вот документация о распределенных Executor service и Scheduler service

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