Руководство прикладного разработчика#
Термины и определения#
Термин/Аббревиатура |
Определение |
|---|---|
JDK |
Java Development Kit, комплект разработчика приложений на языке Java |
ОС |
Операционная система |
Системные требования#
Platform V DataGrid можно безопасно использовать при следующей конфигурации среды:
Требование |
Описание |
|---|---|
JDK |
Oracle JDK 8 и новее, Open JDK 8 и новее, IBM JDK 8 и новее |
ОС |
Linux (любой версии), macOS (10.6 и новее), Windows (XP и новее), Windows Server (2008 и новее), Oracle Solaris, z/OS |
Архитектура |
x86, x64, SPARC, PowerPC |
Сеть |
Ограничения отсутствуют (рекомендуется 10 Гбит/с) |
Специальных рекомендаций по настройке ОС нет. Настройки ОС и окружения определяются внутренними политиками безопасности на стороне клиента.
Подключение и конфигурирование#
Подключение и конфигурирование программного продукта описывается в документе «Руководство по системному администрированию».
Миграция на текущую версию#
Описание роли для миграции на текущую версию находится в разделе «Обновление Platform V DataGrid» документа «Руководство по установке».
Разработка первого приложения с использованием программного продукта#
Руководство по первому запуску Platform V DataGrid соотстветствует руководству по первому запуску Apache Ignite.
Java#
В данном разделе содержится информация о том, как запустить простой пример приложения Hello World, используя Java.
Запуск Platform V DataGrid на Java 11 и новее#
Для запуска Platform V DataGrid на Java 11 и новее необходимо сделать следующее:
Установить в качестве значения переменной среды JAVA_HOME директорию установки Java.
Ignite использует SDK API, недоступные по умолчанию. Чтобы эти API стали доступны для использования, необходимо передать в JVM определенные атрибуты. Если для запуска Platform V DataGrid вы используете скрипт ignite.sh, то делать ничего не придется, так как скрипт уже содержит эти атрибуты. В ином случае в JVM необходимо передать следующие параметры:
--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-зависимости. Это самый простой способ начать работать с Platform V DataGrid на Java. Необходимо создать новый проект Maven и добавить в файл pom.xml следующие зависимости:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sbt.ignite</groupId> <artifactId>Your_Project_Name</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <ignite.se.version>4.2100.0</ignite.se.version> <ignite.version>2.10</ignite.version> </properties> <dependencies> <dependency> <groupId>com.sbt.ignite</groupId> <artifactId>ignite-core</artifactId> <version>${ignite.se.version}</version> </dependency> <dependency> <groupId>com.sbt.sbergrid</groupId> <artifactId>security-core</artifactId> <version>${ignite.se.version}</version> </dependency> <!-- Зависимости commons-lang&jaxb-api требуются при использовании толстого клиента --> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version> </dependency> <!-- Зависимости для REST API--> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> </dependencies> <!-- Указанные ниже настройки необходимо добавлять при использовании Java-компилятора до версии 1.8 --> <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> </project>
Внимание
В случае, если maven-зависимости не подгружаются, нужно проверить, какие репозитории указаны в файле settings.xml. Обычно он находится по пути
~/Users/user/.m2/settings.xml.Файл settings.xml должен выглядеть так:
<settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/SETTINGS/1.0.0" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <servers> <server> <id>internal</id> <username>[username]</username> <!--имя пользователя и пароль от репозиториев в Nexus--> <password>[userpass]</password> </server> <server> <id>corp-releases</id> <username>[username]</username> <!--имя пользователя и пароль от репозиториев в Nexus--> <password>[userpass]</password> </server> </servers> <mirrors> <mirror> <id>Mirror of central</id> <name>Mirror of central</name> <url>http://nexus.sigma.sbrf.ru:8099/nexus/content/groups/public</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> <profiles> <profile> <id>nexus</id> <repositories> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>central-nexus</id> <name>central</name> <url>http://nexus.sigma.sbrf.ru:8099/nexus/content/groups/public</url> </repository> <repository> <id>internal</id> <name>internal</name> <url>http://nexus.sigma.sbrf.ru:8099/nexus/content/groups/internal</url> </repository> <repository> <id>corp-releases</id> <name>corp-releases</name> <url>http://nexus.sigma.sbrf.ru:8099/nexus/content/repositories/corp-releases</url> </repository> </repositories> </profile> </profiles> <activeProfiles> <activeProfile>nexus</activeProfile> </activeProfiles> </settings>
Создать класс
ThinClient.java. Ниже приведен пример простого классаThinClient.java, который выводит строчку 'Hello World'. Пример ниже показывает, как можно сконфигурировать кластер, используя Java API, создать кэш с данными в нем и исполнить кастомную Java-логику на серверных узлах:
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.client.ClientCache;
import org.apache.ignite.client.IgniteClient;
import org.apache.ignite.configuration.BinaryConfiguration;
import org.apache.ignite.configuration.ClientConfiguration;
import org.apache.ignite.lang.IgniteRunnable;
import org.apache.ignite.resources.IgniteInstanceResource;
import org.apache.ignite.ssl.SslContextFactory;
import java.security.cert.CertificateEncodingException;
import static org.apache.ignite.client.SslMode.REQUIRED;
public class ThinClient {
private static final String CLIENT_KEY_STORE = "path/to/keystore.jks"; //jks в письме
private static final String TRUST_STORE = "path/to/dev-truststore.jks"; //jks в письме
private static final String CLIENT_KEY_STORE_PWD = "keystorepass"; //пароль в письме
private static final String TRUST_STORE_PWD = "truststorepass"; //пароль в письме
private static final String DFLT_ADDR = "0.0.0.0:10800"; //адреса в письме
private static final String CLIENT_LOGIN = "login"; //логин в письме
private static final String CLIENT_PWD = "password"; // пароль задается при заказе кластера в ДИ
private static final String TEST_CACHE = "THIN_TEST_CACHE"; //имя создаваемого кеша
/**
* @param args Args.
*/
public static void main(String[] args) throws Exception {
IgniteClient client = Ignition.startClient(getIgniteClientConfiguration());
ClientCache<String, String> clntCache = client.getOrCreateCache(TEST_CACHE);
clntCache.put("key", "Hello");
clntCache.put("key1","World!" );
System.out.println(">> Created cache and added values.");
System.out.println(">> Receiving data...");
System.out.println(clntCache.get("key") + " " + clntCache.get("key1"));
System.out.println(">> Data received from cache successfully");
client.close();
}
private static ClientConfiguration getIgniteClientConfiguration() throws CertificateEncodingException {
return new ClientConfiguration()
.setSslContextFactory(createSslCtxFactory())
.setAddresses(DFLT_ADDR, "10.53.220.23")
.setSslMode(REQUIRED)
.setUserName(CLIENT_LOGIN)
.setUserPassword(CLIENT_PWD)
.setPartitionAwarenessEnabled(true)
.setBinaryConfiguration(new BinaryConfiguration().setCompactFooter(true));
}
private static SslContextFactory createSslCtxFactory() {
SslContextFactory sslCtxFactory = new SslContextFactory();
sslCtxFactory.setKeyStoreFilePath(ThinClient.CLIENT_KEY_STORE);
sslCtxFactory.setKeyStorePassword(CLIENT_KEY_STORE_PWD.toCharArray());
sslCtxFactory.setTrustStoreFilePath(TRUST_STORE);
sslCtxFactory.setTrustStorePassword(TRUST_STORE_PWD.toCharArray());
return sslCtxFactory;
}
}
Запустить класс ThinClient.java. После запуска класса вы увидите строчку 'Hello World' и информацию об окружении на всех серверных узлах кластера.
Примечание
За работу с клиентами (IgniteClient, JDBC, ODBC), подключающимися через протокол тонкого клиента со стороны узла отвечает класс ClientConnectorConfiguration. Он является частью конфигурации узла. Настройка этого класса может влиять на параметры подключения. Ниже приведен пример конфигурации класса:
ClientConnectorConfiguration clientConCfg = new ClientConnectorConfiguration(); clientConCfg.setUseIgniteSslContextFactory(false); clientConCfg.setSslEnabled(true); clientConCfg.setJdbcEnabled(true); clientConCfg.setSslClientAuth(true); clientConCfg.setSslContextFactory(sslCtxFactory); SslContextFactory sslCtxFactory = new SslContextFactory(); sslCtxFactory.setKeyStoreFilePath(SERVER_KEY_STORE); sslCtxFactory.setKeyStorePassword(PWD.toCharArray()); sslCtxFactory.setTrustStoreFilePath(TRUST_STORE); sslCtxFactory.setTrustStorePassword(PWD.toCharArray()); sslCtxFactory.setCipherSuites( "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_RSA_WITH_AES_256_GCM_SHA384", "TLS_RSA_WITH_AES_128_GCM_SHA256" );
Python#
В данном разделе содержится информация о запуске кластера, а также о том, как запустить простой пример приложения Hello World, используя тонкий клиент для Python.
Подключение и конфигурирование#
После установки Platform V DataGrid необходимо установить тонкий клиент Python. Для этого необходимо выполнить следующую команду:
pip
pip install pyignite
pip3
pip3 install pyignite
Создание первого приложения#
После запуска кластера вы можете использовать тонкий клиент Python для работы с кэшами.
Предположим, что серверный узел запущен локально. Ниже приведен пример приложения HelloWorld, которое передает значения в кэш и забирает их оттуда:
from pyignite import Client
from pyignite.datatypes.prop_codes import PROP_NAME, PROP_STATISTICS_ENABLED
username = 'username' # Логин в письме от ДИ
password = 'userpass' # Пароль от ise_client задается при заказе кластера в ДИ
ssl_params = {
'use_ssl': True,
'ssl_keyfile': '/path/to/dev-ise_client.key', #Сертифиакт в письме от ДИ
'ssl_certfile': '/path/to/dev-ise_client-pub.key', #Сертификат в письме от ДИ
'ssl_ciphers': 'HIGH:!DH:!aNULL'
}
nodes = [
('0.0.0.0', 10800), # IP-адреса серверов в письме от ДИ
('0.0.0.0.', 10800),
]
client = Client(username=username, password=password, **ssl_params, compact_footer='true')
with client.connect(nodes):
my_cache = client.get_or_create_cache({
PROP_NAME: 'cache_name',
PROP_STATISTICS_ENABLED: 'true'
}
)
my_cache.put('key', 'Hello')
print ('Key "key" is put into cache successfully')
my_cache.put('key1', 'World!')
print ('Key "key1" is put into cache successfully')
print(my_cache.get('key') + " " + my_cache.get('key1'))
print ('Information is successfully received from cache')
Для запуска необходимо сохранить пример в качестве текстового файла (например, hello.py) и запустить его из терминала (командной строки):
python3 hello.py
Примечание
Вы также можете ввести этот пример в интерпретатор или оболочку Python (например, IDLE для Windows) и изменить или исполнить его там.
SQL#
Если вам необходимо просто запустить кластер и добавить строки с данными без запуска Java и настройки IDE, можно использовать SQL.
Чтобы сделать это, необходимо использовать утилиту sqlline.sh, которая находится в директории /bin вашей инсталляции Platform V DataGrid. О том, как работать с утилитой, можно узнать из раздела «Использование утилиты sqlline" ниже.
Использование утилиты sqlline#
Утилита sqlline.sh позволит вам подключиться к узлу и начать вводить строки данных.
Для этого необходимо:
Открыть новое окно командной строки и убедиться, что вы находитесь в директории $IGNITE_HOME.
При помощи утилиты sqlline подключиться к кластеру:
/bin/ise-sqlline.sh -u "jdbc:ignite:thin://127.0.0.1/?sslMode=require&sslClientCertificateKeyStoreUrl=/opt/ignite/server/config/dev-ise_client-keystore.jks&sslTrustCertificateKeyStoreUrl=//opt/ignite/server/config/dev-truststore.jks" -n ise_clientВвести пароль от хранилища ключей.
Ввести пароль от truststore.
Примечание
Файлы сертификатов
keystore.jksиdev-truststore.jksнаходятся на виртуальной машине. Утилитаise-sqlline.shссылается именно на них. Для работы с SQL наличие сертификатов на вашей локальной машине не обязательно.Ввести пароль от учетной записи клиента.
Создать две таблицы, запустив две следующие команды в утилите
sqlline:CREATE 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 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);Запустить базовые запросы (здесь показан пример с выводом):
SELECT * FROM City; +--------------------------------+--------------------------------+ | ID | NAME | +--------------------------------+--------------------------------+ | 1 | Forest Hill | | 2 | Denver | | 3 | St. Petersburg | +--------------------------------+--------------------------------+ 3 rows selected (0.05 seconds)Примечание
Запрос SELECT является проверкой того, что таблица создана.
Запустить запросы с распределенными
JOIN(здесь показан пример с выводом):SELECT 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)
Примечание
Под каждую таблицу создается отдельный кэш. Кэш создается одновременно с созданием таблицы. Таблица физически сохраняется на диске в отдельном каталоге с названием этой таблицы.
В этих руководствах можно найти дополнительную информацию о системных требованиях, установке, а также написанию первого приложения с использованием одного из API Platform V DataGrid.
Использование программного продукта#
Пример использования плагина безопасности Platform V DataGrid#
У плагина безопасности, входящего в поставку Platform V DataGrid, имеется открытый API.
Этот API представлен в виде java-класса SecurityDataManager. Данный класс читает и вносит изменения в distributed metastorage. Это касается тех записей, которые относятся к пользователям и ролям. Именно на его основе строится администрирование пользователей и прав.
API работает следующим образом:
Сущность
IgniteClientподключается к кластеру с правами администратора безопасности.После подключения
IgniteClientпользователь сможет выполнять различные действия, например, добавлять пользователей (addUser) или изменять пароль (changePassword).
Разработчик может подключить данный интерфейс к своему приложению, взяв из Nexus артефакт com.sbt.security.ignite:ignite-security-plugin:(ise-version), где ise-version – это версия Platform V DataGrid.
После этого, класс SecurityDataManager будет доступен для использования.
Описание методов класса, доступных пользователю#
Метод |
Описание |
Входные данные |
Типы входных данных |
Примечания |
|---|---|---|---|---|
|
Добавляет пользователя |
|
|
|
|
Добавляет роль |
|
|
Если значение типа |
|
Удаляет пользователя |
|
|
Значение переменной |
|
Удаляет роль |
|
|
Значение переменной |
|
Обновляет пароль |
|
|
Возвращает новый метод |
|
Позволяет задать пароль пользователя |
|
|
Часто встречающиеся проблемы и пути их устранения#
Раздел предусмотрен для будущих обновлений.