Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache nifi 流文件卡在队列中(Apache NiFi)_Apache Nifi - Fatal编程技术网

Apache nifi 流文件卡在队列中(Apache NiFi)

Apache nifi 流文件卡在队列中(Apache NiFi),apache-nifi,Apache Nifi,我有以下的流程: ListFTP->RouteOnAttribute->FetchFTP->unpacontent->ExecuteScript 一些文件卡在队列UnpackContent->ExecuteScript中 ExecuteScript吃了一些流文件,它们就消失了:failure和success关系为空。它只是显示了任务/时间字段中的一些活动。他们都在ExecuteScript前面排队。我试图清空队列,但并不是所有的流文件都已从此队列中删除。大约三分之一的人仍在排队。我试图禁用所有处

我有以下的流程:

ListFTP->RouteOnAttribute->FetchFTP->unpacontent->ExecuteScript

一些文件卡在队列
UnpackContent->ExecuteScript

ExecuteScript
吃了一些流文件,它们就消失了:
failure
success
关系为空。它只是显示了
任务/时间
字段中的一些活动。他们都在
ExecuteScript
前面排队。我试图清空队列,但并不是所有的流文件都已从此队列中删除。大约三分之一的人仍在排队。我试图禁用所有处理器并再次清空队列,但它返回:
0个流文件(0字节)已从队列中删除。

当我尝试更改连接目标时,它返回:

无法更改连接的目标,因为来自此连接的流文件当前由ExecuteScript[id=d33c9b73-0177-1000-5151-83b7b938de39]持有。

ExecuScript
(使用Python)

所以,我不能清空队列,因为它总是返回消息说并没有任何流文件,并且我不能删除连接。这已经持续了好几个小时了

连接配置:

调度设置为0秒,对流文件等没有惩罚

是脚本问题吗

更新

将脚本更改为:

flowFile = session.get() 
if (flowFile != None):
    # All processing code starts at this indent
    if errorOccurred:
        session.transfer(flowFile, REL_FAILURE)
    else:
        session.transfer(flowFile, REL_SUCCESS)
# implicit return at the end
同样的结果

更新v2

我将concurent tasks设置为50,然后再次运行
ExecuteScript
,并终止它。我得到了这个错误:

更新v3

我用同样的脚本创建了额外的ExecuteScript处理器,它工作得很好。但在我停止这个新处理器并创建新的流文件之后,这个处理器现在也有同样的问题:它只是卡住了


好笑。
ExecuteScript
是否一次性使用?

您需要修改nifi-1.13.2中的代码,因为nifi-8080导致了这些错误。或者只使用nifi 1.12.1

JythonScript引擎配置程序:

@覆盖
公共对象初始化(ScriptEngine引擎、字符串scriptBody、字符串[]ModulePath)引发ScriptException{
//总是在第一次运行时编译
如果(引擎!=null){
//为导入sys和所有jython模块添加前缀
prefix=“导入系统\n”
+Arrays.stream(modulePath).map((modulePath)->“sys.path.append(“+PyString.encode_unicodeScape(modulePath,true)+”)
.collect(收集器.加入(“\n”));
}
返回null;
}
@凌驾
公共对象评估(ScriptEngine引擎、字符串scriptBody、字符串[]ModulePath)引发ScriptException{
对象返回值=null;
如果(引擎!=null){
returnValue=((可编译)引擎).compile(前缀+脚本体).eval();
}
返回值;
}

听起来你的脚本还在处理文件,我想是出了问题。因为它已经处理了8个小时的文件。我用相同的脚本创建了额外的
ExecuteScript
处理器,它工作得很好。我真的不知道其他
ExecuteScript
处理器发生了什么。如何删除这些流文件。。。我甚至无法终止它,因为处理器中有0个流文件。您是否尝试过重启nifi这样明显的事情?我现在无法重启它,只能在晚上重启,因为我们有许多(现在)正在工作的其他处理器。