Статьи

OCLOUD SDK для Gridgain: разработка облачных приложений стала проще

Аннотация:

Gridgain — это программное промежуточное ПО, которое объединяет вычислительные возможности и возможности сетки данных, чтобы обеспечить основу для создания высокопроизводительных облачных приложений.  OCLOUD SDK Express — это подключаемый модуль Eclipse Java, который использует возможности Gridgain для предоставления интерфейса в стиле мастера для создания приложений, ориентированных на Gridgain. Эта статья предоставит введение в разработку приложений с помощью OCLOUD SDK Express для Gridgain 3.2.1.

Вычислить сетки

В рамках этой статьи мы сфокусируемся на функциональности Gridgain Compute Grid. Compute Grid занимаются распараллеливанием бизнес-логики. Gridgain реализует хорошо известный шаблон параллельного проектирования MapReduce для новых и существующих приложений.

Уменьшение карты

Следующие шаги дополнительно описывают шаблон проектирования MapReduce:

  1. Задачи ( GridTask ) делятся на подзадачи ( GridJobs )

  2. GridJobs отображаются и отправляются на различные узлы для параллельной обработки

  3. По завершении возвращаются результаты подзадач.

  4. Все результаты из подзадач объединяются 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.

  1. Закройте Eclipse, если он уже запущен.

  2. Скопируйте OCLOUDSDK_1.0.0. <Build> .jar в папку dropins Eclipse

  3. Перезапустите Eclipse

Настройте OCLOUD SDK Express для Gridgain

  1. Настройте путь установки Gridgain.
    а. Перейти к окну .. Настройки
    б. Перейти к OCLOUDSDK .. Настройки .
    с. Выберите Использовать системную переменную GRIDGAIN_HOME по умолчанию, если она установлена ​​правильно, или просто выберите путь установки Gridgain Home .

  2. Нажмите Применить . Нажмите ОК

 

Приложение HelloWorld, использующее OCLOUD SDK для Gridgain

Хорошо, теперь мы готовы начать разработку с Gridgain и OCLOUD SDK Express . Мы создадим приложение, которое просто печатает сообщение на нескольких компьютерах. Следуйте инструкциям в разделах ниже, чтобы создать свое приложение. 

Как создать Gridgain-проект

  1. Создайте стандартный проект Java. Для этого примера мы назвали наш проект «mygg321proj».

  2. Выберите OCLOUD SDK..Добавить / Удалить пункт меню Gridgain Capabilities из строки меню.

  3. Затем нажмите кнопку « Обзор» , чтобы выбрать соответствующий проект.

  4. Выберите Готово .

  5. Все необходимые файлы .jar будут добавлены в путь сборки проекта.

Как создать GridTask

  1. Выберите OCLOUD SDK … Новый пункт меню GridTask из главного меню

  2. Выберите исходную папку проекта, в которой будет находиться GridTask.

  3. Заполните обязательные поля:
    a. Имя : введите «HelloWorldGridTaskSplitAdapter»
    b. Суперкласс: введите ‘GridTaskSplitAdapter’

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