我正在寻找一种将整个日志文件从边缘节点流式传输到 Hadoop 的方法。总结用例:
- 我们的应用程序可以生成每个文件几 MB 到数百 MB 不等的日志文件。
- 我们不想流式传输所有发生的日志事件。
- 在日志文件完全写入后将其完整推送是我们正在寻找的(完全写入 = 例如移动到另一个文件夹中......这对我们来说不是问题)。
- 这应该由边缘节点上的某种轻量级代理直接处理到 HDFS,或者 - 如有必要 - 一个中间“接收器”,它将随后将数据推送到 HDFS。
- 集中式管道管理(=以集中方式配置所有边缘节点)会很棒
我得出了以下评价:
- Elastic 的 Logstash 和 FileBeats
- 可以使用边缘节点的集中式管道管理,例如所有边缘节点的集中配置(需要许可证)
- 配置很简单,Logstash 存在 WebHDFS 输出接收器(使用 FileBeats 需要使用 FileBeats + Logstash 的中间解决方案,输出到 WebHDFS)
- 这两种工具都被证明在生产级环境中是稳定的
- 这两种工具都是为了跟踪日志并在这些事件发生时流式传输,而不是提取完整的文件
- 带 MiNiFi 的 Apache NiFi
- 收集日志并将整个文件发送到另一个位置的用例,该位置具有大量运行相同“作业”的边缘节点,看起来注定要用于 NiFi 和 MiNiFi
- 运行在边缘节点上的MiNiFi是轻量级的(而Logstash则没有那么轻量级)
- 日志可以从 MiNiFi 代理流式传输到 NiFi 集群,然后摄取到 HDFS 中
- NiFi 用户界面中的集中管道管理
- 写入 HDFS sink 是开箱即用的
- 社区看起来很活跃,开发由 Hortonworks 领导(?)
- 过去我们在 NiFi 方面取得了很好的经验
- Apache 水槽
- 写入 HDFS sink 是开箱即用的
- 看起来 Flume 更像是一个基于事件的解决方案,而不是一个流式传输整个日志文件的解决方案
- 没有集中的管道管理?
- Apache 地精
- 写入 HDFS sink 是开箱即用的
- 没有集中的管道管理?
- 没有轻量级边缘节点“代理”?
- 流利
- 也许可以看看另一个工具?正在寻找您对此的评论...
我很乐意就选择哪个选项获得一些评论。 NiFi/MiNiFi 选项在我看来是最有前途的 - 而且也可以免费使用。
我是否忘记了能够解决此用例的任何广泛使用的工具?
最佳答案
在选择开源大数据解决方案时,我也经历过类似的痛苦,只是通向罗马的道路太多了。尽管“寻求技术建议不是 Stackoverflow 的主题”,但我仍然想分享我的意见。
我假设您已经有一个 hadoop 集群来存放日志文件。如果您使用的是企业就绪发行版,例如HDP 分发,与他们选择的数据摄取解决方案保持一致。这种方法总能为您节省大量安装、设置中心管理和监控、在有新版本时实现安全性和系统集成方面的工作。
您没有提到一旦日志文件进入 HDFS 后您希望如何使用它们。我假设您只想制作一个精确的副本,即在数据摄取中不需要数据清理或数据转换为规范化格式。现在我想知道为什么你没有提到最简单的方法,使用预定的 hdfs 命令将日志文件从边缘节点放入 hdfs?
现在我可以分享我参与的一个生产设置。在这个生产设置中,日志文件被推送到商业中介系统或由商业中介系统拉取,该系统进行数据清理、规范化、丰富等。数据量每天超过 1000 亿条日志记录。在负载均衡器后面设置了 6 个边缘节点。日志首先登陆其中一个边缘节点,然后将 hdfs 命令放到 HDFS 上。最初使用Flume,但由于性能问题被这种方法取代。(很可能是工程师缺乏优化Flume的经验)。值得一提的是,中介系统有一个用于安排摄取脚本的管理 UI。在您的情况下,我将从 PoC 的 cron 作业开始,然后使用例如气流。
希望对您有所帮助!很高兴知道您的最终选择和实现。
关于hadoop - 将日志文件从边缘节点提取到 Hadoop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50858534/