Solr auf YARN

Eine der wichtigsten Entwicklungen in der Big-Data-Landschaft ist das Aufkommen der besten Frameworks für verteiltes Rechnen. Vorbei sind die Zeiten,…

Eine der wichtigsten Entwicklungen in der Big-Data-Landschaft ist das Aufkommen der besten Frameworks für verteiltes Rechnen. Vorbei sind die Zeiten, in denen jedes Big-Data-Problem wie ein Nagel für den MapReduce-Hammer aussah. Sie haben ein iteratives maschinelles Lernproblem? Verwenden Sie Spark. Müssen Sie tiefgreifende Analysen für Milliarden von Zeilen durchführen? MapReduce. Sie benötigen Ad-hoc-Abfragefunktionen? Solr ist am besten geeignet. Sie müssen einen Strom von Tweets in Echtzeit verarbeiten? Spark Streaming oder Storm. Um diese Mehrzweck-Datenverarbeitungsplattform zu unterstützen, wurde in Hadoop 2 YARN (Yet Another Resource Negotiator) eingeführt, das die Ressourcenverwaltung und Auftragsplanung von der Datenverarbeitung in einem Hadoop-Cluster trennt. Im Gegensatz dazu war in Hadoop v1 die MapReduce-Berechnung eng mit dem Cluster-Ressourcenmanager verbunden. Vereinfacht ausgedrückt, ermöglicht YARN die Ausführung verschiedener Jobs in einem Hadoop-Cluster, einschließlich MapReduce, Spark und Storm.

In diesem Beitrag stelle ich ein Open-Source-Projekt vor, das bei Lucidworks entwickelt wurde, um SolrCloud-Cluster auf YARN(https://github.com/Lucidworks/yarn-proto) zu betreiben.

Größenvorteile

Bevor wir uns mit den Details der Funktionsweise befassen, sollten wir verstehen, warum Sie SolrCloud auf YARN ausführen sollten. Der Hauptvorteil der Ausführung verteilter Anwendungen wie Solr auf YARN ist die verbesserte betriebliche Effizienz. Das Entwerfen, Bereitstellen und Verwalten eines großen Hadoop-Clusters ist keine leichte Aufgabe. Die Bereitstellung eines neuen Clusters erfordert Investitionen in spezielle Hardware, Spezialisten für die Installation und Konfiguration sowie Leistungs- und Stabilitätstests. Darüber hinaus müssen Sie den Cluster sichern und seinen Zustand aktiv überwachen. Hinzu kommt die Schulung der Mitarbeiter in der Nutzung und Entwicklung von Lösungen für Hadoop. Kurz gesagt, die Implementierung eines Hadoop-Clusters ist eine große Investition, die Monate oder sogar Jahre dauern kann.

Die gute Nachricht ist, dass das Hinzufügen zusätzlicher Rechenkapazität zu einem bestehenden Cluster viel einfacher ist als die Bereitstellung eines neuen Clusters. Daher ist es wirtschaftlich sinnvoll, Skaleneffekte zu nutzen, indem Sie so viele verteilte Anwendungen wie möglich auf YARN laufen lassen. Wenn eine neue Anwendung mehr Ressourcen benötigt, ist es einfach, weitere HDFS- und Datenknoten hinzuzufügen. Sobald eine neue Anwendung auf YARN bereitgestellt ist, können Administratoren sie von einem zentralen Tool aus überwachen.

Wie wir weiter unten sehen werden, ist der Betrieb von Solr auf YARN sehr einfach, da ein Systemadministrator mit ein paar einfachen Befehlen einen SolrCloud-Cluster beliebiger Größe bereitstellen kann. Ein weiterer Vorteil der Ausführung von Solr auf YARN ist, dass Unternehmen temporäre SolrCloud-Cluster bereitstellen können, um Hintergrundaufgaben wie die Neuindizierung einer großen Sammlung durchzuführen. Sobald die Neuindizierung abgeschlossen ist und die Indexdateien sicher im HDFS gespeichert sind, können YARN-Administratoren den temporären SolrCloud-Cluster herunterfahren.

Schrauben und Muttern

Das folgende Diagramm veranschaulicht, wie Solr auf YARN funktioniert.

Solr auf YARN

Schritt 1: Starten Sie die SolrClient-Anwendung

Bevor Sie die SolrClient-Anwendung ausführen, müssen Sie das Solr-Distributionsbündel (solr.tgz) in den HDFS hochladen. Darüber hinaus muss auch das Solr YARN Client JAR (solr-yarn.jar) in das HDFS hochgeladen werden, da es zum Starten der SolrMaster-Anwendung auf einem der Knoten im Cluster benötigt wird (Schritt 2 unten).

hdfs dfs -put solr-yarn/jar solr/

hdfs dfs -put solr.tgz solr/

SolrClient ist eine Java-Anwendung, die die YARN Java API verwendet, um die SolrMaster-Anwendung im Cluster zu starten. Hier sehen Sie ein Beispiel für die Ausführung des SolrClient:

hadoop jar solr-yarn.jar org.apache.solr.cloud.yarn.SolrClient

-knoten=2

-zkHost=localhost:2181

-solr=hdfs://localhost:9000/solr/solr.tgz

-jar=hdfs://localhost:9000/solr/solr-yarn.jar

-speicher 512

-hdfs_home=hdfs://localhost:9000/solr/index_data

In diesem Beispiel wird Solr angefordert, um in zwei YARN-Containern im Cluster bereitgestellt zu werden, wobei dem Container jeweils 512M Speicher zugewiesen werden. Beachten Sie, dass Sie auch den ZooKeeper-Verbindungsstring (-zkHost) und den Ort angeben müssen, an dem Solr Indizes im HDFS erstellen soll (-hdfs_home). Daher müssen Sie ein ZooKeeper-Ensemble einrichten, bevor Sie Solr auf YARN bereitstellen. Die Ausführung von Solr mit dem eingebetteten ZooKeeper wird für YARN-Cluster nicht unterstützt.

Die SolrClient-Anwendung blockiert, bis sie sieht, dass SolrCloud im YARN-Cluster läuft.

Schritt 2: Zuweisung des Containers für die Ausführung von SolrMaster

Die SolrClient-Anwendung teilt dem ResourceManager mit, dass sie die SolrMaster-Anwendung in einem Container im Cluster starten muss. Im Gegenzug wählt der ResourceManager einen Knoten aus und weist den NodeManager auf dem ausgewählten Knoten an, die SolrMaster-Anwendung zu starten. Auf jedem Knoten im Cluster läuft ein NodeManager.

Schritt 3: SolrMaster fordert Container an, um SolrCloud-Knoten auszuführen

Der SolrMaster führt drei grundlegende Aufgaben aus: 1) Er fordert N Container (-nodes) für laufende SolrCloud-Knoten vom ResourceManager an, 2) er konfiguriert jeden Container, um den Solr-Befehl zu starten, und 3) er wartet auf einen Shutdown-Callback, um jeden SolrCloud-Knoten ordnungsgemäß herunterzufahren.

Schritt 4: Solr-Container über den Cluster verteilt

Beim Einrichten von Container-Anfragen fügt der SolrMaster den Pfad zum Solr-Distributionsbündel (solr.tgz) als lokale Ressource zu jedem Container hinzu. Wenn der Container zugewiesen wird, extrahiert der NodeManager die solr.tgz auf dem lokalen Dateisystem und stellt sie als ./solr zur Verfügung. So können wir das Solr-Startskript einfach mit ./solr/bin/solr ausführen.

Beachten Sie, dass andere Anwendungen, wie z.B. Spark, neben Solr in einem anderen Container auf demselben Knoten laufen können.

Schritt 5: SolrCloud-Knoten verbindet sich mit ZooKeeper

Schließlich stellt jeder Solr beim Starten eine Verbindung zu ZooKeeper her, um dem SolrCloud-Cluster beizutreten. In den meisten Fällen ist es sinnvoll, Solr so zu konfigurieren, dass es die HdfsDirectoryFactory mit dem Parameter -hdfs_home auf dem SolrClient verwendet (siehe Schritt 1), da alle lokal im Container erstellten Dateien verloren gehen, wenn der Container heruntergefahren wird.

Sobald der SolrCloud-Cluster läuft, interagieren Sie mit ihm über die Solr-APIs.

Herunterfahren eines SolrCloud-Clusters

Ein subtiler Aspekt bei der Ausführung von SolrCloud in YARN ist, dass der Anwendungsmaster (SolrMaster) eine Möglichkeit benötigt, jedem Knoten im Cluster mitzuteilen, dass er sich ordnungsgemäß herunterfahren soll. Dies wird mit einem benutzerdefinierten Jetty-Hook zum Herunterfahren erreicht. Wenn jeder Solr-Knoten gestartet wird, wird die IP-Adresse des SolrMaster in einer Java-Systemeigenschaft gespeichert: yarn.acceptShutdownFrom. Der benutzerdefinierte Shutdown-Handler akzeptiert eine Jetty-Stop-Anfrage nur von dieser Remote-Adresse. Darüber hinaus berechnet der SolrMaster einen geheimen Jetty-Stop-Schlüssel, den nur er kennt, um sicherzustellen, dass er die einzige Anwendung ist, die eine Shutdown-Anforderung auslösen kann.

Was kommt als Nächstes?

Lucidworks arbeitet daran, das Projekt auf das Apache Solr Projekt zu migrieren, siehe: https://issues.apache.org/jira/browse/SOLR-6743. Darüber hinaus fügen wir dem Solr Scale Toolkit(https://github.com/Lucidworks/solr-scale-tk) YARN-Unterstützung hinzu und planen, in naher Zukunft YARN-Unterstützung für Lucidworks Fusion(https://lucidworks.com/product/fusion/) hinzuzufügen.

You Might Also Like

Vom Suchunternehmen zum praktischen KI-Pionier: Unsere Vision für 2025 und darüber hinaus

CEO Mike Sinoway gibt Einblicke in die Zukunft der KI und stellt...

Read More

Wenn KI schief geht: Fehlschläge in der realen Welt und wie man sie vermeidet

Lassen Sie nicht zu, dass Ihr KI-Chatbot einen 50.000 Dollar teuren Tahoe...

Read More

Lucidworks Kernpakete: Branchenoptimierte KI-Such- und Personalisierungslösungen

Entdecken Sie unsere umfassenden Core Packages, die Analytics Studio, Commerce Studio und...

Read More

Quick Links