Accédez à la grille de données en mémoire Apache Ignite à partir d'un client Java

introduction

J'ai lancé Apache Ignite pour étudier la grille de données en mémoire. Tout d'abord, installez-le, démarrez-le sur 1 serveur / 2 serveurs et essayez de l'utiliser comme serveur de cache à partir d'un programme Java.

Nous avons également créé une collection de liens vers la documentation sur Apache Ignite ci-dessous, nous espérons donc que vous la trouverez utile.

Qu'est-ce qu'Apache Ignite?

Apache Ignite est un middleware qui réalise une grille de données en mémoire. La grille de données en mémoire est une technologie qui distribue une grande quantité de données en mémoire sur plusieurs serveurs. Une caractéristique majeure est qu'elle peut être accélérée en manipulant les données en mémoire. Une utilisation est le cache distribué d'une base de données qui stocke une grande quantité de données.

Avec Apache Ignite centré autour de la grille de données en mémoire, il peut également jouer les rôles suivants:

Traitez la grille de données en mémoire comme une base de données. La lecture / écriture est décentralisée, facile à évoluer et plus rapide que les RDB tels qu'Oracle. La version actuelle ne gère pas les transactions, mais il semble que les versions futures la prendront en charge. Il conserve également les données en mémoire mais peut être conservé dans le système de fichiers (HDFS). Il est également stocké en mémoire avec une structure similaire à HDFS, et est positionné comme un sous-ensemble de fichiers sur HDFS.

Une API simple pour KVS est préparée et peut être utilisée comme KVS distribué.

Les bases de données / NoSQL telles qu'Oracle et Cassandra peuvent être utilisées pour la mise en cache.

Pour plus d'informations, consultez Cas d'utilisation d'Apache Ignite (https://ignite.apache.org/usecases.html).

Veuillez également vous référer à la collection de liens contenant diverses informations ci-dessous.

Liens vers la documentation sur Apache Ignite

Environnement d'exécution

Avec Vagrant, j'ai préparé l'environnement de CentOS 7 et exécuté Apache Ignite. La procédure jusqu'à la construction de CentOS 7 est omise car il existe d'autres sites faciles à comprendre.

Essayez une configuration unique et une configuration de cluster (2 unités). Il existe les deux serveurs suivants.

・ 192.168.20.71 igniteserver1 ・ 192.168.20.72 igniteserver2

Installation d'OpenJDK

Apache Ignite nécessite un JDK et prend en charge Oracle JDK et Open JDK. Cette fois, nous utiliserons l'Open JDK.

# yum -y install java-1.8.0-openjdk-devel

# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

J'ai défini JAVA_HOME et ajouté le chemin Java à mon PATH.

# echo "export JAVA_HOME=$(readlink -e $(which java)|sed 's:/bin/java::')" > /etc/profile.d/java.sh
# echo "PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile.d/java.sh
# source /etc/profile

Installation d'Apache Ignite

Téléchargez le module depuis le site Apache Ignite (https://ignite.apache.org/). Sélectionnez "Versions binaires" ci-dessous.

image.png

Cette fois, j'ai téléchargé la dernière version, v2.6.0 ci-dessous.

image.png

Téléchargez le "apache-ignite-fabric-2.6.0-bin.zip" que vous avez téléchargé précédemment sur le serveur, et extrayez-le sous "/ opt" avec la commande suivante.

# cd /opt
# unzip /tmp/apache-ignite-fabric-2.6.0-bin.zip
# ln -s /opt/apache-ignite-fabric-2.6.0-bin/ /opt/apache-ignite

Exécutez la commande suivante pour démarrer Apache Ignite.

cd /opt/apache-ignite/bin
./ignite.sh

Sans argument, le fichier de configuration par défaut dans "/opt/apache-ignite/config/default-config.xml" est chargé et démarré.

Si le démarrage réussit, les informations suivantes seront envoyées à la console. Lorsque serveurs = 1, vous pouvez confirmer qu'un serveur est en cours d'exécution.

[22:42:07] Ignite node started OK (id=9ae050e2)
[22:42:07] Topology snapshot [ver=1, servers=1, clients=0, CPUs=1, offheap=0.74GB, heap=1.0GB]

Le fichier de configuration par défaut est le suivant. J'écrirai les paramètres nécessaires sous l'élément "\ <bean id =" grid.cfg "", mais les paramètres par défaut sont vides.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--
        Alter configuration below as needed.
    -->
    <bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration"/>
</beans>

Accéder au cache Apache Ignite depuis Java (configuration 1 unité)

Utilisons Apache Ignite démarré plus tôt en tant que serveur de cache à partir d'une application Java. Les applications Java utilisent le projet Maven et ajoutent les dépendances suivantes à pom.xml.

		<dependency>
			<groupId>org.apache.ignite</groupId>
			<artifactId>ignite-core</artifactId>
			<version>2.6.0</version>
		</dependency>

Le client Java a été créé comme suit en se référant à l'exemple de programme Apache Ignite. C'est un programme qui met les données dans le cache appelé "" put-get-example "" sur Apache Ignite, et obtient et affiche les mêmes données que celles-ci.

SimpleCacheApp.java


import org.apache.ignite.Ignition;
import org.apache.ignite.client.ClientCache;
import org.apache.ignite.client.ClientException;
import org.apache.ignite.client.IgniteClient;
import org.apache.ignite.configuration.ClientConfiguration;

public class SimpleCacheApp
{
	public static void main(String[] args) {
		//Spécifiez l'adresse IP et le port du serveur Apache Ignite auquel se connecter.
	    ClientConfiguration cfg = new ClientConfiguration().setAddresses("192.168.20.71:10800");

	    try (IgniteClient igniteClient = Ignition.startClient(cfg)) {
	        final String CACHE_NAME = "put-get-example";

	        ClientCache<Integer, String> cache = igniteClient.getOrCreateCache(CACHE_NAME);

	        Integer key = 1;
	        String val = "put-get-test";

	        cache.put(key, val);

	        System.out.format("PUT [%s]\n", val);

	        String cachedVal = cache.get(key);

	        System.out.format("GET [%s]\n", cachedVal);
	    }
	    catch (ClientException e) {
	        e.printStackTrace();
	    }
	    catch (Exception e) {
	    	e.printStackTrace();
	    }
	}
}

Le résultat de l'exécution est le suivant. Vous pouvez mettre les données "put-get-test" et confirmer que vous pouvez obtenir la valeur du cache.

PUT [put-get-test]
GET [put-get-test]

Pour vérifier qu'il est mis en cache côté serveur, essayez d'utiliser l'interface de ligne de commande Ignite "Ignite Visor".

Commencez par démarrer Visor.
# /opt/apache-ignite/bin/ignitevisorcmd.sh

Lorsque la console Visor s'affiche, connectez-vous au cluster avec la commande "open".
visor> open
Local configuration files:
+==========================================================================================+
| #  |                                 Configuration File                                  |
+==========================================================================================+
| 0  | config/default-config.xml                                                           |
~~ Omis ~~
Une liste de fichiers de paramètres sera affichée, donc le "0" par défaut est actuellement utilisé: config/default-config.Sélectionnez xml.
Choose configuration file number ('c' to cancel) [0]: 0

Si vous exécutez ici la commande "cache", l'état du cache sera affiché.

visor> cache
Time of the snapshot: 2018-08-18 03:18:21
+========================================================================================================================+
|       Name(@)        |    Mode     | Nodes | Entries (Heap / Off-heap) |   Hits    |  Misses   |   Reads   |  Writes   |
+========================================================================================================================+
| put-get-example(@c0) | PARTITIONED | 1     | min: 1 (0 / 1)            | min: 0    | min: 0    | min: 0    | min: 0    |
|                      |             |       | avg: 1.00 (0.00 / 1.00)   | avg: 0.00 | avg: 0.00 | avg: 0.00 | avg: 0.00 |
|                      |             |       | max: 1 (0 / 1)            | max: 0    | max: 0    | max: 0    | max: 0    |
+------------------------------------------------------------------------------------------------------------------------+

Vous pouvez voir qu'un cache (voir Entrées) est stocké dans le cache "put-get-example".

Faites d'Apache Ignite une configuration de cluster (2 unités).

J'avais l'habitude de configurer un serveur plus tôt, mais configurons-le avec deux serveurs. Créez un fichier de configuration (default-config-cluster2server.xml) pour une configuration à deux unités.

# cp -p /opt/apache-ignite/config/default-config.xml /opt/apache-ignite/config/default-config-cluster2server.xml

Exécutez les paramètres de cluster à l'aide de la méthode de découverte TCP / IP. Modifiez le fichier "default-config-cluster2server.xml" et ajoutez "\ ". Cela semble plus facile à configurer avec la multidiffusion, mais cette fois, il est défini avec la spécification IP (192.168.10.71, 192.168.10.72).

Créez le même fichier sur deux serveurs. (Ou copier avec scp)

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--
        Alter configuration below as needed.
    -->
    <bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
                        <property name="addresses">
                            <list>
                                <value>igniteserver1:47500..47509</value>
                                <value>igniteserver2:47500..47509</value>
                            </list>
                        </property>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
</beans>

Cette fois, démarrez deux nœuds Apache Ignite à partir de Visor. Pour faire fonctionner un nœud distant depuis Visor, vous devez pouvoir vous connecter avec ssh. Réglez avec la commande suivante.

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

Assurez-vous que vous pouvez le définir sans mot de passe.
$ ssh igniteserver1
$ ssh igniteserver2

Démarrez la console Visor et exécutez la commande suivante.

# /opt/apache-ignite/bin/ignitevisorcmd.sh
Lorsque la console Visor s'affiche, connectez-vous au cluster avec la commande "open".
visor> open
~ Omis ~
| 6  | config/default-config-cluster2server.xml                                            
~ Omis ~
Choose configuration file number ('c' to cancel) [0]: 6
+------------------------------------------------------------------------------------+
| Status               | Connected                                                   |
| Ignite instance name | <default>                                                   |
| Config path          | /opt/apache-ignite/config/default-config-cluster2server.xml |
| Uptime               | 00:00:00                                                    |
+------------------------------------------------------------------------------------+


visor> start -h=192.168.20.71~72 -u=root -k=/root/.ssh/id_rsa -g=/opt/apache-ignite -c=config/default-config-cluster2server.xml
+-------------------------------+
| Successful start attempts | 2 |
| Failed start attempts     | 0 |
+-------------------------------+

«Tentatives de démarrage réussies» est «2», ce qui signifie que les deux serveurs ont été démarrés avec succès.

Pour terminer tous les nœuds, exécutez la commande suivante.

visor> kill -k
Are you sure you want to kill ALL nodes? (y/n) [n]: y
You are about to kill ALL nodes. Are you 100% sure? (y/n) [n]: y

Connectez-vous au cluster Ignite à partir du programme Java

Les nœuds du cluster Ignite incluent des nœuds de serveur qui stockent des caches et des nœuds clients sans données. À partir d'un programme Java, connectez-vous au cluster Ignite en tant que nœud client. Le but est de spécifier le client comme "Ignition.setClientMode (true);".

Apportez "default-config.xml" du serveur et codez-le comme suit: Le paramètre lit "default-config.xml", mais il est également possible de le configurer par programme sans utiliser le fichier de paramètres.

Je peux me connecter à plusieurs unités même avec le programme créé lorsqu'une unité est configurée, mais je l'ai réécrit car la cause était inconnue et le basculement ne fonctionnait pas lorsqu'une unité tombait en panne.

import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.client.ClientException;

public class SimpleCacheApp2Server
{
	public static void main(String[] args) {

	    Ignition.setClientMode(true);

	    try (Ignite igniteClient = Ignition.start("default-config-cluster2server.xml")) {
	        final String CACHE_NAME = "put-get-example";

	        IgniteCache<Integer, String> cache = igniteClient.getOrCreateCache(CACHE_NAME);

	        Integer key = 1;
	        String val = "put-get-test";

	        cache.put(key, val);

	        System.out.format("PUT [%s]\n", val);

	        String cachedVal = cache.get(key);

	        System.out.format("GET [%s]\n", cachedVal);
	    }
	    catch (ClientException e) {
	    	e.printStackTrace();
	    }
	    catch (Exception e) {
	    	e.printStackTrace();
	    }
	}
}

référence

Recommended Posts

Accédez à la grille de données en mémoire Apache Ignite à partir d'un client Java
J'ai mesuré les performances de la grille de données en mémoire Apache Ignite à l'aide de Yardstick.
Accéder à Teradata depuis une application Java
3. Créez une base de données à laquelle accéder à partir du module Web
Accédez à API.AI depuis Java
Utilisation de la base de données (SQL Server 2014) à partir d'un programme Java 04/01/2018
[JDBC] J'ai essayé d'accéder à la base de données SQLite3 depuis Java.
Installez le plugin memcached sur MySQL et accédez à partir de Java
[Gradle] Construisez un projet Java avec une configuration différente de la convention
Accéder à l'interface réseau avec Java
Exécuter le fichier de commandes à partir de Java
La route de JavaScript à Java
Déclarez une méthode qui a une valeur de retour Java avec le type de données de valeur de retour
Accéder à MySQL sur un conteneur Docker à partir d'un programme Java local (OS hôte)
Exécutez des applications x11 dans un conteneur Docker (prend en charge l'accès réseau à partir du conteneur)
[Java] Générez une liste restreinte à partir de plusieurs listes à l'aide de l'API Stream
Appelez l'API Microsoft Emotion en envoyant des données d'image directement depuis Java.
[AWS SDK for Java] Définir la stratégie de nouvelle tentative pour le client S3