Wir haben zwei HDP-Cluster-Setups, nennen wir sie A und B.
CLUSTER A NODES :
CLUSTER B NODES :
Wir haben drei Hauptkomponenten in unserer Anwendung, die einen ETL-Vorgang (Extrahieren, Transformieren und Laden) für eingehende Dateien durchführen. Ich werde diese Komponenten als E, T bzw. L bezeichnen.
EIGENSCHAFTEN DER KOMPONENTE :
KOMPONENTEN-T-MERKMALE :
KOMPONENTE L-MERKMALE :
Die Komponente L ist das Juwel unter allen drei Komponenten und wir haben keine Störungen darin gesehen. In der Komponente E gab es geringfügige ungeklärte Störungen, aber die Komponente T ist die schwierigste.
Die Komponenten E und T verwenden beide den DFS-Client, um mit dem Namen zu kommunizieren.
Nachfolgend finden Sie einen Auszug der Ausnahme, die wir beim Ausführen der Komponente T intermittierend beobachtet haben:
%Vor%Wie bereits erwähnt, sehen wir uns dieser Ausnahme sehr zeitweise gegenüber. Wenn sie auftritt, bleibt unsere Anwendung stecken und veranlasst uns, sie neu zu starten.
LÖSUNGEN, DIE WIR VERSUCHTEN:
Unser erster Verdacht war, dass wir den aktiven namenode in Cluster A überlasten, da Komponente T viele DFS-Clients parallel öffnet und Dateioperationen für verschiedene Dateien durchführt (kein Konflikt in denselben Dateien). In unserem Bemühen, dieses Problem anzugehen, haben wir uns zwei Schlüsselparameter für den namenode dfs.namenode.handler.count und ipc.server.listen.queue.size angesehen Letzteres von 128 (Standard) bis 1024.
Leider blieb das Problem in Komponente T bestehen. Wir begannen einen anderen Ansatz für das Problem. Wir haben uns ausschließlich darauf konzentriert, den Grund für das Auftreten von Connection Reset By Peer zu finden. Laut einer Vielzahl von Artikeln und Diskussionen zum Austausch von Stacks wird das Problem wie folgt beschrieben: Das Flag RST wurde vom Peer gesetzt, was zu einem sofortigen Abbruch der Verbindung führt . In unserem Fall haben wir festgestellt, dass der Peer der Name von Cluster A ist.
Ich behalte die RST-Flagge im Hinterkopf, und habe mich intensiv damit beschäftigt, die Interna der TCP-Kommunikation nur zu verstehen. der Grund des RST Flags.
Kommen wir zu dem Punkt zurück, an dem der Backlog vollständig gefüllt ist. TCP verhält sich auf zwei Arten und dieses Verhalten kann auch durch einen Kernel-Parameter namens net.ipv4.tcp_abort_on_overflow gesteuert werden. Dies ist standardmäßig auf 0 gesetzt und bewirkt, dass der Kernel alle neuen SYN-Pakete löscht, wenn der Rückstand voll ist, wodurch der Absender wiederum SYN-Pakete senden kann.Wenn der Kernel auf 1 gesetzt ist, markiert er das RST-Flag in einem Paket und sendet es an den Sender, wodurch die Verbindung abrupt beendet wird.
Wir haben den Wert der oben genannten Kernel-Parameter überprüft und festgestellt, dass net.core.somaconn auf 1024 gesetzt ist, net.ipv4.tcp_abort_on_overflow ist 0 und net.ipv4.tcp_max_syn_backlog wird auf allen Computern in beiden Clustern auf 4096 festgelegt.
Der einzige Verdacht, den wir jetzt noch haben, sind die Switches, die Cluster A mit Cluster B verbinden, weil keiner der Maschinen in irgendeinem Cluster das RST-Flag als Parameter net.ipv4 setzen wird. tcp_abort_on_overflow ist auf 0 gesetzt.
MEINE FRAGEN
Unser nächster Ansatz für dieses Problem besteht darin, zu ermitteln, welche Maschine oder welcher Switch (es gibt keinen Router) das RST-Flag durch Analyse der Pakete mit tcpdump oder wireshark setzt. Wir werden auch die Größe aller oben erwähnten Warteschlangen auf 4096 erhöhen, um stoßartigen Verkehr wirksam zu handhaben.
In den namenode-Protokollen sind keine Ausnahmen zu sehen, außer dass die Namendeode-Verbindung in Ambari zu bestimmten Zeitpunkten und nicht unbedingt bei der Ausnahme "Connection Reset by Peer" angezeigt wurde.
Zum Schluss wollte ich wissen, ob wir auf dem richtigen Weg sind, um dieses Problem zu lösen, oder werden wir gerade in eine Sackgasse geraten?
P.S. Ich entschuldige mich für die Länge des Inhalts in meiner Frage. Ich wollte den Lesern den gesamten Kontext vorstellen, bevor ich um Hilfe oder Anregungen bat. Vielen Dank für Ihre Geduld.
Tags und Links rpc hdfs tcp hortonworks-data-platform namenode