如何仅当 hdfs 中有文件时才执行命令

How can i execute a command only when there are files in hdfs

我在 Ambari 的 HDP snadbox 中使用 NiFi 和 Hive。

我有一个 NiFi 流,我将修改后的文件上传到 hdfs,然后使用 generateflowfile,我将查询 load data inpath 'hdfs/path/' into table tablename 传递给 puthiveql 处理器。

效果很好,但我只想在 'hdfs/path' 指定的路径中有文件时才这样做,因为当命令 load inpath 执行时,hdfs 目录会清空。

我不知道我该怎么做。

非常感谢!!

使用 ListHDFS 处理器并将处理器配置为 运行 频繁(例如每分钟..等),目录 属性 值。

  • 此处理器存储状态并递增 运行s,并且仅在目录中检测到新添加的文件时才输出流文件。

然后使用ReplaceText处理器

  • 替换策略为AlwaysReplace
  • 替换值为 load data inpath '${path}/${filename}' into table tablename

然后连接成功关系到PutHiveQL处理器执行加载数据命令。

流量:

1.ListHDFS
2.ReplaceText
3.PutHiveQL