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

标签 database hadoop hive hdfs apache-nifi

我在 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/

相关文章:

java - MapReduce Apache Hadoop 技术

hadoop - 如何在Hive中将一天的数据填充到整周

apache-spark - SPARK 1.6 插入现有 Hive 表(未分区)

database - 多个微服务和数据库关联

mysql - 使用单个父数据库进行跨数据库 UID 管理?

hadoop - hadoop map reduce中分组比较器有什么用

bash - 在 bash 脚本中读取 Hadoop DFS 数据

hadoop - Tableau 可以连接 apache hadoop 吗?或者它应该只与主要的 hadoop 发行版一起使用?

php - PHP 中的简单 SQL 查询

sql - 将事务存储到 NoSQL 数据库中