Flink Stream Batch Integrated Computing (7): Flink-Optimierung

Inhaltsverzeichnis

Konfigurationsspeicher

Parallelität einstellen

Einsatzszene

spezifische Einstellungen

Auffüllen

Prozessparameter konfigurieren

Einsatzszene

spezifische Konfiguration

Konfigurieren Sie die Netty-Netzwerkkommunikation

Einsatzszene

spezifische Konfiguration

Konfigurationsspeicher

Flink ist auf Speicherberechnungen angewiesen, und ein unzureichender Speicher während des Berechnungsprozesses hat große Auswirkungen auf die Ausführungseffizienz von Flink . Sie können GC ( Garbage Collection ) überwachen, die Speichernutzung und die verbleibenden Bedingungen auswerten, um festzustellen, ob der Speicher zu einem Leistungsengpass geworden ist, und entsprechend der Situation optimieren.

Überwachen Sie das YARN- Container -GC- Protokoll des Knotenprozesses. Wenn die vollständige GC häufig auftritt , muss die GC optimiert werden .

conf/flink-conf.yaml

env.java.opts: -XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+AlwaysPreTouch -server
-XX:+HeapDumpOnOutOfMemoryError

Passen Sie das Verhältnis der alten Generation zur neuen Generation an. Fügen Sie Parameter zum Konfigurationselement env.java.opts hinzu: -XX:NewRatio.

Beispiel: „-XX:NewRatio=2 bedeutet, dass das Verhältnis der alten Generation zur neuen Generation 2:1 beträgt, die neue Generation 1/3 des gesamten Heap-Speicherplatzes und die alte Generation 2/3 einnimmt.

Parallelität einstellen

Einsatzszene

Der Grad der Parallelität steuert die Anzahl der Aufgaben und beeinflusst die Anzahl der Blöcke, in die die Daten nach der Operation aufgeteilt werden. Passen Sie den Grad der Parallelität an, um die Anzahl der Aufgaben und die von jeder Aufgabe verarbeiteten Daten sowie die Verarbeitungsleistung der Maschine zu optimieren.

Überprüfen Sie die CPU- Auslastung und die Speichernutzung. Wenn Aufgaben und Daten nicht gleichmäßig auf jedem Knoten verteilt sind, sondern sich auf einzelne Knoten konzentrieren, können Sie den Grad der Parallelität erhöhen, sodass Aufgaben und Daten gleichmäßiger auf jedem Knoten verteilt werden. Erhöhen Sie die Parallelität von Aufgaben und nutzen Sie die Rechenleistung von Clustermaschinen voll aus.

spezifische Einstellungen

Die Parallelität von Aufgaben kann über die folgenden vier Ebenen (in absteigender Prioritätsreihenfolge angeordnet) angegeben werden, und Benutzer können die Parallelitätsparameter entsprechend dem tatsächlichen Speicher, der CPU , den Daten und der Anwendungslogik anpassen.

  • Bedienerebene

Die Parallelität von Operator, Datenquelle und Senke kann beispielsweise durch den Aufruf der Methode setParallelism() festgelegt werden

final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<String> text = [...]
DataStream<Tuple2<String, Integer>> wordCounts = text
    .flatMap(new LineSplitter())
    .keyBy(0)
    .timeWindow(Time.seconds(5))
    .sum(1).setParallelism(5);
wordCounts.print();
env.execute("Word Count Example");
  • Hierarchie der Ausführungsumgebung

Flink- Programme werden in der Ausführungsumgebung ausgeführt. Die Ausführungsumgebung definiert eine Standardparallelität für alle ausgeführten Operatoren, Datenquellen und Datensenken .

Die Standardparallelität der Ausführungsumgebung kann durch Aufrufen der Methode setParallelism() angegeben werden . Zum Beispiel:

final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(3);
DataStream<String> text = [...]
DataStream<Tuple2<String, Integer>> wordCounts = [...]
wordCounts.print();
env.execute("Word Count Example");
  • Kundenhierarchie

Der Grad der Parallelität kann festgelegt werden, wenn der Client den Job an Flink übermittelt . Für CLI- Clients kann der Grad der Parallelität über den Parameter „-p“ angegeben werden . Zum Beispiel:

./bin/flink run -p 10 ../examples/*WordCount-java*.jar
  • System Level

Auf Systemebene können Sie die Standardparallelität aller Ausführungsumgebungen festlegen , indem Sie die Konfigurationsoption „parallelism.default“ in der Datei „flink-conf.yaml“ im Flink- Client- Conf- Verzeichnis ändern.

Auffüllen

Optimieren Sie bei der Entwicklung von Flink-Anwendungen die Datenpartitionierungs- oder Gruppierungsvorgänge von DataStream.

  • Wenn die Partitionierung zu einer Datenungleichheit führt, müssen Sie eine Optimierung der Partitionen in Betracht ziehen.
  • Vermeiden Sie nicht parallele Vorgänge. Einige Vorgänge auf DataStream werden nicht parallelisiert, z. B. WindowAll.
  • keyBy versucht, keinen String zu verwenden.

Prozessparameter konfigurieren

Einsatzszene

Im Flink-on-YARN- Modus gibt es zwei Prozesse: JobManager und TaskManager . Bei der Aufgabenplanung und -ausführung übernehmen JobManager und TaskManager große Verantwortung.

Daher hat die Parameterkonfiguration von JobManager und TaskManager einen großen Einfluss auf die Ausführung von Flink- Anwendungen. Benutzer können die Leistung des Flink -Clusters durch die folgenden Vorgänge optimieren.

spezifische Konfiguration

  • Konfigurieren Sie den JobManager-Speicher

JobManager ist für die Aufgabenplanung und Nachrichtenkommunikation zwischen TaskManager und RM verantwortlich. Wenn die Anzahl der Aufgaben zunimmt und die Parallelität der Aufgaben zunimmt, muss der Speicher des JobManagers entsprechend erhöht werden.

Abhängig von der tatsächlichen Anzahl der Aufgaben können Sie einen geeigneten Speicher für den JobManager festlegen.

        Wenn Sie den Befehl „garn-session“ verwenden, fügen Sie den Parameter „-jm MEM“ hinzu, um den Speicher festzulegen.
        Wenn Sie den Befehl „garn-cluster“ verwenden, fügen Sie den Parameter „-yjm MEM“ hinzu, um den Speicher festzulegen.

  • Konfigurieren Sie die Anzahl der TaskManager

Jeder TaskManager kann eine Aufgabe pro Kern gleichzeitig ausführen. Daher ist eine Erhöhung der Anzahl der TaskManager gleichbedeutend mit einer Erhöhung der Parallelität von Aufgaben. Bei ausreichenden Ressourcen kann die Anzahl der TaskManager entsprechend erhöht werden, um die Betriebseffizienz zu verbessern.

  • Anzahl der zugewiesenen TaskManager-Slots

Mehrere Kerne jedes TaskManagers können mehrere Aufgaben gleichzeitig ausführen, was einer Erhöhung der Parallelität von Aufgaben entspricht. Da sich jedoch alle Kerne den Speicher des TaskManagers teilen, ist es notwendig, den Speicher und die Anzahl der Kerne auszugleichen.

        Wenn Sie den Befehl „garn-session“ verwenden, fügen Sie den Parameter „-s NUM“ hinzu, um die Anzahl der SLOTs festzulegen.
        Wenn Sie den Befehl „garn-cluster“ verwenden, fügen Sie den Parameter „-ys NUM“ hinzu, um die Anzahl der SLOTs festzulegen.

  • Konfigurieren Sie den TaskManager-Speicher

Der Speicher von TaskManager wird hauptsächlich für die Aufgabenausführung, Kommunikation usw. verwendet. Wenn eine Aufgabe sehr groß ist, sind möglicherweise mehr Ressourcen erforderlich, sodass der Speicher entsprechend erhöht werden kann.

        Wenn Sie den Befehl „garn-session“ verwenden, fügen Sie den Parameter „-tm MEM“ hinzu, um den Speicher festzulegen.
        Wenn Sie den Befehl „garn-cluster“ verwenden, fügen Sie den Parameter „-ytm MEM“ hinzu, um den Speicher festzulegen.

Konfigurieren Sie die Netty-Netzwerkkommunikation

Einsatzszene

Die Flink- Kommunikation basiert hauptsächlich auf dem Netty- Netzwerk, daher ist die Einstellung von Netty bei der Ausführung von Flink- Anwendungen besonders wichtig . Die Qualität der Netzwerkkommunikation bestimmt direkt die Geschwindigkeit des Datenaustauschs und die Effizienz der Aufgabenausführung.

spezifische Konfiguration

Die folgenden Konfigurationen können in der Konfigurationsdatei „conf/flink-conf.yaml“ des Clients geändert und angepasst werden . Die Standardeinstellung ist eine relativ optimale Lösung. Bitte ändern Sie sie sorgfältig, um Leistungseinbußen zu vermeiden.

  • taskmanager.network.netty.num-arenas:

Der Standardwert ist taskmanager.numberOfTaskSlots und gibt die Anzahl der Netty-Domänen an.

  • taskmanager.network.netty.server.numThreads und taskmanager.network.netty.client.numThreads:

Der Standardwert ist taskmanager.numberOfTaskSlots, der die Anzahl der Threads von Nettys Client und Server angibt.

  • taskmanager.network.netty.client.connectTimeoutsec:

Der Standardwert ist 120 Sekunden, was die Zeitüberschreitungszeit für die Clientverbindung des Taskmanagers bedeutet.

  • taskmanager.network.netty.sendReceiveBufferSize:

Der Standardwert ist die Systempuffergröße (cat /proc/sys/net/ipv4/tcp_[rw]mem), im Allgemeinen 4 MB, was die Puffergröße des Sendens und Empfangens von Netty angibt.

  • taskmanager.network.netty.transport:

Der Standardwert ist der Nio-Modus, der den Netty-Übertragungsmodus bedeutet, und es gibt zwei Modi: Nio und Epoll.

Supongo que te gusta

Origin blog.csdn.net/victory0508/article/details/131436357
Recomendado
Clasificación