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