Аннотация:
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 . Вы увидите различные слова из фразы, напечатанной на каждом узле сетки.