0

设想

来自 windows 的名为 test_csv.csv 的 CSV 数据。将 CSV 数据摄取到 hdfs。Beats > (ListenBeats) NiFi (PutHDFS) > HDFS

数据样本:

a,b,c,d,e
a1,b1,c1,d1,e1
a2,b2,c2,d2,e2
a3,b3,c3,d3,e3
a4,b4,c4,d4,e4
a5,b5,c5,d5,e5
a6,b6,c6,d6,e6
a7,b7,c7,d7,e7
a8,b8,c8,d8,e8

根据 Nifi Flow UI,它工作正常并成功写入 hdfs。问题是

hadoop@ambari:~$ hdfs dfs -ls /user/nifi/test
Found 9 items
-rw-r--r--   3 nifi hdfs        480 2020-07-06 14:30 /user/nifi/test/0192a8bb-67ec-462e-a602-62a5425afc99
-rw-r--r--   3 nifi hdfs        480 2020-07-06 14:30 /user/nifi/test/0211ec05-fc62-4b82-87e5-a2e20a9fb07e
-rw-r--r--   3 nifi hdfs        481 2020-07-06 14:30 /user/nifi/test/1e227df9-f49f-46d6-a309-25e466fa14cf
-rw-r--r--   3 nifi hdfs        480 2020-07-06 14:30 /user/nifi/test/324a0c0e-e190-4239-b594-edbf9fcab0d6
-rw-r--r--   3 nifi hdfs        474 2020-07-06 14:30 /user/nifi/test/3d34827b-6bae-4c21-981e-9722b7a6703e
-rw-r--r--   3 nifi hdfs        481 2020-07-06 14:30 /user/nifi/test/6873c51b-a93b-4872-b33c-0e59b85afcd5
-rw-r--r--   3 nifi hdfs        480 2020-07-06 14:30 /user/nifi/test/98606d6b-2206-4b2e-8204-8363a87f41d0
-rw-r--r--   3 nifi hdfs        480 2020-07-06 14:30 /user/nifi/test/f25e56b5-88d7-4135-b475-213e4e54b47f
-rw-r--r--   3 nifi hdfs        480 2020-07-06 14:30 /user/nifi/test/f354f587-8da2-418f-be0d-34e8a79d7d39

我试图将PutHDFS目录更改为 /user/nifi/test.csv 它返回

hadoop@ambari:~$ hdfs dfs -cat /user/nifi/test.csv
cat: `/user/nifi/test.csv': Is a directory
hadoop@ambari:~$ hdfs dfs -ls /user/nifi/test.csv
Found 9 items
-rw-r--r--   3 nifi hdfs        480 2020-07-06 14:35 /user/nifi/test.csv/02cdc89d-3cb9-494a-b7f5-d280d7b7c65e
-rw-r--r--   3 nifi hdfs        480 2020-07-06 14:35 /user/nifi/test.csv/2476906a-00d9-463a-89ef-ea885f823faa
-rw-r--r--   3 nifi hdfs        474 2020-07-06 14:35 /user/nifi/test.csv/5b9a9d7e-0c2f-428c-8af4-e875c6db1a04
-rw-r--r--   3 nifi hdfs        480 2020-07-06 14:35 /user/nifi/test.csv/66017da5-b55f-437b-a3cf-0a6b45d86ce8
-rw-r--r--   3 nifi hdfs        480 2020-07-06 14:35 /user/nifi/test.csv/7be93660-75a1-416b-b019-656d466813d6
-rw-r--r--   3 nifi hdfs        480 2020-07-06 14:35 /user/nifi/test.csv/98877296-126c-4ac9-9da5-cef62937e9f9
-rw-r--r--   3 nifi hdfs        481 2020-07-06 14:35 /user/nifi/test.csv/ac075d33-1137-4aea-9e5b-fc11097558eb
-rw-r--r--   3 nifi hdfs        480 2020-07-06 14:35 /user/nifi/test.csv/b9b44c08-1bc6-4e33-947b-daf265491181
-rw-r--r--   3 nifi hdfs        481 2020-07-06 14:35 /user/nifi/test.csv/ba6464db-ef64-4993-a070-80f1392eac1e

是否可以让 nifi 在单个目录文件中写入 hdfs?我期待它将在 hdfs 中创建 test.csv 文件

谢谢

4

1 回答 1

1

NiFi 中的每个流文件都有一个名为“文件名”的属性,这就是 PutHDFS 用作 HDFS 中的文件名的属性。PutHDFS 中的“Directory”属性仅用于目录,因此您只想放置“/user/nifi”。

为了更改文件名,您将在 PutHDFS 之前放置一个 UpdateAttribute 处理器,并设置 filename =whatever-you-want.csv

如果您将其设置为静态值,那么每次写入时都会有一个现有文件并发生冲突,要么替换,要么抛出错误。因此,您可能希望首先使用 MergeContent/MergeRecord 处理器将许多小的 CSV 条目批处理到一个更大的流文件中,然后创建一个动态文件名,例如:

文件名 = 测试-${now()}.csv

您可以使用不同的表达式,但可以使用唯一的表达式,例如时间戳、日期字符串或 UUID。

于 2020-07-06T19:29:37.880 回答