我正在嘗試使用NiFi來處理使用HDF 1.2的大型CSV文件(每個潛在的數十億條記錄)。我已經實現了我的流程,並且對於小文件一切正常。Apache NiFi - OutOfMemory錯誤:在SplitText處理器上超出了GC開銷限制
的問題是,如果我嘗試將文件大小推到100MB(1M記錄)我從負責文件拆分成單記錄的SplitText處理器獲得一個java.lang.OutOfMemoryError: GC overhead limit exceeded
。我已經搜索了這一點,它基本上意味着垃圾收集器執行時間太長而沒有獲得太多的堆空間。我預計這意味着太多的流文件正在生成太快。
我該如何解決這個問題?我試過改變nifi的最大堆空間和其他內存相關的屬性的配置,但似乎沒有任何工作。
現在我增加了一箇中間SplitText與1K的行數和,讓我避免錯誤,但我不認爲這是因爲當傳入文件大小會變得更多潛在的固溶那恐怕我會從處理器中得到同樣的行爲。
歡迎任何建議!謝謝
如果沒有「一次性」的方式來做到這一點,我一定會嘗試多個層次。關於PutKafka,我會結束在集羣中與KaFi一起設置Kafka。忽略這將需要一些羣集資源的事實,性能或其他觀點是否有優勢?感謝您一如既往地瞭解有關NiFi行爲的有用信息。 – riccamini
好吧,我不一定說你需要Kafka作爲其中的一部分,在你將每個流文件拆分爲1行之後,我更多地詢問你想要在流程中做什麼,看看你是否真的需要這樣做。很多時候,人們只是想將這些行傳遞給外部系統,在這種情況下,可能有一個處理器可以在大文件中傳輸,並將每行發送到某個位置,而不會創建數百萬個流文件,而kafka和splunk是這只是兩個例子。 –
我其實需要逐行分割文件,然後在每個字段上應用不同的轉換/標準化。然後,我將每條線回到一起,然後全部導出到蜂巢中。 – riccamini