【问题标题】:Is it possible to get Nifi to Put to multiple HDFS folders?是否可以让 Nifi 放入多个 HDFS 文件夹?
【发布时间】:2019-01-28 21:20:53
【问题描述】:

我需要将一堆 json 文件流式传输到 Nifi,然后将其转到 HDFS。 Nifi 需要查看 json 文件中的创建日期(UNIX 格式),然后将其路由到相应的 HDFS 文件夹。到目前为止,我的处理器设置如下:

使用 Kafka -> RouteOnContent (使用正则表达式 ^"creationDate": \"[0-9]{4}-[0-9]{2}-[0-9]{2}$) -> PutHDFS

每天都有一个 HDFS 文件夹,例如“2019-01-28”、“2019-01-29”、“2019-01-30”等。但是,“PutHDFS”处理器只会输出到单个目录,我显然不想拥有 365 个处理器。据我所知,Nifi 没有办法动态创建 HDFS 文件夹,那么有没有一种优雅的方法来处理这个问题?

【问题讨论】:

    标签: hadoop hdfs apache-nifi


    【解决方案1】:

    https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-hadoop-nar/1.8.0/org.apache.nifi.processors.hadoop.PutHDFS/index.html

    在PutHDFS处理器中有一个参数Directory:

    应该写入文件的父 HDFS 目录。如果目录不存在,将创建该目录。 支持表达式语言:true(将使用流文件属性和变量注册表进行评估)

    所以你可以对这个参数使用${creationDate}这样的表达式

    【讨论】:

    • 您可以使用 EvaluateJsonPath 将 creationDate 提取到流文件属性中,而不是使用 RouteOnContent,然后在 PutHDFS 中创建您的目录,如“/data/${creationDate}”
    • 好的,谢谢你们,我想知道如何将其放入流文件属性中。 Nifi表达语言我不太了解,但我会试一试。
    • 那么如果我想更好地了解如何在 Nifi 表达语言中做到这一点,我应该在这里提问还是开始一个新问题?
    • 我想这将是另一个主题。所以最好问一个新的。
    • @dagget 的回复使用 NiFi 表达语言,是最简单的方法,可能你没有完全理解他的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2011-09-17
    • 2013-09-06
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多