将日志文件从边缘节点摄取到 Hadoop

j9d*_*9dy 5 hadoop bigdata flume logstash apache-nifi

我正在寻找一种将整个日志文件从边缘节点流式传输到 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 UI 中的集中式管道管理
    • 写入 HDFS sink 是开箱即用的
    • 社区看起来很活跃,开发由 Hortonworks (?)
    • 我们过去在 NiFi 方面有很好的经验
  • 阿帕奇水槽
    • 写入 HDFS sink 是开箱即用的
    • 看起来 Flume 更像是基于事件的解决方案,而不是流式传输整个日志文件的解决方案
    • 没有集中的管道管理?
  • 阿帕奇地精
    • 写入 HDFS sink 是开箱即用的
    • 没有集中的管道管理?
    • 没有轻量级边缘节点“代理”?
  • 流利的
    • 也许另一个工具可以查看?正在寻找您对此的评论...

我很想得到一些关于选择哪些选项的评论。NiFi/MiNiFi 选项对我来说看起来最有前途 - 并且可以免费使用。

我是否忘记了任何能够解决此用例的广泛使用的工具?

小智 1

我在选择开源大数据解决方案时也经历过类似的痛苦,只是通往罗马的道路有很多。虽然“寻求技术建议已经不是 Stackoverflow 的主题了”,但我还是想分享一下我的观点。

  1. 我假设您已经有一个 hadoop 集群来存放日志文件。如果您使用的是企业就绪的发行版,例如 HDP 发行版,请继续选择他们选择的数据摄取解决方案。这种方法总是可以节省您在安装、设置中心管理和监控、在有新版本时实施安全和系统集成方面的大量精力。

  2. 您没有提到日志文件到达 HDFS 后您希望如何使用它们。我假设您只想制作精确的副本,即数据摄取中不需要数据清理或数据转换为规范化格式。现在我想知道为什么你没有提到最简单的方法,使用预定的 hdfs 命令将日志文件从边缘节点放入 hdfs 中?

  3. 现在我可以分享我参与的一项制作设置。在此生产设置中,日志文件由商业中介系统推送或拉取,该系统进行数据清理、规范化、丰富等。每天的数据量超过 1000 亿条日志记录。负载均衡器后面设置了 6 个边缘节点。日志首先落在其中一个边缘节点上,然后将 hdfs 命令放入 HDFS。Flume最初使用,但由于性能问题而被这种方法取代。(很可能是工程师缺乏优化Flume的经验)。不过值得一提的是,中介系统有一个用于调度摄取脚本的管理 UI。在你的例子中,我会从 PoC 的 cron 作业开始,然后使用 Airflow 等。

希望能帮助到你!并且很高兴知道您的最终选择和实施。