我得到的最接近的结果是,源中的每一行数据(即多个文件)都只写入接收器端的一个文件。我在源端使用“spooldir”,在汇端使用“file\u roll”。我该如何改进这一点,以便用相同的文件名一对一地复制文件?
nqwrtyyt1#
您可以使用假脱机目录作为http://flume.apache.org/flumeuserguide.html#spooling-目录源并在conf文件中将roll size设置为0,如下所示:
agent.sinks.hdfsSink.hdfs.rollSize = 0
以下是我从flume文档中摘录的内容:hdfs.rollsize 1024触发滚动的文件大小,以字节为单位(0:根据文件大小从不滚动)
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
2条答案
按热度按时间nqwrtyyt1#
您可以使用假脱机目录作为http://flume.apache.org/flumeuserguide.html#spooling-目录源并在conf文件中将roll size设置为0,如下所示:
以下是我从flume文档中摘录的内容:
hdfs.rollsize 1024触发滚动的文件大小,以字节为单位(0:根据文件大小从不滚动)
dw1jzc5e2#
可以使用blob反序列化程序将完整文件作为事件传输。它适用于小文件。
例如,如果spool目录中有10000个10kb的文件。它将一次性挑选100个文件(根据spool dir的默认批处理大小)并将其传输到hdfs(如果您使用的是hdfs接收器)。您还可以在hdfs中验证文件计数。较大的文件大小可能导致通道已满异常或内存不足错误。
要实现这一点,您只需要将下面的属性添加到flume源conf文件中-