Аннотация:
Gridgain — это программное промежуточное ПО, которое объединяет вычислительные возможности и возможности сетки данных, чтобы обеспечить основу для создания высокопроизводительных облачных приложений. OCLOUD SDK Express — это подключаемый модуль Eclipse Java, который использует возможности Gridgain для предоставления интерфейса в стиле мастера для создания приложений, ориентированных на Gridgain. Эта статья предоставит введение в разработку приложений с помощью OCLOUD SDK Express для Gridgain 3.2.1.
Вычислить сетки
В рамках этой статьи мы сфокусируемся на функциональности Gridgain Compute Grid. Compute Grid занимаются распараллеливанием бизнес-логики. Gridgain реализует хорошо известный шаблон параллельного проектирования MapReduce для новых и существующих приложений.
Уменьшение карты
Следующие шаги дополнительно описывают шаблон проектирования MapReduce:
-
GridJobs отображаются и отправляются на различные узлы для параллельной обработки
-
По завершении возвращаются результаты подзадач.
-
Все результаты из подзадач объединяются GridTask в конечный результат.
Гибкая программная модель
Программная модель Gridgain очень гибкая, поскольку предлагает несколько подходов к разработке распределительных приложений. Различные подходы включают
1. Direct Grid Task и Grid Jobs.
2. Включение базовой сетки AOP с помощью нотации @Gridify
3. Использование функциональных API Gridgain
В этой статье мы решим использовать прямой подход GridTask / Grid Jobs, поскольку он обеспечивает максимальный контроль над нашей логикой программирования.
GridTask и GridJob
Объекты GridTask и GridJob являются основными абстракциями, используемыми в архитектуре Gridgain Compute Grid. GridTask отвечает за общую обработку отображения / сокращения логики, в то время как GridJob представляет единицу работы, которая должна быть сопоставлена / отправлена на различные узлы для выполнения.
Предпосылки:
Прежде чем начать, вам нужно зайти на сайты Gridgain и NetMillennium, чтобы скачать
последний выпуск Gridgain и OCLOUD SDK соответственно. OCLOUD SDK Экспресс плагин поддерживает Gridgain 3.x и выше. К счастью, обе установки довольно тривиальны.
Установка сетки
1. Загрузите GridGain ZIP-архив с http://www.gridgain.com/downloads.shtml
2. Извлеките файл .zip в папку установки в вашей системе.
3. Установите переменную среды GRIDGAIN_HOME, чтобы она указывала на папку установки
OCLOUD SDK Express Установка
Перейдите на сайт Netmillennium, чтобы загрузить OCLOUD SDK Express.
-
Закройте Eclipse, если он уже запущен.
-
Скопируйте OCLOUDSDK_1.0.0. <Build> .jar в папку dropins Eclipse
-
Перезапустите Eclipse
Настройте OCLOUD SDK Express для Gridgain
-
Настройте путь установки Gridgain.
а. Перейти к окну .. Настройки
б. Перейти к OCLOUDSDK .. Настройки .
с. Выберите Использовать системную переменную GRIDGAIN_HOME по умолчанию, если она установлена правильно, или просто выберите путь установки Gridgain Home . -
Нажмите Применить . Нажмите ОК
Приложение HelloWorld, использующее OCLOUD SDK для Gridgain
Хорошо, теперь мы готовы начать разработку с Gridgain и OCLOUD SDK Express . Мы создадим приложение, которое просто печатает сообщение на нескольких компьютерах. Следуйте инструкциям в разделах ниже, чтобы создать свое приложение.
Как создать Gridgain-проект
-
Создайте стандартный проект Java. Для этого примера мы назвали наш проект «mygg321proj».
-
Выберите OCLOUD SDK..Добавить / Удалить пункт меню Gridgain Capabilities из строки меню.
-
Затем нажмите кнопку « Обзор» , чтобы выбрать соответствующий проект.
-
Выберите Готово .
-
Все необходимые файлы .jar будут добавлены в путь сборки проекта.
Как создать GridTask
-
Выберите OCLOUD SDK … Новый пункт меню GridTask из главного меню
-
Выберите исходную папку проекта, в которой будет находиться GridTask.
-
Заполните обязательные поля:
a. Имя : введите «HelloWorldGridTaskSplitAdapter»
b. Суперкласс: введите ‘GridTaskSplitAdapter’ - Заполните необязательные поля для SPI-задач и типов Injectable.
Выберите типы GridInstanceResource и GridLoggerResource .
5. Установите флажок «Создать», чтобы создать основной класс Java, который будет отвечать за
выполнение GridTask
6. Выберите Готово. Будет создан минимальный класс GridTask , как показано в листинге 1a.
а также класс ‘startter’ (Листинг 1b), который отвечает за выполнение GridTask .
Листинг 1a: HelloWorldGridTaskSplitAdapter.java
package tasks; import java.util.Collection; import java.util.List; import org.gridgain.grid.Grid; import org.gridgain.grid.GridException; import org.gridgain.grid.GridJobResult; import org.gridgain.grid.GridTaskSplitAdapter; import org.gridgain.grid.logger.GridLogger; import org.gridgain.grid.resources.GridInstanceResource; import org.gridgain.grid.resources.GridLoggerResource; public class HelloWorldGridTaskSplitAdapter extends GridTaskSplitAdapter<Object, Object> { /** * @GridInstanceResource is a Grid instance for executing and deploying tasks, sending messages. **/ @GridInstanceResource private Grid grid; /** * @GridLoggerResource is a GridLogger which provides logging functionality. **/ @GridLoggerResource private GridLogger gridLogger; public Object reduce(List<GridJobResult> arg0) throws GridException { // TODO Auto-generated method stub return null; } @Override protected Collection split(int gridSize, Object arg1) throws GridException { // TODO Auto-generated method stub return null; } }
Линия 20
@GridInstanceResource представляет узел сетки, где будет выполняться GridJob.
Линия 26
@GridLoggerResource представляет объект Logger для сбора важной информации.
Листинг 1b : HelloGridTaskSplitAdapterExample.java
package tasks; import org.gridgain.grid.Grid; import org.gridgain.grid.GridException; import org.gridgain.grid.typedef.G; public class HelloGridTaskSplitAdapterExample { public static void main(String[] args) throws GridException { if (args.length == 0) { G.start(); } else { G.start(args[0]); } try { Grid grid = G.grid(); //TO DO: Execute GridTask here } finally { G.stop(true); } } }
Линии 10-14
Эти строки отвечают за запуск среды выполнения Gridgain.
Линии 17-22
Эти строки отвечают за остановку среды выполнения Gridgain.
Листинг 2а. HelloWorldGridTaskSplitAdapter.java ( завершенная программа)
package tasks; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.UUID; import org.gridgain.grid.GridException; import org.gridgain.grid.GridJob; import org.gridgain.grid.GridJobAdapterEx; import org.gridgain.grid.GridJobResult; import org.gridgain.grid.GridTaskSplitAdapter; import org.gridgain.grid.logger.GridLogger; import org.gridgain.grid.resources.GridHomeResource; import org.gridgain.grid.resources.GridLocalNodeIdResource; import org.gridgain.grid.resources.GridLoggerResource; public class HelloWorldGridTaskSplitAdapter extends GridTaskSplitAdapter<Object, Object> { /** * @GridHomeResource represents installation path of the current grid executing this task. **/ @GridHomeResource private String gridHomeResource; /** * @GridLoggerResource is a GridLogger which provides logging functionality. **/ @GridLoggerResource private GridLogger log; /** * @GridLocalNodeIdResource annotates a field or a setter method for injection of local node UUID resource. Node UUID * is a globally unique node identifier and is provided to grid via GridConfiguration. **/ @GridLocalNodeIdResource private UUID gridLocalNodeId; public Integer reduce(List<GridJobResult> arg0) throws GridException { // TODO Auto-generated method stub return null; } @Override protected Collection split(int gridSize, Object arg1) throws GridException { // TODO Auto-generated method stub // Split the passed sentence into multiple words delimited by spaces. String[] words = ((String)arg1).split(" "); List<GridJob> jobs = new ArrayList<GridJob>(words.length); for (String word : words) { // Every job gets its own word as an input. jobs.add(new GridJobAdapterEx(word) { /* * Prints out the nodeId and word passed into respective job. * */ public Serializable execute() { String word = argument(0); if (log.isInfoEnabled() == true) { log.info("***"); log.info("*** Printing '" + word + "' on nodeId " + gridLocalNodeId + " from grid job."); log.info("***"); } // Return number of letters in the word. return word.length(); } }); } return jobs; } }
Линии 48-79
Метод split отвечает за создание GridJob для каждого из входных параметров.
Каждый GridJob распечатает слово из предложения.
Листинг 2b. HelloWorldGridTaskSplitAdapterExample.java ( завершенная программа)
package tasks; import org.gridgain.grid.Grid; import org.gridgain.grid.GridException; import org.gridgain.grid.GridTaskFuture; import org.gridgain.grid.typedef.G; public class HelloWorldGridTaskSplitAdapterExample { public static void main(String[] args) throws GridException { if (args.length == 0) { G.start(); } else { G.start(args[0]); } try { Grid grid = G.grid(); // Execute task. GridTaskFuture<Object> future = grid.execute(HelloWorldGridTaskSplitAdapter.class, "OCLOUD SDK Express for Gridgain is easy to use!"); // Wait for task completion. Object result = future.get(); } finally { G.stop(true); } } }
Линии 20-23
Эти строки необходимы для выполнения GridTask.
Чтобы выполнить этот пример, просто запустите несколько автономных узлов GridGain, выполнив скрипт GRIDGAIN_HOME / bin / ggstart . Затем запустите главный класс HelloWorldGridTaskSplitAdapterExample . Вы увидите различные слова из фразы, напечатанной на каждом узле сетки.