Starten Sie die Big Data-Verarbeitung mit Apache Ignite

Apache Ignite ist eine In-Memory-Computing-Plattform, die nahtlos zwischen der Anwendungsschicht und der Datenschicht eines Benutzers eingefügt werden kann. Apache Ignite lädt Daten von der vorhandenen festplattenbasierten Speicherschicht in den Arbeitsspeicher und verbessert so die Leistung um bis zu sechs Größenordnungen (1 Millionfach).

Die speicherinterne Datenkapazität kann einfach skaliert werden, um Petabyte an Daten zu verarbeiten, indem einfach weitere Knoten zum Cluster hinzugefügt werden. Außerdem werden sowohl ACID-Transaktionen als auch SQL-Abfragen unterstützt. Ignite bietet Leistung, Skalierbarkeit und umfassende Funktionen, die weit über das hinausgehen, was herkömmliche In-Memory-Datenbanken, In-Memory-Datengitter und andere In-Memory-basierte Punktlösungen für sich allein bieten können.

Für Apache Ignite müssen Benutzer ihre vorhandenen Datenbanken nicht rippen und ersetzen. Es funktioniert mit RDBMS-, NoSQL- und Hadoop-Datenspeichern. Apache Ignite ermöglicht leistungsstarke Transaktionen, Echtzeit-Streaming und schnelle Analysen in einer einzigen, umfassenden Datenzugriffs- und Verarbeitungsschicht. Es verwendet eine verteilte, massiv parallele Architektur auf erschwinglicher Standardhardware, um vorhandene oder neue Anwendungen mit Strom zu versorgen. Apache Ignite kann lokal, auf Cloud-Plattformen wie AWS und Microsoft Azure oder in einer Hybridumgebung ausgeführt werden.

Die einheitliche API von Apache Ignite unterstützt SQL, C ++, .NET, Java, Scala, Groovy, PHP und Node.js. Die einheitliche API verbindet Cloud-Anwendungen mit mehreren Datenspeichern, die strukturierte, semistrukturierte und unstrukturierte Daten enthalten. Es bietet eine leistungsstarke Datenumgebung, mit der Unternehmen vollständige ACID-Transaktionen verarbeiten und wertvolle Erkenntnisse aus Echtzeit-, interaktiven und Stapelabfragen generieren können.

Benutzer können ihr vorhandenes RDBMS beibehalten und Apache Ignite als Schicht zwischen ihm und der Anwendungsschicht bereitstellen. Apache Ignite lässt sich automatisch in Oracle, MySQL, Postgres, DB2, Microsoft SQL Server und andere RDBMS integrieren. Das System generiert automatisch das Anwendungsdomänenmodell basierend auf der Schemadefinition der zugrunde liegenden Datenbank und lädt dann die Daten. In-Memory-Datenbanken bieten normalerweise nur eine SQL-Schnittstelle, während Ignite neben ANSI SQL eine größere Gruppe von Zugriffs- und Verarbeitungsparadigmen unterstützt. Apache Ignite unterstützt Schlüssel- / Wertspeicher, SQL-Zugriff, MapReduce, HPC / MPP-Verarbeitung, Streaming / CEP-Verarbeitung, Clustering und Hadoop-Beschleunigung in einer einzigen integrierten In-Memory-Computing-Plattform.

GridGain Systems spendete der Apache Software Foundation in der zweiten Jahreshälfte 2014 den ursprünglichen Code für Apache Ignite. Apache Ignite wurde 2015 schnell von einem Inkubationsprojekt zu einem Apache-Projekt auf höchster Ebene befördert. Im zweiten Quartal 2016 war Apache Ignite fast 200.000 mal heruntergeladen. Es wird von Organisationen auf der ganzen Welt verwendet.

Die Architektur

Apache Ignite ist eine JVM-basierte verteilte Middleware, die auf einer homogenen Cluster-Topologie-Implementierung basiert und keine separaten Server- und Client-Knoten erfordert. Alle Knoten in einem Ignite-Cluster sind gleich und können je nach Laufzeitanwendungsanforderung eine beliebige logische Rolle spielen.

Ein SPI-Design (Service Provider Interface) ist das Kernstück von Apache Ignite. Das SPI-basierte Design macht jede interne Komponente von Ignite vollständig anpassbar und steckbar. Dies ermöglicht eine enorme Konfigurierbarkeit des Systems mit Anpassungsfähigkeit an jede vorhandene oder zukünftige Serverinfrastruktur.

Apache Ignite bietet auch direkte Unterstützung für die Parallelisierung verteilter Berechnungen basierend auf Fork-Join-, MapReduce- oder MPP-Verarbeitung. Ignite verwendet in großem Umfang verteilte parallele Berechnungen und wird auf API-Ebene für benutzerdefinierte Funktionen vollständig verfügbar gemacht.

Hauptmerkmale

In-Memory-Datenraster. Apache Ignite enthält ein speicherinternes Datenraster, das die verteilte speicherinterne Datenverwaltung übernimmt, einschließlich ACID-Transaktionen, Failover, erweitertem Lastausgleich und umfassender SQL-Unterstützung. Das Ignite-Datenraster ist ein verteilter, objektbasierter ACID-Transaktionsspeicher für speicherinterne Schlüsselwerte. Im Gegensatz zu herkömmlichen Datenbankverwaltungssystemen, die die Festplatte als primären Speichermechanismus verwenden, speichert Ignite Daten im Speicher. Durch die Verwendung von Speicher anstelle von Festplatte ist Apache Ignite bis zu 1 Million Mal schneller als herkömmliche Datenbanken.

SQL-Unterstützung. Apache Ignite unterstützt ANSI SQL-99-kompatible Freiformabfragen praktisch ohne Einschränkungen. Ignite kann jede SQL-Funktion, Aggregation oder Gruppierung verwenden und unterstützt verteilte, nicht kolokalisierte SQL-Joins und cacheübergreifende Joins. Ignite unterstützt auch das Konzept von Feldabfragen, um den Netzwerk- und Serialisierungsaufwand zu minimieren.

In-Memory-Rechengitter. Apache Ignite enthält ein Rechenraster, das die parallele speicherinterne Verarbeitung von CPU-intensiven oder anderen ressourcenintensiven Aufgaben wie herkömmlicher HPC-, MPP-, Fork-Join- und MapReduce-Verarbeitung ermöglicht. Unterstützung wird auch für die asynchrone Standardverarbeitung von Java ExecutorService angeboten.

In-Memory-Service-Grid. Das Apache Ignite-Dienstraster bietet vollständige Kontrolle über die im Cluster bereitgestellten Dienste. Benutzer können steuern, wie viele Dienstinstanzen auf jedem Clusterknoten bereitgestellt werden sollen, um eine ordnungsgemäße Bereitstellung und Fehlertoleranz sicherzustellen. Das Service Grid garantiert die kontinuierliche Verfügbarkeit aller bereitgestellten Services bei Knotenausfällen. Es unterstützt auch die automatische Bereitstellung mehrerer Instanzen eines Dienstes, eines Dienstes als Singleton und von Diensten beim Start des Knotens.

In-Memory-Streaming. Die In-Memory-Stream-Verarbeitung richtet sich an eine große Familie von Anwendungen, für die herkömmliche Verarbeitungsmethoden und festplattenbasierter Speicher wie festplattenbasierte Datenbanken oder Dateisysteme unzureichend sind. Diese Anwendungen erweitern die Grenzen herkömmlicher Datenverarbeitungsinfrastrukturen.

Mithilfe der Streaming-Unterstützung können Benutzer fortlaufende Fenster eingehender Daten abfragen. Auf diese Weise können Benutzer Fragen wie "Was sind die 10 beliebtesten Produkte in der letzten Stunde?" Beantworten. oder "Was ist der Durchschnittspreis in einer bestimmten Produktkategorie für die letzten 12 Stunden?"

Ein weiterer gängiger Anwendungsfall für die Stream-Verarbeitung ist das Pipelining eines Workflows für verteilte Ereignisse. Da Ereignisse mit hoher Geschwindigkeit in das System eingehen, ist die Verarbeitung von Ereignissen in mehrere Phasen unterteilt, von denen jede zur Verarbeitung innerhalb eines Clusters ordnungsgemäß weitergeleitet werden muss. Diese anpassbaren Ereignis-Workflows unterstützen komplexe CEP-Anwendungen (Event Processing).

In-Memory-Hadoop-Beschleunigung. Der Apache Ignite Accelerator für Hadoop ermöglicht eine schnelle Datenverarbeitung in vorhandenen Hadoop-Umgebungen über die Tools und Technologien, die ein Unternehmen bereits verwendet.

Die Hadoop-Beschleunigung im Speicher von Ignite basiert auf dem ersten leistungsstarken In-Memory-Dateisystem mit zwei Modi, das zu 100 Prozent mit Hadoop HDFS kompatibel ist, und einer speicherinternen optimierten MapReduce-Implementierung. In-Memory-HDFS und In-Memory-MapReduce bieten eine bis zu 100-mal schnellere Leistung und bieten benutzerfreundliche Erweiterungen für festplattenbasiertes HDFS und herkömmliches MapReduce. Diese Plug-and-Play-Funktion erfordert nur minimale bis keine Integration. Es funktioniert mit jeder Open Source- oder kommerziellen Version von Hadoop 1.x oder Hadoop 2.x, einschließlich Cloudera, Hortonworks, MapR, Apache, Intel und AWS. Das Ergebnis ist eine bis zu 100-fach schnellere Leistung für MapReduce- und Hive-Jobs.

Verteiltes In-Memory-Dateisystem. Eine einzigartige Funktion von Apache Ignite ist das Ignite File System (IGFS), eine Dateisystemschnittstelle für speicherinterne Daten. IGFS bietet ähnliche Funktionen wie Hadoop HDFS. Es beinhaltet die Möglichkeit, ein voll funktionsfähiges Dateisystem im Speicher zu erstellen. IGFS ist das Kernstück des Apache Ignite In-Memory Accelerator für Hadoop.

Die Daten aus jeder Datei werden in separate Datenblöcke aufgeteilt und im Cache gespeichert. Auf die Daten in jeder Datei kann mit einer Standard-Java-Streaming-API zugegriffen werden. Für jeden Teil der Datei kann ein Entwickler eine Affinität berechnen und den Inhalt der Datei auf entsprechenden Knoten verarbeiten, um unnötige Netzwerke zu vermeiden.

Unified API. Die einheitliche API von Apache Ignite unterstützt eine Vielzahl gängiger Protokolle, mit denen die Anwendungsschicht auf Daten zugreifen kann. Unterstützte Protokolle sind SQL, Java, C ++, .NET, PHP, MapReduce, Scala, Groovy und Node.js. Ignite unterstützt mehrere Protokolle für die Client-Konnektivität zu Ignite-Clustern, einschließlich Ignite Native Clients, REST / HTTP, SSL / TLS und Memcached.SQL.

Erweitertes Clustering. Apache Ignite bietet eine der fortschrittlichsten Clustering-Technologien für JVMs. Ignite-Knoten können sich automatisch erkennen, wodurch der Cluster bei Bedarf skaliert werden kann, ohne dass der gesamte Cluster neu gestartet werden muss. Entwickler können auch die Hybrid Cloud-Unterstützung von Ignite nutzen, mit der Benutzer Verbindungen zwischen privaten Clouds und öffentlichen Clouds wie AWS oder Microsoft Azure herstellen können.

Zusatzfunktionen. Apache Ignite bietet leistungsstarke, clusterweite Messaging-Funktionen. Benutzer können Daten über Publish-Subscribe- und direkte Punkt-zu-Punkt-Kommunikationsmodelle austauschen.

Die Funktion für verteilte Ereignisse in Ignite ermöglicht es Anwendungen, Benachrichtigungen über Cache-Ereignisse zu erhalten, die in einer verteilten Grid-Umgebung auftreten. Entwickler können diese Funktion verwenden, um über die Ausführung von Remote-Tasks oder Änderungen der Cache-Daten innerhalb des Clusters benachrichtigt zu werden. Ereignisbenachrichtigungen können in Stapeln und in zeitlichen Abständen gruppiert und gesendet werden. Stapelbenachrichtigungen tragen zu einer hohen Cache-Leistung und einer geringen Latenz bei.

Mit Ignite können die meisten Datenstrukturen aus dem Framework java.util.concurrent verteilt verwendet werden. Sie können beispielsweise eine Warteschlange mit zwei Enden (java.util.concurrent.BlockingDeque) auf einem Knoten hinzufügen und von einem anderen Knoten abrufen. Oder Sie könnten einen verteilten Primärschlüsselgenerator haben, der die Eindeutigkeit auf allen Knoten garantiert.

Ignite verteilte Datenstrukturen unterstützen diese Standard-Java-APIs: Concurrent Map, verteilte Warteschlangen und Sets, AtomicLong, AtomicSequence, AtomicReference und CountDownLatch.

Schlüsselintegrationen

Apache Spark. Apache Spark ist eine schnelle Allzweck-Engine für die Verarbeitung großer Datenmengen. Ignite und Spark sind komplementäre In-Memory-Computing-Lösungen. Sie können in vielen Fällen zusammen verwendet werden, um eine überlegene Leistung und Funktionalität zu erzielen.

Apache Spark und Apache Ignite behandeln etwas unterschiedliche Anwendungsfälle und konkurrieren selten um dieselbe Aufgabe. In der folgenden Tabelle sind einige der wichtigsten Unterschiede aufgeführt.

 
  Apache Spark Apache Ignite
Vorratsdatenspeicherung Lädt Daten für die Verarbeitung aus einem externen Speicher, normalerweise festplattenbasiert, und verwirft die Daten, wenn die Verarbeitung abgeschlossen ist. Keine Datenspeicherung. Bietet einen verteilten speicherinternen Schlüsselwertspeicher (verteilter Cache oder Datenraster) mit ACID-Transaktionen und SQL-Abfragefunktionen. Behält Daten im Speicher und kann in eine zugrunde liegende Datenbank durchschreiben.
OLAP / OLTP Für nicht transaktionale, schreibgeschützte Daten wird sie daher für OLAP verwendet. Spark Resilient Distributed Datasets (RDDs) unterstützen keine In-Place-Mutation. Unterstützt nicht-transaktionale (OLAP) Nutzdaten sowie vollständig ACID-konforme Transaktionen (OLTP).
Datentypen Basierend auf RDDs. Funktioniert nur mit datengesteuerten Nutzdaten. Unterstützt vollständig reine Computernutzdaten (HPC / MPP), die "datenlos" sein können.

Apache Spark bietet keinen gemeinsam genutzten Speicher, daher müssen Daten von HDFS oder einem anderen Festplattenspeicher zur Verarbeitung in Spark geladen werden. Der Status kann nur von Spark-Job zu Job übergeben werden, indem die verarbeiteten Daten wieder in einem externen Speicher gespeichert werden. Ignite kann den Spark-Status direkt im Speicher freigeben, ohne den Status auf der Festplatte zu speichern.

Eine der Hauptintegrationen für Ignite und Spark ist die gemeinsam genutzte Apache Ignite RDD-API. Ignite-RDDs sind im Wesentlichen Wrapper um Ignite-Caches, die direkt in der Ausführung von Spark-Jobs bereitgestellt werden können. Ignite-RDDs können auch mit dem Cache-Aside-Muster verwendet werden, bei dem Ignite-Cluster getrennt von Spark bereitgestellt werden, sich jedoch noch im Arbeitsspeicher befinden. Auf die Daten wird weiterhin über Spark-RDD-APIs zugegriffen.

Spark unterstützt eine ziemlich umfangreiche SQL-Syntax, unterstützt jedoch keine Datenindizierung, sodass ständig vollständige Scans durchgeführt werden müssen. Spark-Abfragen können selbst bei mäßig kleinen Datenmengen Minuten dauern. Ignite unterstützt SQL-Indizes, was zu viel schnelleren Abfragen führt. Durch die Verwendung von Spark mit Ignite kann Spark SQL mehr als 1000-fach beschleunigt werden. Die von Ignite Shared RDDs zurückgegebene Ergebnismenge entspricht auch der Spark-Datenrahmen-API, sodass sie mithilfe von Standard-Spark-Datenrahmen weiter analysiert werden kann. Sowohl Spark als auch Ignite lassen sich nativ in Apache YARN und Apache Mesos integrieren, sodass es einfacher ist, sie zusammen zu verwenden.

Wenn Sie mit Dateien anstelle von RDDs arbeiten, ist es weiterhin möglich, den Status zwischen Spark-Jobs und Anwendungen mithilfe des In-Memory-Dateisystems (IGFS) zu teilen. IGFS implementiert die Hadoop FileSystem-API und kann genau wie HDFS als natives Hadoop-Dateisystem bereitgestellt werden. Zündstecker nativ in jede Hadoop- oder Spark-Umgebung. IGFS kann ohne Codeänderungen per Plug-and-Play verwendet werden.

Apache Cassandra. Apache Cassandra kann als leistungsstarke Lösung für strukturierte Abfragen dienen. Die Daten in Cassandra sollten jedoch so modelliert werden, dass jede vordefinierte Abfrage zu einem Zeilenabruf führt. Daher müssen Sie wissen, welche Abfragen erforderlich sind, bevor Sie die Daten modellieren.