hadoop - 将日志文件从边缘节点提取到 Hadoop

标签 hadoop bigdata logstash apache-nifi flume

我正在寻找一种将整个日志文件从边缘节点流式传输到 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 的主题”,但我仍然想分享我的意见。

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

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

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

希望对您有所帮助!很高兴知道您的最终选择和实现。

关于hadoop - 将日志文件从边缘节点提取到 Hadoop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50858534/

相关文章:

python - 如何使用大小为 m 的滑动窗口将 numpy 数组划分为 n 个子数组?

Hadoop :Approach to load Local xml files from Share location to Hive

windows - 在 Windows7 中从 c# 代码执行时 Hadoop 命令不工作,错误显示 : "Access is denied"

hadoop - 我想使用Hadoop Pig Latin从XML输入中提取特定信息

hadoop - 租约不匹配 LeaseExpiredException

java - MapReduce Hadoop StringTokenizer 获取 NoSuchElementException

sql - 如何找到最新的分区值

jdbc - 使用 logstash 将数据从 MySQL 索引到 ElasticSearch 时,它显示 Java heapspace 错误

Jira 的 Logstash Shipper 配置

mongodb - Logstash + MongoDB Atlas 输出 : Failed to handshake with xxx. gcp.mongodb.net :27017: ArgumentError: wrong number of arguments (given 2, 预期 1)