Spark Elasticsearch
Was ist Spark Elasticsearch?
Spark Elasticsearch ist eine verteilte NoSQL-Datenbank zur Speicherung, Abfrage und Verwaltung dokumentenorientierter und halbstrukturierter Daten. Es handelt sich um eine als Open Source auf GitHub erhältliche RESTful-Suchmaschine, die auf Apache Lucene aufbaut und gemäß den Bedingungen der Apache-Lizenz veröffentlicht wurde.
Elasticsearch ist Java-basiert und daher für viele Plattformen verfügbar, die Dokumentdateien in verschiedenen Formaten durchsuchen und indizieren können. Die Daten werden in Elasticsearch als schemalose JSON-Dokumente gespeichert, ähnlich wie in NoSQL-Datenbanken.
Elasticsearch: Geschichte und Einführung
Elasticsearch ist ein integraler Bestandteil einer umfassenden Reihe von Open-Source-Tools, die als Elastic Stack bezeichnet werden. Elasticsearch ist eine beliebte Volltextsuchmaschine, die ursprünglich von Mitgliedern des Google Brain Teams entworfen und entwickelt wurde. Elasticsearch wird in einer Reihe von kommerziellen Anwendungen – von Reddit über YouTube bis hin zu eBay – eingesetzt. Zahlreiche Unternehmen nutzen die textbasierte Suche inzwischen als wesentlichen Bestandteil ihrer Geschäftsprozesse. In dieser Hinsicht ähnelt Elasticsearch anderen Suchmaschinen.
Ein wesentlicher Unterschied zwischen Elasticsearch und anderen Suchmaschinen besteht jedoch darin, dass Elasticsearch auch verteilte Daten speichern und verwalten kann. Anders ausgedrückt: Elasticsearch wurde für Daten entwickelt, deren Größe ständig variiert. Auf diese Weise lassen sich auch hochkomplexe Abfragen durchführen, unabhängig davon, wie groß ein Datensatz ist. Wenn ein einziger Datenbankserver jedoch Daten von mehreren Benutzern verarbeiten muss, kann sich dies erheblich auf das System auswirken.
Wer nutzt Elasticsearch?
Tausende von Top-Unternehmen nutzen Elasticsearch sowohl für ihre Online- als auch für ihre Offline-Daten, darunter Tech-Giganten wie Google, Oracle, Microsoft und zahlreiche andere große Namen.
Aber man muss kein Tech-Gigant sein, um einen einfachen Weg zur Indexierung strukturierter Daten zu nutzen. Sie müssen nur wissen, dass Elasticsearch existiert und verstehen, wie es funktioniert.
Doch wofür genau wird Elasticsearch verwendet?
Elasticsearch eignet sich für eine breite Palette von Anwendungsfällen wie z. B.:
- Logging und Log-Analysen: Dank des Ökosystems ergänzender Open-Source-Software und -Plattformen, die in der Umgebung von Elasticsearch entwickelt wurden, ist Elasticsearch eine ausgesprochen einfach zu implementierende und skalierbare Logging-Lösung.
- Scraping und Kombination öffentlicher Daten: Elasticsearch ist flexibel genug, um verschiedene Datenquellen aufzunehmen und sie alle übersichtlich und gut auffindbar zu verwalten.
- Volltextsuche: ElasticSearch arbeitet dokumentenorientiert. Es speichert und indexiert Dokumente. Die Indexierung erstellt oder aktualisiert Dokumente. Sobald die Indexierung abgeschlossen ist, können Sie komplette Dokumente – anstelle von Zeilen mit in Spalten abgelegten Daten – durchsuchen, sortieren und filtern.
- Ereignisdaten und Metriken: Elasticsearch zeichnet sich außerdem dadurch aus, dass es hervorragend mit Zeitreihendaten wie Metriken und Anwendungsereignissen funktioniert. Unabhängig von der verwendeten Technologie verfügt Elasticsearch in der Regel über die erforderlichen Komponenten, um Daten für gängige Anwendungen zu erfassen. Sollte dies einmal nicht der Fall sein, lässt sich diese Funktion problemlos hinzufügen.
Elasticsearch-Architektur: die wichtigsten Komponenten
Wenn Sie wissen möchten, wie Spark Elasticsearch funktioniert und in welchen Fällen Sie es verwenden können, müssen Sie zunächst die Infrastruktur hinter der Architektur von Elasticsearch verstehen. Hierzu zählen der Elasticsearch-Cluster, die Ports 9200 und 9300, Elasticsearch-Shards, Elasticsearch-Replikate, Analysefunktionen sowie Dokumente.
Elasticsearch-Cluster
Ein Elasticsearch-Cluster ist eine Gruppe von miteinander verbundenen Compute-Knoten, die jeweils unterschiedliche Bestandteile von Clusterdaten speichern. Als Benutzer können Sie die Anzahl der Knoten, die jedem Cluster zugewiesen werden, anpassen, indem Sie die Datei „elasticsearch.yml“ im Ordner mit den Konfigurationen ändern. Zwar können beliebig viele Cluster ausgeführt werden, doch genügt den meisten Benutzern in der Regel ein Knoten, um die gewünschten Ergebnisse zu erzielen.
Elasticsearch-Knoten
Bei einem Elasticsearch-Knoten handelt es sich um eine Computing-Ressource, die speziell auf die Suche, Indexierung und Skalierung der Datenbank abgestimmt ist. Als verteilte Datenbank arbeitet Elasticsearch mit einer Single Source of Truth, dem Elasticsearch-Datenknoten, der Ihre gesamten Daten beinhaltet. Für jeden Knoten eines Clusters wird ein eigener Name verwendet. Typischerweise enthält der Index eines Elasticsearch-Knotens etwa 10 bis 50 Millionen Dokumente.
Ports 9200 und 9300
Auf einem Elasticsearch-Shard finden Sie zwei verschiedene Porttypen. Der erste der beiden Shard-Ports ist immer geöffnet, während der zweite Shard-Port nur geöffnet wird, wenn ein Elasticsearch-Index erstellt und ein Cluster initialisiert wird. Port 9200 ist der Standardport für den primären Shard; 9300 der Standardport für dessen Replikat.
Elasticsearch-Shards
Elasticsearch-Shards sind eine reine Sammlung von Kibana-Indizes innerhalb eines Indexes. Elasticsearch verfügt über zwei verschiedene Indextypen: Elasticsearch-Dokumente (doc) und Elasticsearch-Indizes. Dokumente werden mittels Kennungen und Indizes mit einem eindeutigen Namen verknüpft.
Elasticsearch-Replikate
Ein Replikat ist eine Kopie eines Shards, wobei alle Änderungen auf dem sekundären Replikat übernommen werden, aber für den Client transparent bleiben. Das primäre Replikat wird automatisch aktualisiert, wenn neue Daten hinzugefügt bzw. gelöscht, aktualisiert oder geändert werden.
Elasticsearch-Analysefunktionen
Eine Analysefunktion ist ein Bestandteil eines Elasticsearch-Clusters. Sie ruft Daten aus der Datenbank ab und analysiert diese. Auf diese Weise können Daten, die an den Benutzer übermittelt wurden, gefiltert und sortiert werden.
Elasticsearch-Dokument
Elasticsearch-Dokumente sind der primäre Indextyp in Elasticsearch. Jedes Dokument wird als ID im Datensatz angelegt und verfügt über eine einzelne Spalte pro Dokumenttyp. Ein einfaches Beispiel für eine Dokumenten-ID in Elasticsearch lautet {doc id}. Generell verfügt jedes Dokument in einem Elasticsearch-Cluster über eine Shard-ID, einen Namen und ein Array mit Indizes, wobei alle Felder ihre eigenen Shard-übergreifenden Kennungen haben.
Wie funktioniert Elasticsearch?
Kurz gesagt, Elasticsearch erfasst Daten und veröffentlicht diese auf jedem Knoten im Cluster. Anschließend werden die Daten entsprechend der aktuell gespeicherten Datenmenge nach oben oder unten skaliert. Elasticsearch bietet den Vorteil, dass Sie all Ihre Daten in einer zentralen Datenbank mit einem flexiblen Index-Container speichern können.
Als dokumentenorientierte RESTful-Suchmaschine bietet Elasticsearch eine Vielzahl nützlicher Tools und ist in der Lage, auch umfangreiche und unübersichtliche Datensätze zu verarbeiten. Darüber hinaus können Sie die Software auch ergänzend zu einem anderen Tool einsetzen. Zum Beispiel Elasticsearch + Spark.
Beispiel für eine Elasticsearch-Abfrage
Nehmen wir an, Sie möchten nach dem Begriff „Telekommunikation“ suchen. Hierfür genügt die folgende einfache Suchsyntax:
$"type:telecommunications"
Da Elasticsearch dokumentenorientiert ist, können Sie nicht einfach eine Liste von Dokumenten durchsuchen. Sie müssen einen „Dokumententyp“ abfragen. Wir verwenden die Wortfolge "type:telecommunications"
, um sicherzustellen, dass wir nur Dokumente erhalten, die den Suchkriterien entsprechen.Für diese Abfrage übertragen wir die ID-Nummer des Dokuments als Abfrageparameter:
$"type:telecommunications"
Um dies weiter zu testen, können Sie auch ein einfaches Beispieldokument erstellen, indem Sie die folgende Abfrage ausführen:
create index:type:telecommunications create partition:type:telecommunications --data-urlencode /tasks --data-urlencode tasks/
Welchen Datenbanktyp verwendet Elasticsearch?
Das Tool Elasticsearch kombiniert die Lucene-Indexierung mit einem robusten verteilten Datenbankmodell. Auf diese Weise werden Datensätze in kleine Einheiten, sogenannte Shards, fragmentiert und auf verschiedene Knoten verteilt.
Doch wo speichert Elasticsearch die Daten?
Die in Elasticsearch gespeicherten Daten liegen entweder im JSON-Format oder im CSV-Format vor. Jeder Index verfügt über ein eigenes Template für die im Index gespeicherten Dokumente. Der Index wird vollständig repliziert, wobei ein Message Bus zur Kommunikation mit der sekundären Replikation verwendet wird. Logdateien werden als Elasticsearch-Indizes erstellt.
Diese Dokumente werden als Array mit Key-Value-Paaren in einer Datenstruktur gespeichert, die als „Memcached Set“ bezeichnet wird. Ein Memcached Set ist eine schlanke, skalierbare Datenstruktur mit geringem Speicherbedarf, die in der Lage ist, Daten mit großem Speichervolumen zu speichern und zu verarbeiten.
Der Speicher von Elasticsearch wurde für die Aufnahme, Indexierung und Suche optimiert, wobei die Dateien in regelmäßigen Intervallen auf die Festplatte geschrieben werden. Die Größe des Indexes kann nur geändert werden, indem das zuletzt eingefügte Dokument gelöscht und durch ein neues ersetzt wird. Diese Aufgabe bezeichnet man als „Datenmigration“. Dabei wird ein neues Dokument aus dem neuen Index erstellt, aktualisiert und anschließend wieder eingefügt.
Was versteht man unter Elasticsearch-Aggregation?
Die Elasticsearch-Aggregation, also die Zuweisung desselben Clusters an mehrere Endpoints, ist eine leistungsstarke Funktion, mit der Sie denselben Elasticsearch-Cluster für zusätzliche Daten und Funktionen nutzen können, ohne die Performance Ihres Produktionsclusters zu beeinträchtigen.
Bei der Aggregation von Clustern wird jedem Knoten einer von drei verschiedenen Workload-Typen zugewiesen. Diese Workload-Typen sind:
- Nicht-relational
- Online Transaction Processing (OLTP)
- Online Analytical Processing (OLAP)
Nicht-relational
Alle von Elasticsearch generierten Netzwerkanfragen werden durch Abfragen generiert, die auf dem Elasticsearch-Cluster ausgeführt werden.
Ist ein Elasticsearch-Knoten inaktiv, ist es die Aufgabe des Betriebssystems, Abfragen auf einem Hintergrund-Thread auszuführen und kontinuierlich über die Ergebnisse zu berichten. Bei der Verwendung eines Elasticsearch-Knotens greift im Falle eines Knotenausfalls ein Failover-Mechanismus. Im Falle einer Knotenüberlastung leitet der Knoten die Abfrageanfragen an eine Reihe anderer Knoten weiter und wartet, bis einer der anderen Knoten frei ist.
Bei dem von Elasticsearch generierten Netzwerkverkehr handelt es sich in den meisten Fällen um die Abfrage zugehöriger Daten. Aber auch in vielen anderen Situationen können Sie von den Vorteilen von Elasticsearch profitieren.
OLTP
Alle durch Elasticsearch generierten Netzwerkanfragen werden weiterhin durch Abfragen generiert, die auf dem Elasticsearch-Cluster laufen.
Zwar kann dies ein vollständiger Elasticsearch-Cluster für ein großes System sein (und ist sicherlich ein guter Anfang), doch gibt es Zeiten, in denen es sinnvoll ist, Elasticsearch mit einer relationalen Datenquelle zu kombinieren. In diesen Fällen greift Elasticsearch für die Verarbeitung auf eine sekundäre relationale Datenquelle zurück und zeichnet nur einen Teil der durchgeführten Abfragen auf. In diesem Szenario wird jedem Knoten nur eine sekundäre Quelle zugewiesen, während die andere inaktiv bleibt.
OLAP
Ein wesentlicher Unterschied zwischen der Elasticsearch-Aggregation und der herkömmlichen Aggregation besteht darin, dass die Elasticsearch-Aggregation eine sekundäre Datenquelle verwendet, um die aggregierten Daten zu speichern und zu verarbeiten, während andere Aggregationen denselben Elasticsearch-Cluster für mehrere Aufgaben nutzen können. Auf diese Weise lassen sich mit der Elasticsearch-Aggregation größere Datenmengen speichern, ohne dass zusätzliche Abfragen für einen primären Datensatz wie SQL- oder NoSQL-Datensätze erstellt werden müssen.
So installieren und nutzen Sie Elasticsearch
Die Installation ist relativ unkompliziert. Sie können Standard-Repositories für Elasticsearch verwenden und eine Standardumgebung für Elasticsearch festlegen.
Elasticsearch verwendet eine Konfigurationsdatei namens Kibana.yml als Grundlage für die Konfiguration. Sie können die Datei an Ihre Anforderungen anpassen. Darüber hinaus können Sie auch einen der gängigeren Anbieter von Elasticsearch-Plugins wie InfluxDB, Logstash etc. verwenden.
So installieren Sie Elasticsearch:
- Installieren Sie die Version Elasticsearch Development sowie den Server und installieren Sie die Abhängigkeiten.
- Installieren Sie die BOSH-Erweiterung für Java. Mithilfe der BOSH-Erweiterung können Sie HTML-Templates für Ihre Elasticsearch-Daten erstellen. Auf diese Weise werden die Daten für Benutzer sowie für Tools zur Datenmanipulation besser zugänglich und lesbar. Für die BOSH-Erweiterung ist eine Java Runtime erforderlich. Sie können die Standard-Repositories für Java Ihres Betriebssystems zur Installation verwenden.
- Starten Sie Elasticsearch.
- Installieren Sie das Java-Plugin für BOSH.
- Fertig. Elasticsearch läuft nun auf Ihrem Rechner und Sie können auf alle Daten zugreifen, die übersichtlich dargestellt werden.
Elasticsearch-Datenvisualisierung
Mit Elasticsearch können Sie über eine einfache API Daten in jeglicher Form suchen und filtern. Es handelt sich um eine RESTful-API, was bedeutet, dass Benutzer sie nicht nur für die Datenanalyse, sondern auch für webbasierte Anwendungen in der Produktion verwenden können. Derzeit beinhaltet Elasticsearch eine Attributsuche, eine Funktion, die es Ihnen ermöglicht, Aggregationen Ihrer Daten zu berechnen. Nachfolgend finden Sie einige besonders relevante Funktionen:
- Es bietet eine skalierbare Suchlösung
- Führt Suchen nahezu in Echtzeit durch
- Unterstützt Multi-Tenancy (Mehrmandantenfähigkeit)
- Optimiert Backup-Prozesse und stellt die Datenintegrität sicher
- Im Falle eines Serverabsturzes kann ein Index wiederhergestellt werden
- Verwendet Javascript Object Notation (JSON) sowie Java-Programmierschnittstellen (APIs)
- Automatisches Indexieren von JSON-Dokumenten
- Die Indexierung erfolgt über eindeutige Kennungen auf Typebene
- Jeder Index kann individuell eingerichtet werden
- Suchanfragen können mit Lucene-basierten Abfrage-Strings durchgeführt werden
Was spricht für die Verwendung von Elasticsearch anstelle von SQL?
Der Elasticsearch-Dienst ist die mit Abstand am häufigsten eingesetzte, leistungsfähigste und nützlichste Suchtechnologie. Dies resultiert aus der Tatsache, dass Elasticsearch bei der schnellen und effizienten Verarbeitung großer Datenmengen deutlich besser als die meisten der vergleichbaren SQL-Technologien abschneidet.
Elasticsearch wurde eigens als Suchanwendung für Unternehmen entwickelt und bietet leistungsstarke Funktionen und benutzerfreundliche Tools für Unternehmen, die auf Datenanalysen setzen. Damit bieten wir ihnen eine wesentlich praktischere und flexiblere Möglichkeit, Datenbatches ressourcenschonend zu speichern, zu durchsuchen und zu analysieren.
So finden Sie die Version von Elasticsearch heraus
Es gibt zwei schnelle Methoden herauszufinden, welche Version von Elasticsearch Sie verwenden. Die erste Option: Starten Sie Ihre ElasticSearch-Konsole und melden Sie sich dort an, um Ihre Softwareversion anzuzeigen. Die zweite Option: Lesen Sie in der offiziellen Dokumentation von Elasticsearch nach.
Die drei besten Alternativen zu Elasticsearch auf dem Markt
Wenn Sie überlegen, welche Software Sie verwenden möchten, sollten Sie zunächst die drei besten Alternativen zu Elasticsearch in Erwägung ziehen, ehe Sie Ihre Entscheidung treffen:
AWS
Amazon Web Services (AWS) ist mittlerweile die führende Computing-Plattform für Startups, Spitzenforschung und Großunternehmen, die ihre Computing-Infrastruktur optimieren wollen. Mit einer Technologie, die Kunden in die Lage versetzt, ihre eigenen virtuellen Server zu nutzen und zu erstellen, und mit dem branchenweit umfassendsten Angebot an Cloud-Computing-Services verschärft AWS die sogenannten „Cloud Wars“ zwischen Azure von Microsoft und GCP von Google.
Solr
Apache Solr ist ein in Java geschriebener (BSD-lizenzierter) Open-Source-Daemon für Suchanalysen und eine der am meisten verwendeten Open-Source-Suchmaschinen. Die Suchfunktionen zahlreicher der weltweit größten E-Commerce-Websites und Social-Media-Plattformen wie Twitter, Yahoo, Amazon, eBay und eBay Enterprise basieren auf Solr.
Solr nutzt eine verteilte Architektur, um eine schnelle Suche zu ermöglichen, und verfügt über eine einzigartige einheitliche Storage-API, mit der sich die Suchmaschine nahtlos in praktisch jedes Speichersystem eines Unternehmens integrieren lässt.
ArangoDB
ArangoDB ist eine verteilte, dokumentenorientierte NoSQL-Datenbank, die sich aufgrund ihrer leistungsstarken analytischen Datenverarbeitung und ihrer Benutzerfreundlichkeit zu einer gefragten Option entwickelt hat. Es handelt sich um eine SQL-ähnliche Sprache, die ArangoDB als Key-Value-Speicher nutzt und es Benutzern ermöglicht, Tabellen, Verknüpfungen und Abfragen so zu erstellen wie in relationalen Datenbanken.
Ein positiver Aspekt von ArangoDB ist, dass der gesamte Code auf dem neuesten Stand gehalten wird. Auch die Support-Seiten sind übersichtlich gestaltet. Je weiter ein Projekt voranschreitet und je mehr Menschen dazu beitragen, desto aktueller und übersichtlicher werden die Seiten. Zudem ist ArangoDB mit allen gängigen Programmiersprachen wie Python und Javascript kompatibel.
Die drei besten Elasticsearch-Tools
Damit Sie Ihre Daten optimal nutzen können, empfehlen wir die Verwendung von Elasticsearch in Kombination mit anderen Tools und Softwareprogrammen – insbesondere mit Hevo Data, Logstash und Apache Nifi.
Hevo Data
Hevo Data Elasticsearch ist eine kostenlose, verteilte Open-Source-Suchmaschine, die Elasticsearch-Daten aufnimmt, sie für Abfragen parst und diese als Ereignisprotokolle auf den Clusterknoten ausführt. Mit dieser Software können Sie Analyseabfragen in Echtzeit mit Echtzeitdaten sowie Backups dieser Daten vornehmen.
Logstash
Einfach ausgedrückt ist Logstash ein Elasticsearch-Tool, mit dem Sie Regeln definieren können, um eingehende Daten zu verwalten, sobald sie von Elasticsearch extrahiert wurden. Durch die sofortige Verarbeitung der Daten bietet Logstash Analyse- und Visualisierungstools, mit denen Sie Ihre Daten optimal verwerten können.
Apache NiFi
Apache Nifi besteht aus einer Reihe von Bibliotheken, die Deeplinks zwischen mehreren Datenquellen ermöglichen. Dazu gehören unter anderem beliebte Open-Source-APIs wie die Core Location API von Facebook, die REST-APIs von Twitter oder auch die In-App Feature API von Yelp. Mit Apache NiFi können Benutzer ihre eigenen APIs verknüpfen und alle Informationen eines Datensatzes diversen anderen Programmen zur Verfügung stellen.
Ist Elasticsearch die richtige Wahl für Sie?
Mit Ihrem Wissen über Elasticsearch, von den Funktionen bis hin zur Infrastruktur und Architektur, müssen Sie jetzt nur noch entscheiden, ob das Tool das Richtige für Ihr Unternehmen ist.