如何一对一传输csv文件

nvbavucw  于 2021-06-04  发布在  Flume
关注(0)|答案(2)|浏览(280)

我得到的最接近的结果是,源中的每一行数据(即多个文件)都只写入接收器端的一个文件。我在源端使用“spooldir”,在汇端使用“file\u roll”。我该如何改进这一点,以便用相同的文件名一对一地复制文件?

nqwrtyyt

nqwrtyyt1#

您可以使用假脱机目录作为http://flume.apache.org/flumeuserguide.html#spooling-目录源并在conf文件中将roll size设置为0,如下所示:

agent.sinks.hdfsSink.hdfs.rollSize = 0

以下是我从flume文档中摘录的内容:
hdfs.rollsize 1024触发滚动的文件大小,以字节为单位(0:根据文件大小从不滚动)

dw1jzc5e

dw1jzc5e2#

可以使用blob反序列化程序将完整文件作为事件传输。它适用于小文件。
例如,如果spool目录中有10000个10kb的文件。它将一次性挑选100个文件(根据spool dir的默认批处理大小)并将其传输到hdfs(如果您使用的是hdfs接收器)。您还可以在hdfs中验证文件计数。较大的文件大小可能导致通道已满异常或内存不足错误。
要实现这一点,您只需要将下面的属性添加到flume源conf文件中-

agent-name.sources.spool-dir.deserializer = org.apache.flume.sink.solr.morphline.BlobDeserializer$Builder

相关问题