Быстрый старт
Запустить узел можно из командной строки, используя конфигурацию по умолчанию, либо положив в директорию Ignite кастомный файл конфигурации.
Запускать можно несколько узлов сразу. Они автоматически обнаружат друг друга.
Для запуска узла необходимо сделать следующее:
-
Из командной строки войдите в директорию
bin
в установочной директории Ignite. Команда для входа должна выглядеть примерно так:cd {IGNITE_HOME}/bin/
-
Запустите узел, используя кастомный файл конфигурации, который будет передан в
ignite.sh|bat
в качестве параметра, например:./ignite.sh ../examples/config/example-ignite.xml
ignite.bat ../examples/config/example-ignite.xml
После запуска узла появится следующий вывод:Console type=sh[08:53:45] Ignite node started OK (id=7b30bc8e) [08:53:45] Topology snapshot [ver=1, locNode=7b30bc8e, servers=1, clients=0, state=ACTIVE, CPUs=4, offheap=1.6GB, heap=2.0GB]
-
Откройте новое окно командной строки и снова запустите команду, описанную в шаге 2.
-
Убедитесь в том, что в выводе содержится строка
Topology snapshot
:Console type=sh[08:54:34] Ignite node started OK (id=3a30b7a4) [08:54:34] Topology snapshot [ver=2, locNode=3a30b7a4, servers=2, clients=0, state=ACTIVE, CPUs=4, offheap=3.2GB, heap=4.0GB]
По умолчаниюignite.sh|bat
запускает узел, используя конфигурационный файл по умолчанию:config/default-config.xml
.
В данном разделе содержится информация о запуске кластера, а также о том, как запустить простой пример приложения Hello World, используя Java, Python и SQL.
Java
Для запуска на Java 11 и новее выполните следующее:
-
Установите в качестве значения переменной среды
JAVA_HOME
директорию установки Java. -
Ignite использует SDK API, недоступные по умолчанию. Чтобы эти API стали доступны для использования, необходимо передать в JVM определенные атрибуты. Если для запуска Ignite используется скрипт
ignite.sh
, то делать ничего не требуется, так как скрипт уже содержит эти атрибуты. В ином случае - в JVM необходимо передать следующие параметры:Console type=sh--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED --add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED --add-exports=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED --illegal-access=permit
-
TLSv1.3, доступный в Java 11, в настоящий момент не поддерживается. Если соединение между узлами осуществляется по протоколу SSL, то необходимо добавить в конфигурацию параметр
‑Djdk.tls.client.protocols=TLSv1.2
.
Запуск первого приложения
После запуска кластера можно запустить простое приложение HelloWorld:
-
Создайте новый проект Maven и добавьте в файл
pom.xml
следующие зависимости:pom.xml type=xml<properties> <ignite.version>2.10.0</ignite.version> </properties> <dependencies> <dependency> <groupId>org.apache.ignite</groupId> <artifactId>ignite-core</artifactId> <version>${ignite.version}</version> </dependency> <dependency> <groupId>org.apache.ignite</groupId> <artifactId>ignite-spring</artifactId> <version>${ignite.version}</version> </dependency> </dependencies>
-
Создайте класс
HelloWorld.java
. Ниже приведен пример простого классаHelloWorld.java
, который выводит строчку 'Hello World' и некоторую информацию об окружении на всех серверных узлах кластера. Пример ниже показывает, как можно сконфигурировать кластер, используя Java API, создать кэш с данными в нем и исполнить кастомную Java-логику на серверных узлах.HelloWorld.java type=javapublic class HelloWorld { public static void main(String[] args) throws IgniteException { // Preparing IgniteConfiguration using Java APIs IgniteConfiguration cfg = new IgniteConfiguration(); // The node will be started as a client node. cfg.setClientMode(true); // Classes of custom Java logic will be transferred over the wire from this app. cfg.setPeerClassLoadingEnabled(true); // Setting up an IP Finder to ensure the client can locate the servers. TcpDiscoveryMulticastIpFinder ipFinder = new TcpDiscoveryMulticastIpFinder(); ipFinder.setAddresses(Collections.singletonList("127.0.0.1:47500..47509")); cfg.setDiscoverySpi(new TcpDiscoverySpi().setIpFinder(ipFinder)); // Starting the node Ignite ignite = Ignition.start(cfg); // Create an IgniteCache and put some values in it. IgniteCache<Integer, String> cache = ignite.getOrCreateCache("myCache"); cache.put(1, "Hello"); cache.put(2, "World!"); System.out.println(">> Created the cache and add the values."); // Executing custom Java compute task on server nodes. ignite.compute(ignite.cluster().forServers()).broadcast(new RemoteTask()); System.out.println(">> Compute task is executed, check for output on the server nodes."); // Disconnect from the cluster. ignite.close(); } /** * A compute tasks that prints out a node ID and some details about its OS and JRE. * Plus, the code shows how to access data stored in a cache from the compute task. */ private static class RemoteTask implements IgniteRunnable { @IgniteInstanceResource Ignite ignite; @Override public void run() { System.out.println(">> Executing the compute task"); System.out.println( " Node ID: " + ignite.cluster().localNode().id() + "\n" + " OS: " + System.getProperty("os.name") + " JRE: " + System.getProperty("java.runtime.name")); IgniteCache<Integer, String> cache = ignite.cache("myCache"); System.out.println(">> " + cache.get(1) + " " + cache.get(2)); } } }
Внимание:- Не забудьте добавить
import
для классаHelloWorld.java
. - Если среда разработки использует Java-компилятор до версии 1.8, то в
pom.xml
потребуется добавить следующие настройки:
pom.xml type=xml<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
- Не забудьте добавить
-
Запустите класс
HelloWorld.java
. После запуска класса будет выведена строка 'Hello World' и информация об окружении на всех серверных узлах кластера.
Python
В данном разделе содержится информация о запуске кластера, а также о том, как запустить простой пример приложения Hello World, используя тонкий клиент для Python.
Подключение и конфигурирование
После установки необходимо установить тонкий клиент Python (
pyignite
). Для этого выполните следующую команду:pip3 install pyignite
pip install pyignite
Перед подключением через тонкий клиент Python необходимо запустить хотя бы один узел кластера.
Запуск первого приложения
После запуска кластера тонкий клиент Python можно использовать для работы с кэшами.
Предположим, что серверный узел запущен локально. Ниже приведен пример приложения
HelloWorld
, которое передает значения в кэш и забирает их оттуда:python type=pythonfrom pyignite import Client client = Client() client.connect('127.0.0.1', 10800) #Create cache my_cache = client.create_cache('my cache') #Put value in cache my_cache.put(1, 'Hello World') #Get value from cache result = my_cache.get(1) print(result)
Для запуска необходимо сохранить пример в качестве текстового файла (например,
hello.py
) и запустить его из командной строки:python3 hello.py
Примечание: можно ввести этот пример в интерпретатор или оболочку Python (например, IDLE для Windows) и изменить или исполнить его там.
SQL
Если необходимо просто запустить кластер и добавить строки с данными без запуска Java и настройки IDE, можно использовать SQL.
Утилита
sqlline
позволяет подключиться к узлу и начать вводить строки данных. Она находится в директории /bin
инсталляции Ignite SE.-
Откройте новое окно командной строки и убедитесь, что вы находитесь в директории
{IGNITE_HOME}\bin
. -
При помощи утилиты
sqlline
подключитесь к кластеру:$ ./sqlline.sh -u jdbc:ignite:thin://127.0.0.1/
$ sqlline -u jdbc:ignite:thin://127.0.0.1
-
Создайте две таблицы, запустив следующие команды в утилите
sqlline
:Create_Table type=sqlCREATE TABLE City (id LONG PRIMARY KEY, name VARCHAR) WITH "template=replicated"; CREATE TABLE Person (id LONG, name VARCHAR, city_id LONG, PRIMARY KEY (id, city_id)) WITH "backups=1, affinityKey=city_id";
-
Вставьте строки с данными, скопировав и вставив указанные ниже команды:Insert type=sql
INSERT INTO City (id, name) VALUES (1, 'Forest Hill'); INSERT INTO City (id, name) VALUES (2, 'Denver'); INSERT INTO City (id, name) VALUES (3, 'St. Petersburg'); INSERT INTO Person (id, name, city_id) VALUES (1, 'John Doe', 3); INSERT INTO Person (id, name, city_id) VALUES (2, 'Jane Roe', 2); INSERT INTO Person (id, name, city_id) VALUES (3, 'Mary Major', 1); INSERT INTO Person (id, name, city_id) VALUES (4, 'Richard Miles', 2);
-
Запустите базовые запросы:Queries type=sql
SELECT * FROM City; +--------------------------------+--------------------------------+ | ID | NAME | +--------------------------------+--------------------------------+ | 1 | Forest Hill | | 2 | Denver | | 3 | St. Petersburg | +--------------------------------+--------------------------------+ 3 rows selected (0.05 seconds)
-
Запустите запросы с распределенными
JOIN
:Queries type=sqlSELECT p.name, c.name FROM Person p, City c WHERE p.city_id = c.id; +--------------------------------+--------------------------------+ | NAME | NAME | +--------------------------------+--------------------------------+ | Mary Major | Forest Hill | | Jane Roe | Denver | | John Doe | St. Petersburg | | Richard Miles | Denver | +--------------------------------+--------------------------------+ 4 rows selected (0.011 seconds)
Пример использования плагина безопасности Ignite SE
У плагина безопасности, входящего в поставку Ignite SE, имеется открытый API.
Этот API представлен в виде java-класса
SecurityDataManager
. Данный класс читает и вносит изменения в distributed metastorage. Это касается тех записей, которые относятся к пользователям и ролям.Именно на основе данного класса строится администрирование пользователей и прав.
API работает следующим образом:
- Сущность
IgniteClient
подключается к кластеру с правами администратора безопасности. - После подключения
IgniteClient
к кластеру пользователь сможет выполнять различные действия, например, добавлять пользователей (addUser
) или изменять пароль (changePassword
).
Разработчик может подключить данный интерфейс к своему приложению, взяв из Nexus артефакт
com.sbt.security.ignite:ignite-security-plugin:(ise-version)
, где ise-version
– это версия Ignite.После этого класс
SecurityDataManager
будет доступен для использования.Описание методов класса, доступных пользователю
Метод | Описание | Входные данные | Типы входных данных | Примечания |
---|---|---|---|---|
addUser() | Добавление пользователя | - login (логин пользователя),- pwdSaltedHash ("соленый" хэш пароля),- salt ("соль"). | String | |
addRole() | Добавление роли | - roleName (имя роли), - SecurityPermissionSet set (всегда имеет значение null ) | Serializable @Nullable | Если значение типа @Nullable не null или оно вызывает метод defaultAllowAll() , то метод вернет исключение PROHIBIT_ALLOW_ALL_MESSAGE . В остальных случаях - возвращает класс RoleAddTask и создает новый метод RoleAddTaskArgument() , использующий переменные roleName и set типов Serializable и @Nullable |
removeUser() | Удаление пользователя | key (ключ) | Serializable | Значение переменной key не может быть null |
removeRole() | Удаление роли | key (ключ) | Serializable | Значение переменной key не может быть null |
updatePassword() | Обновление пароля | - login (логин), - curPwd (существующий пароль), - newPwd (новый пароль) | String | Возвращает новый метод UserUpdatePasswordTaskArgument() c этими тремя параметрами. Переменные не должны иметь значения null . |
setUserPassword() | Установка пароля пользователя | - login (логин), - pwd (пароль), - pwdSaltedHash ("соленый" хэш пароля), - salt ("соль") | String |