Nifi:需要在“合并内容”处理器上进行说明

时间:2019-06-01 14:57:53

标签: csv merge apache-nifi

因为我不认为这是我的主管认为的那样。

我们从FTP接收了大约8个csv文件,这些文件很小(不到1MB)。他(我认为是正确的)担心HDFS上的群集大小将被浪费。因此,他想使用“合并内容”处理器来解决此问题。他似乎相信合并内容处理器将“整理”具有相同名称的文件,从而使单个文件更大。

要澄清一下:他希望它的工作方式是,如果今天的“ sales_report.csv”进来并且目录中已经存在“ sales_report.csv”,他希望将今天的“ sales_report.csv”中的新数据保存到作为新行添加到现有文件中。我希望这是有道理的。

相反,我得到的结果截然不同。我已设置好流程,以便它从FTP提取文件,根据文件夹在HDFS上创建目录,然后根据年份创建子文件夹。当我不使用MC处理器时,这一切都可以正常工作。当我将MC处理器放入计算机时,会得到三个文件-其中一个具有其原始名称,其中两个具有一长串随机字符。我们正在使用“合并内容”处理器的默认设置。

根据我上面的描述,听起来我们正在寻找MC处理器吗?

1 个答案:

答案 0 :(得分:1)

MergeContent处理器通过将多个流文件组合到一个流文件中来工作。这与将新数据追加到存储在HDFS中的现有文件(经理想要的)不同。

要做到这一点,您有几种选择:

  1. 在没有MergeContent处理器的情况下保持当前流量; HDFS仍然会出现“小文件”问题。
  2. 对HDFS使用类似SQL的界面,例如Hive(以及可选的HBasewhy))。然后,您可以使用新数据(今天的 sales_report.csv ),并将该文件中的行视为NiFi records,并将其保留在适当的Hive表中(有效地完成 append 操作)。
  3. 从HDFS检索现有的 sales_report.csv ,使用MergeContent将内容与新内容合并,然后将新合并的内容保留回HDFS。这是相当浪费的操作,不建议这样做。 (请参见艾伦·盖茨的Pig and Hive at Yahoo!中的迭代处理)。

您选择哪种选择取决于您的特定要求:

  • 是否需要将数据存储在HDFS的相同文件中,还是只可以在同一目录中访问?
  • 是否需要以原始CSV文件格式存储数据,或者可以接受表格存储?
  • HDFS中存储的“现有”数据与新传入的数据有多大?