在写入时使用 Flume 将日志文件摄取到 HDFS

Posted

技术标签:

【中文标题】在写入时使用 Flume 将日志文件摄取到 HDFS【英文标题】:Ingesting a log file into HDFS using Flume while it is being written 【发布时间】:2015-09-21 21:16:38 【问题描述】:

在写入日志文件时将其引入 HDFS 的最佳方法是什么?我正在尝试配置 Apache Flume,并尝试配置可以为我提供数据可靠性的源。我试图配置“exec”,后来还查看了“spooldir”,但是 flume.apache.org 上的以下文档对我自己的意图产生了怀疑-

执行来源:

最常要求的功能之一是用例,例如 - "tail -F file_name" 应用程序写入磁盘上的日志文件并 Flume 尾随文件,将每一行作为事件发送。虽然这是 可能,有一个明显的问题;如果通道会发生什么 填满并且 Flume 无法发送事件? Flume 无法指示 写日志文件的应用程序,它需要保留 记录或由于某种原因未发送事件。您的 应用程序永远不能保证在使用 ExecSource等单向异步接口!

假脱机目录来源:

与 Exec 源不同,“spooldir”源是可靠的,不会 丢失数据,即使 Flume 重新启动或被杀死。以此换取 可靠性,只有不可变的文件必须放入假脱机 目录。如果文件在放入 spooling 目录,Flume 将在其日志文件中打印错误并停止 处理。

有什么更好的东西可以用来确保 Flume 不会错过任何事件并实时读取吗?

【问题讨论】:

【参考方案1】:

我建议使用假脱机目录源,因为它很可靠。不变性要求的一种解决方法是将文件组合到第二个目录中,一旦它们达到一定大小(以字节或日志量计),将它们移动到假脱机目录。

【讨论】:

当然,但它不是在写的时候(它有点离线)。 在这种情况下,Exec Source 是您唯一的机会。嗯,不仅如此。您可以创建一个自定义源来满足您的需求,一个“Exec Source 2”能够与写入日志的应用程序通信(可能通过另一个未处理日志的文件写入)......只是头脑风暴;)

以上是关于在写入时使用 Flume 将日志文件摄取到 HDFS的主要内容,如果未能解决你的问题,请参考以下文章

在 fortran 中将写入附加到 hdf5 文件

从 python 脚本将日志摄取到 bigquery

通过 Apache Flume 将日志文件从本地文件系统移动到 HDFS 时出错

flume抽取日志为啥没写到hdfs中

如何将自定义类型的列表/数组写入 HDF5 文件?

将浮点数组写入和附加到 C++ 中 hdf5 文件中的唯一数据集