Ich versuche NiFi verwenden, um große CSV-Dateien (potenziell Milliarden von Datensätzen) mit HDF 1.2 zu verarbeiten. Ich habe meinen Flow implementiert und alles funktioniert gut für kleine Dateien.Apache NiFi - OutOfMemory Fehler: GC Overhead Limit überschritten auf SplitText Prozessor
Das Problem ist, dass, wenn ich versuche, die Dateigröße auf 100 MB (1M Datensätze) zu schieben ich ein java.lang.OutOfMemoryError: GC overhead limit exceeded
vom SplitText Prozessor erhalte verantwortlich für die Datei in einzelne Datensätze zu splitten. Ich habe nach dem gesucht, und es bedeutet im Grunde, dass der Garbage Collector zu lange ausgeführt wird, ohne viel Heap-Speicherplatz zu erhalten. Ich erwarte, dass zu viele Flow-Dateien zu schnell generiert werden.
Wie kann ich das lösen? Ich habe versucht, die nifi-Konfiguration in Bezug auf den maximalen Heap-Speicher und andere speicherbezogene Eigenschaften zu ändern, aber nichts scheint zu funktionieren.
Jetzt habe ich eine Zwischen SplitText mit einer Zeilenzahl von 1K und das ermöglicht es mir, den Fehler zu vermeiden, aber ich sehe das nicht als eine solide Lösung für, wenn die eingehende Datei möglicherweise viel mehr werden wird als das, ich fürchte, ich werde das gleiche Verhalten vom Prozessor bekommen.
Jeder Vorschlag ist willkommen! Danke
Wenn es keine "one-shot" Möglichkeit gibt, dies zu tun, werde ich definitiv mehrere Ebenen ausprobieren. Bezüglich PutKafka würde ich Kafka zusammen mit NiFi im Cluster aufbauen. Ignorieren Sie die Tatsache, dass dies einige Cluster-Ressourcen braucht, gibt es Vorteile aus einer Performance oder anderen Standpunkten? Danke wie immer für die nützlichen Informationen über das Verhalten von NiFi. – riccamini
Nun, ich wollte nicht unbedingt sagen, dass du Kafka als Teil davon brauchst. Ich habe mich mehr gefragt, was du in deinem Flow machen willst, nachdem du auf 1 Zeile pro Flow-Datei aufgeteilt hast, um zu sehen, ob du das wirklich tun musst . Viele Male möchten die Leute diese Zeilen nur an ein externes System liefern, und in diesen Fällen könnte es möglich sein, einen Prozessor zu haben, der die große Datei streamt und jede Zeile irgendwo hinschickt, ohne Millionen von Flussdateien zu erstellen, die kafka und splunk waren nur zwei Beispiele dafür. –
Ich muss die Dateien tatsächlich Zeile für Zeile aufteilen und dann eine andere Konvertierung/Normalisierung für jedes seiner Felder anwenden. Dann stoße ich jede Zeile wieder zusammen und exportiere alle auf Stock. – riccamini