仅当HDFS中有文件时,我才能执行命令

时间:2019-07-25 11:05:23

标签: database hadoop hive hdfs apache-nifi

我正在Ambari的HDP速成箱中使用NiFi和Hive。

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

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

我不知道该怎么办。

非常感谢您!

1 个答案:

答案 0 :(得分:1)

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

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

然后使用 ReplaceText 处理器

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

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

流量:

1.ListHDFS
2.ReplaceText
3.PutHiveQL