Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 可以让Nifi放入多个HDFS文件夹吗?_Hadoop_Hdfs_Apache Nifi - Fatal编程技术网

Hadoop 可以让Nifi放入多个HDFS文件夹吗?

Hadoop 可以让Nifi放入多个HDFS文件夹吗?,hadoop,hdfs,apache-nifi,Hadoop,Hdfs,Apache Nifi,我需要将一组json文件流式传输到Nifi,然后再传输到HDFS。Nifi需要查看json文件中的创建日期(UNIX格式),然后将其路由到相应的HDFS文件夹。到目前为止,我的处理器设置如下: 使用Kafka->RouteOnContent(使用regex^“creationDate”:\“[0-9]{4}-[0-9]{2}-[0-9]{2}$)->PutHDFS 每天都有一个HDFS文件夹,如“2019-01-28”、“2019-01-29”、“2019-01-30”等。但是,“PutHDFS

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

使用Kafka->RouteOnContent(使用regex^“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文件夹的方法,所以有没有一种优雅的方法来处理这个问题?

PutHDFS
处理器中有一个参数
目录

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

因此,您可以对该参数使用类似于
${creationDate}
的表达式

PutHDFS
处理器中有一个参数
目录

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


因此,您可以对该参数使用类似于
${creationDate}
的表达式,而不是RouteOnContent,您可以使用EvaluateJsonPath将creationDate提取到流文件属性中,然后在PutHDFS中创建目录,如“/data/${creationDate}”,多亏了你们两位,我想知道如何将其放入流文件属性中。我对Nifi表达式语言了解不多,但我会尝试一下。因此,如果我想更好地了解如何使用Nifi表达式语言,我应该在这里提问还是开始一个新问题?我想这将是另一个主题。所以最好问一个新的。来自@dagget的响应使用NiFi表达式语言,这是最简单的方法,也许你没有完全理解他解释的内容。你可以使用EvaluateJsonPath将creationDate提取到流文件属性中,然后在PutHDFS中创建目录,如“/data/${creationDate}”好的,多亏了你们两位,我想知道如何将其放入流文件属性中。我对Nifi表达式语言了解不多,但我会尝试一下。因此,如果我想更好地了解如何使用Nifi表达式语言,我应该在这里提问还是开始一个新问题?我想这将是另一个主题。所以最好问一个新的问题。@dagget的回答使用NiFi表达语言,这是最简单的方式,也许你没有完全理解他解释的内容。