在写入时使用 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的主要内容,如果未能解决你的问题,请参考以下文章