2017-10-19 47 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