2017-10-19 48 views
1

我使用ListenHTTP作爲Nifi進程的輸入點。Nifi在注入數據時崩潰

import requests 
import csv 
import pandas as pd 
import json 
import time 

url = 'http://localhost:8085/contentListener' 

df = pd.read_csv('demo_dataset.csv') 

for i in df.index: 
    data = df.iloc[i].to_json() 
    r = requests.post(url, data=data, allow_redirects=True) 
    time.sleep(0.1) 

的問題是,Nifi被處理後墜毀約3000項:

我從CSV文件中完全採用100MB左右發送數據。然後我應該重新啓動它(重新啓動之前,我也手動清空日誌和flowfile_repository文件夾)。

Nifi處理器ListenHTTP或Nifi itslef中是否有任何參數可以幫助解決此問題?

回答

1

這個問題有點不清楚 - Apache NiFi在處理3000個100Mb文件或從單個文件中處理3000行後崩潰了?在第一種情況下,我會想象這是一個存儲/堆問題。你能否提供一個從$NIFI_HOME/logs/nifi-app.log的堆棧跟蹤?

如果您能夠使用NiFi 1.2.0+,我會建議使用record processors來完成您的操作,因爲性能更好,流程更易於設計。您可以將100Mb CSV文件作爲單個操作發送(或使用GetFile),並使各種處理器獨立運行在文件的每一行中。

+0

它發生在使用'ListenHTTP'從單個文件發送3000行之後。你會推薦使用'GetFile'嗎?我的目標是通過Nifi處理器傳遞100Mb的數據(大約100萬行)。 – Dinosaurius

+0

此外,'ListenHTTP'可能不是注入100Mb數據的最佳選擇。這個過程需要很長的時間,我有http相關的問題(我應該設置超時和使用time.sleep)。我可以使用'ListFile'->'FetchFile' - > ???爲了逐行讀取我的CSV文件並將每行轉換爲JSON字符串(就像我在Python代碼中那樣)? – Dinosaurius

+0

從文件系統中讀取文件一定會更好。 HTTP規範不適合大文件傳輸。 'GetFile'或'ListFile' /'FetchFile'會給你更好的性能,然後你可以輕鬆地解析文件的行。 – Andy