我有像nifi流(独立)
executestreamprocessor(hive script) -> executestreamprocessor(hadoop script).
对于每个传入的流文件,hive脚本使用命令INSERT..INTO..SELECT..FROM运行,hadoop脚本从存储区域删除特定文件。
有时,当hadoop脚本同时运行命令时,hive脚本会失败。
我每小时最多可获得4个文件。所以我计划在蜂巢和hadoop处理器之间使用控制处理器。我在队列计数达到4个flowfile时设置条件,然后执行hadoop脚本。但是,controlrate具有仅为最大速率设置的属性。它没有最低费率。
有没有可能实现的解决方案?或任何其他解决方案?
答案 0 :(得分:2)
您应该可以使用ExecuteScript来试试这个Groovy脚本:
def flowFiles = session.get(4)
if(!flowFiles || flowFiles.size() < 4) {
session.rollback()
} else {
session.transfer(flowFiles, REL_SUCCESS)
}
如果您只想触发下游流程一次,那么您可以从父项创建子流文件(并报告JOIN来源事件):
def flowFiles = session.get(4)
if(!flowFiles || flowFiles.size() < 4) {
session.rollback()
} else {
def flowFile = session.create(flowFiles)
session.provenanceReporter.join(flowFiles, flowFile)
session.remove(flowFiles)
session.transfer(flowFile, REL_SUCCESS)
}
话虽如此,如果您不关心流文件内容(即您使用流文件作为触发器),您可以使用MergeContent,其最小和最大条目数= 4。