Greifen Sie von einem Java-Client aus auf das speicherinterne Datenraster Apache Ignite zu

Einführung

Ich habe Apache Ignite gestartet, um das speicherinterne Datenraster zu untersuchen. Installieren Sie es zuerst, starten Sie es auf 1 Server / 2 Servern und versuchen Sie, es als Cache-Server aus einem Java-Programm zu verwenden.

Wir haben auch eine Sammlung von Links zur Dokumentation zu Apache Ignite unten erstellt. Wir hoffen, dass Sie diese hilfreich finden.

Was ist Apache Ignite?

Apache Ignite ist eine Middleware, die ein speicherinternes Datenraster realisiert. Das In-Memory-Datenraster ist eine Technologie, die eine große Datenmenge im Speicher auf mehreren Servern verteilt. Ein Hauptmerkmal ist, dass es durch den Umgang mit Daten im Speicher beschleunigt werden kann. Eine Verwendung ist der verteilte Cache einer Datenbank, in der eine große Datenmenge gespeichert ist.

Wenn Apache Ignite um das speicherinterne Datenraster zentriert ist, kann es auch die folgenden Rollen spielen:

Behandeln Sie das speicherinterne Datenraster als Datenbank. Lesen / Schreiben ist dezentralisiert, einfach zu skalieren und schneller als RDBs wie Oracle. Die aktuelle Version verarbeitet keine Transaktionen, aber es scheint, dass zukünftige Versionen dies unterstützen werden. Es speichert auch Daten im Speicher, kann jedoch im Dateisystem (HDFS) beibehalten werden. Es wird auch im Speicher mit einer ähnlichen Struktur wie HDFS gespeichert und als Teilmenge von Dateien in HDFS positioniert.

Eine einfache API für KVS wird vorbereitet und kann als verteiltes KVS verwendet werden.

Datenbanken / NoSQL wie Oracle und Cassandra können zum Zwischenspeichern verwendet werden.

Weitere Informationen finden Sie unter Anwendungsfälle für Apache Ignite (https://ignite.apache.org/usecases.html).

Bitte beachten Sie auch die unten stehende Link-Sammlung verschiedener Informationen.

Links zur Dokumentation zu Apache Ignite

Ausführungsumgebung

Mit Vagrant habe ich die Umgebung von CentOS 7 vorbereitet und Apache Ignite ausgeführt. Das Verfahren bis zur Erstellung von CentOS 7 entfällt, da es andere Websites gibt, die leicht zu verstehen sind.

Versuchen Sie es mit einer Einzelkonfiguration und einer Clusterkonfiguration (2 Einheiten). Es gibt die folgenden zwei Server.

・ 192.168.20.71 igniteserver1 ・ 192.168.20.72 igniteserver2

OpenJDK-Installation

Apache Ignite benötigt ein JDK und unterstützt Oracle JDK und Open JDK. Dieses Mal werden wir das Open JDK verwenden.

# 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)

Ich habe JAVA_HOME festgelegt und den Java-Pfad zu meinem PATH hinzugefügt.

# 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

Installieren von Apache Ignite

Laden Sie das Modul von der Apache Ignite-Website herunter (https://ignite.apache.org/). Wählen Sie unten "Binäre Releases".

image.png

Dieses Mal habe ich die neueste Version v2.6.0 heruntergeladen.

image.png

Laden Sie die zuvor heruntergeladene Datei "apache-ignite-fabric-2.6.0-bin.zip" auf den Server hoch und extrahieren Sie sie mit dem folgenden Befehl unter "/ opt".

# 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

Führen Sie den folgenden Befehl aus, um Apache Ignite zu starten.

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

Ohne Argumente wird die Standardkonfigurationsdatei in "/opt/apache-ignite/config/default-config.xml" geladen und gestartet.

Wenn der Start erfolgreich ist, wird Folgendes an die Konsole ausgegeben. Wenn server = 1 ist, können Sie bestätigen, dass ein Server ausgeführt wird.

[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]

Die Standardkonfigurationsdatei lautet wie folgt. Ich werde die erforderlichen Einstellungen unter das Element "\ <bean id =" grid.cfg "" schreiben, aber die Standardeinstellungen sind leer.

<?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>

Zugriff auf Apache Ignite-Cache von Java aus (Konfiguration mit 1 Einheit)

Verwenden wir Apache Ignite, das zuvor als Cache-Server aus einer Java-Anwendung gestartet wurde. Java-Anwendungen verwenden das Maven-Projekt und fügen pom.xml die folgenden Abhängigkeiten hinzu.

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

Der Java-Client wurde wie folgt unter Bezugnahme auf das Apache Ignite-Beispielprogramm erstellt. Es ist ein Programm, das Daten in den Cache mit dem Namen "put-get-example" auf Apache Ignite legt und dieselben Daten abruft und anzeigt, wie sie sind.

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) {
		//Geben Sie die IP und den Port des Apache Ignite-Servers an, zu dem eine Verbindung hergestellt werden soll.
	    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();
	    }
	}
}

Das Ausführungsergebnis ist wie folgt. Sie können die Daten "put-get-test" setzen und bestätigen, dass Sie den Wert aus dem Cache erhalten können.

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

Verwenden Sie die Befehlszeilenschnittstelle "Ignite Visor" von Ignite, um zu überprüfen, ob es auf der Serverseite zwischengespeichert ist.

Starten Sie zuerst Visor.
# /opt/apache-ignite/bin/ignitevisorcmd.sh

Wenn die Visor-Konsole angezeigt wird, stellen Sie mit dem Befehl "Öffnen" eine Verbindung zum Cluster her.
visor> open
Local configuration files:
+==========================================================================================+
| #  |                                 Configuration File                                  |
+==========================================================================================+
| 0  | config/default-config.xml                                                           |
~~ weggelassen ~~
Eine Liste der Einstellungsdateien wird angezeigt, sodass die derzeit verwendete Standardeinstellung "0" verwendet wird: config/default-config.Wählen Sie xml.
Choose configuration file number ('c' to cancel) [0]: 0

Wenn Sie hier den Befehl "Cache" ausführen, wird der Status des Caches angezeigt.

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    |
+------------------------------------------------------------------------------------------------------------------------+

Sie können sehen, dass ein Cache (siehe Einträge) im Cache "put-get-example" gespeichert ist.

Machen Sie Apache Ignite zu einer Cluster-Konfiguration (2 Einheiten).

Früher habe ich einen Server konfiguriert, aber wir haben ihn mit zwei Servern eingerichtet. Erstellen Sie eine Konfigurationsdatei (default-config-cluster2server.xml) für eine Konfiguration mit zwei Einheiten.

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

Führen Sie die Clustereinstellungen mithilfe der TCP / IP-Erkennungsmethode durch. Ändern Sie die Datei "default-config-cluster2server.xml" und fügen Sie "\ " hinzu. Die Einstellung mit Multicast scheint einfacher zu sein, diesmal jedoch mit der IP-Spezifikation (192.168.10.71, 192.168.10.72).

Erstellen Sie dieselbe Datei auf zwei Servern. (Oder kopiere mit 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>

Starten Sie dieses Mal zwei Apache Ignite-Knoten von Visor aus. Um einen Remote-Knoten von Visor aus betreiben zu können, müssen Sie in der Lage sein, eine Verbindung mit ssh herzustellen. Mit dem folgenden Befehl einstellen.

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

Stellen Sie sicher, dass Sie es ohne Passphrase einstellen können.
$ ssh igniteserver1
$ ssh igniteserver2

Starten Sie die Visor-Konsole und führen Sie den folgenden Befehl aus.

# /opt/apache-ignite/bin/ignitevisorcmd.sh
Wenn die Visor-Konsole angezeigt wird, stellen Sie mit dem Befehl "Öffnen" eine Verbindung zum Cluster her.
visor> open
~ Ausgelassen ~
| 6  | config/default-config-cluster2server.xml                                            
~ Ausgelassen ~
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 |
+-------------------------------+

"Erfolgreiche Startversuche" ist "2", was bedeutet, dass die beiden Server erfolgreich gestartet wurden.

Führen Sie den folgenden Befehl aus, um alle Knoten zu beenden.

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

Stellen Sie über das Java-Programm eine Verbindung zum Ignite-Cluster her

Zu den Knoten im Ignite-Cluster gehören Serverknoten, auf denen Caches gespeichert sind, und Clientknoten, auf denen keine Daten vorhanden sind. Stellen Sie von einem Java-Programm aus eine Verbindung zum Ignite-Cluster als Clientknoten her. Der Punkt ist, den Client als "Ignition.setClientMode (true);" anzugeben.

Bringen Sie "default-config.xml" vom Server und codieren Sie es wie folgt: Die Einstellung lautet "default-config.xml", es ist jedoch auch möglich, sie programmgesteuert zu konfigurieren, ohne die Einstellungsdatei zu verwenden.

Ich kann eine Verbindung zu mehreren Einheiten herstellen, auch wenn das Programm erstellt wurde, als eine Einheit konfiguriert wurde. Ich habe es jedoch neu geschrieben, da die Ursache unbekannt war und das Failover nicht funktioniert hat, als eine Einheit ausfiel.

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();
	    }
	}
}

Referenz

Recommended Posts

Greifen Sie von einem Java-Client aus auf das speicherinterne Datenraster Apache Ignite zu
Ich habe die Leistung des speicherinternen Datengitters Apache Ignite mit Yardstick gemessen.
Greifen Sie über eine Java-Anwendung auf Teradata zu
3. Erstellen Sie eine Datenbank für den Zugriff über das Webmodul
Greifen Sie über Java auf API.AI zu
Verwenden der Datenbank (SQL Server 2014) aus einem Java-Programm 2018/01/04
[JDBC] Ich habe versucht, von Java aus auf die SQLite3-Datenbank zuzugreifen.
Installieren Sie das memcached Plugin unter MySQL und greifen Sie von Java aus zu
[Gradle] Erstellen Sie ein Java-Projekt mit einer Konfiguration, die von der Konvention abweicht
Greifen Sie mit Java auf die Netzwerkschnittstelle zu
Führen Sie eine Batchdatei von Java aus
Der Weg von JavaScript nach Java
Deklarieren Sie eine Methode mit einem Java-Rückgabewert mit dem Rückgabewert-Datentyp
Greifen Sie über ein lokales Java-Programm (Host-Betriebssystem) auf MySQL in einem Docker-Container zu
Führen Sie x11-Apps in einem Docker-Container aus (unterstützt den Netzwerkzugriff vom Container aus).
[Java] Generieren Sie mithilfe der Stream-API eine verengte Liste aus mehreren Listen
Rufen Sie die Microsoft Emotion API auf, indem Sie Bilddaten direkt von Java senden.
[AWS SDK für Java] Legen Sie die Wiederholungsrichtlinie für den S3-Client fest