我得到的最接近的是来自源(即多个文件)的每一行数据都只写入接收器端的一个文件。我使用" spooldir"在源端," file_roll"在水槽边。如何改进这个以一对一的方式复制文件,文件名相同?
答案 0 :(得分:0)
您可以将假脱机目录用作http://flume.apache.org/FlumeUserGuide.html#spooling-directory-source并在conf文件中将卷大小设置为0:
agent.sinks.hdfsSink.hdfs.rollSize = 0
这是我从Flume文档中提取的内容:
hdfs.rollSize 1024触发滚动的文件大小,以字节为单位(0:永不基于文件大小滚动)
答案 1 :(得分:0)
您可以使用BLOB反序列化器将完整文件转换为事件。它适用于小文件。
例如,如果您的假脱机目录中有10000个10kb的文件。它会一次性选择100个文件(根据线轴目录的默认批量大小)并将其传输到HDFS(如果您使用的是HDFS接收器)。您还可以验证HDFS中的文件计数。较大的文件大小可能导致通道完全异常或内存不足错误。
要实现这一点,您只需将以下属性添加到您的水槽源文件 -
agent-name.sources.spool-dir.deserializer = org.apache.flume.sink.solr.morphline.BlobDeserializer$Builder