Apache Flume - Hadoop 中的数据传输

正如我们所知,大数据是无法使用传统计算技术处理的大型数据集的集合。 大数据经过分析后会产生有价值的结果。 Hadoop 是一个开源框架,允许使用简单的编程模型在跨计算机集群的分布式环境中存储和处理大数据。

流式传输/日志数据

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

日志文件 − 一般来说,日志文件是一个列出操作系统中发生的事件/操作的文件。例如,Web 服务器会在日志文件中列出向服务器发出的每个请求。

在收集此类日志数据时,我们可以获得以下信息 −

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

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

HDFS put 命令

处理日志数据的主要挑战是将多个服务器生成的这些日志移动到 Hadoop 环境。

Hadoop 文件系统外壳 提供将数据插入 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命令,则需要将数据打包并准备好上传。 由于网络服务器不断生成数据,因此这是一项非常困难的任务。

我们需要的是一种解决方案,能够克服 put 命令的缺点,并将"流数据"从数据生成器传输到集中式存储(尤其是 HDFS),延迟更短。

HDFS 问题

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

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

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

可用解决方案

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

Facebook’s Scribe

Scribe 是一种非常流行的工具,用于聚合和流式传输日志数据。 它旨在扩展到大量节点,并且对网络和节点故障具有鲁棒性。

Apache Kafka

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

Apache Flume

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

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

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