我在 Ambari 的 HDP snadbox 中使用 NiFi 和 Hive。
我有一个 NiFi 流,我将修改后的文件上传到 hdfs,然后使用 generateflowfile,我将查询 load data inpath 'hdfs/path/' into table tablename
传递给 puthiveql 处理器。
效果很好,但我只想在“hdfs/path”指定的路径中有文件时这样做,因为当命令 load inpath
执行时,hdfs 目录会清空。
我不知道我该怎么做。
非常感谢!
最佳答案
使用 ListHDFS
处理器并将处理器配置为频繁运行(例如每分钟..等),Directory 属性值。
- 该处理器存储状态并增量运行,只有在目录中检测到新添加的文件时才输出流文件。
然后使用ReplaceText
处理器
- 替换策略为
AlwaysReplace
- 替换值作为
load data inpath '${path}/${filename}' into table tablename
然后将成功关系连接到PutHiveQL
处理器执行加载数据命令。
流量:
1.ListHDFS
2.ReplaceText
3.PutHiveQL
关于database - 如何仅当 hdfs 中有文件时才执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57200509/