Параметры параллелизации / кластера для выполнения кода - PullRequest
6 голосов
/ 26 января 2011

Я пришел из Java-фона и у меня проблема с процессором, которую я пытаюсь распараллелить, чтобы улучшить производительность. Я разбил свой код на модульный способ выполнения, чтобы его можно было распространять и запускать параллельно (надеюсь).

@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void runMyJob(List<String> some params){
  doComplexEnoughStuffAndWriteToMysqlDB();
}

Теперь я подумываю над следующими вариантами распараллеливания этой проблемы, и мне хотелось бы, чтобы у людей были мысли / опыт в этой области.

Опции, о которых я сейчас думаю:

1) Использование кластеризации Java EE (например, JBoss) и MessageDrivenBeans. MDB находятся на подчиненных узлах в кластере. Каждый MDB может выбрать событие, которое запускает работу, как указано выше. AFAIK Java EE MDB являются многопоточными сервером приложений, поэтому мы надеемся, что они также смогут использовать преимущества многоядерности. Таким образом, он должен быть масштабируемым по вертикали и горизонтали.

2) Я мог бы взглянуть на что-то вроде Hadoop и Map Reduce. Беспокойство, которое у меня возникло бы здесь, заключается в том, что моя логика обработки заданий на самом деле довольно высокого уровня, поэтому я не уверен, насколько это переводимо для Map Reduce. Кроме того, я новичок в MR.

3) Я мог бы взглянуть на что-то вроде Scala, что, на мой взгляд, значительно упрощает программирование параллелизма. Однако, хотя это масштабируемое по вертикали, это не кластерное / горизонтально масштабируемое решение.

В любом случае, надеюсь, что все это имеет смысл, и большое спасибо за любую оказанную помощь.

Ответы [ 2 ]

0 голосов
/ 22 июля 2013

Вы должны взглянуть на Искра .Это инфраструктура кластерных вычислений, написанная на Scala с целью стать жизнеспособной альтернативой Hadoop.Он имеет ряд приятных умений:

  • Вычисления в памяти: вы можете контролировать степень кэширования
  • Совместимость ввода / вывода Hadoop: Spark может читать / записывать данные со всехВходные источники Hadoop, такие как HDFS, EC2 и т. Д.
  • Концепция «отказоустойчивых распределенных наборов данных» (RDD), которая позволяет напрямую выполнять большинство рабочих нагрузок в стиле MR параллельно в кластере, как это было бы локально
  • Основной API = Scala, необязательные API Python и Java
  • Используется Akka:)

Если я правильно понимаю ваш вопрос, Spark объединит ваши варианты 2) и 3).

0 голосов
/ 08 мая 2012

решение, которое вы ищете, это Akka. Кластеризация - это разрабатываемая функция, которая обычно включается в Akka 2.1

.
  • Превосходный Scala и Java Api, очень полный
  • Шаблон, ориентированный исключительно на сообщения, без общего состояния
  • Отказоустойчивый и масштабируемый
  • Чрезвычайно легко распределить рабочие места

Пожалуйста, избавьтесь от J2EE, если вы все еще вовремя. Вы можете присоединиться к списку рассылки Akka и задать свои вопросы.

...