Apache Flume - Hadoop 中的数据传输



大数据,众所周知,是包含大量数据集的集合,这些数据集无法使用传统的计算技术进行处理。大数据经过分析后,可以得出有价值的结果。Hadoop 是一个开源框架,它允许使用简单的编程模型在计算机集群的分布式环境中存储和处理大数据。

流式/日志数据

通常,大多数要分析的数据将由各种数据源生成,例如应用程序服务器、社交网络站点、云服务器和企业服务器。这些数据将以日志文件事件的形式存在。

日志文件 - 通常,日志文件是列出操作系统中发生的事件/操作的文件。例如,Web 服务器会在日志文件中列出对服务器发出的每个请求。

在收集此类日志数据后,我们可以获取有关以下方面的信息:-

  • 应用程序性能并定位各种软件和硬件故障。
  • 用户行为并获得更好的业务洞察力。

将数据传输到 HDFS 系统的传统方法是使用put命令。让我们看看如何使用put命令。

HDFS put 命令

处理日志数据的最大挑战在于将这些由多个服务器生成的日志移动到 Hadoop 环境中。

Hadoop文件系统 Shell提供命令将数据插入 Hadoop 并从中读取数据。您可以使用如下所示的put命令将数据插入 Hadoop。

$ Hadoop fs –put /path of the required file  /path in HDFS where to save the file 

put 命令的问题

我们可以使用 Hadoop 的put命令将数据从这些源传输到 HDFS。但是,它存在以下缺点:-

  • 使用put命令,我们一次只能传输一个文件,而数据生成器生成数据的速度要快得多。由于对旧数据的分析准确性较低,因此我们需要一个解决方案来实时传输数据。

  • 如果我们使用put命令,则需要打包数据并准备好上传。由于 Web 服务器会持续生成数据,因此这是一项非常困难的任务。

我们需要的是一个能够克服put命令缺点的解决方案,并能够以更少的延迟将“流数据”从数据生成器传输到集中存储(特别是 HDFS)。

HDFS 的问题

在 HDFS 中,文件作为目录条目存在,并且在关闭文件之前,文件长度将被视为零。例如,如果某个源正在将数据写入 HDFS 并且操作过程中网络中断(未关闭文件),则写入文件中的数据将丢失。

因此,我们需要一个可靠、可配置且可维护的系统来将日志数据传输到 HDFS。

注意 - 在 POSIX 文件系统中,每当我们访问文件(例如执行写入操作)时,其他程序仍然可以读取此文件(至少可以读取文件的已保存部分)。这是因为文件在关闭之前就已存在于磁盘上。

可用解决方案

为了将流数据(日志文件、事件等)从各种来源发送到 HDFS,我们有以下工具可以使用:-

Facebook 的 Scribe

Scribe 是一款非常流行的工具,用于聚合和流式传输日志数据。它旨在扩展到大量节点,并能够抵抗网络和节点故障。

Apache Kafka

Kafka 由 Apache 软件基金会开发。它是一个开源消息代理。使用 Kafka,我们可以处理具有高吞吐量和低延迟的馈送。

Apache Flume

Apache Flume 是一种用于收集、聚合和传输大量流式数据的工具/服务/数据摄取机制,例如来自各种 Web 服务器的日志数据、事件(等)到集中式数据存储中。

它是一个高度可靠、分布式且可配置的工具,主要用于将流式数据从各种来源传输到 HDFS。

在本教程中,我们将详细讨论如何使用 Flume 以及一些示例。

广告

© . All rights reserved.