Apache Flume 简明教程

Apache Flume - Data Transfer In Hadoop

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

Streaming / Log Data

一般而言,要分析的大部分数据都是由各种数据源(如应用程序服务器、社交网站、云服务器和企业服务器)产生的。这些数据将采用 log filesevents 的形式。

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

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

  1. 应用程序性能,以及找到各种软件和硬件故障。

  2. 用户行为,以及得出更好的业务见解。

将数据导入 HDFS 系统的传统方法是使用 put 命令。我们来看看如何使用 put 命令。

HDFS put Command

处理日志数据的主要挑战在于将多台服务器产生的这些日志移到 Hadoop 环境中。

Hadoop File System Shell 提供了将数据插入到 Hadoop 并从中读取数据的命令。您可以使用 put 命令将数据插入到 Hadoop 中,如下所示。

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

Problem with put Command

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

  1. 使用 put 命令时,我们可以在数据生成器生成数据时以更高的速率传输 only one file at a time 。由于对较旧数据进行的分析不够准确,因此我们需要一个实时传输数据的解决方案。

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

我们在这里需要一个解决方案,该解决方案可以克服 put 命令的缺点,并且可以将数据生成器中的“流式数据”传输到集中存储(尤其是 HDFS)中,且延迟较低。

Problem with HDFS

在 HDFS 中,文件以目录项的形式存在,并且在关闭文件之前,文件的长度将被视为零。例如,如果某个源正在向 HDFS 中写入数据,并且网络在操作期间中断(而没有关闭文件),那么写入该文件的数据将丢失。

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

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

Available Solutions

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

Facebook’s Scribe

Scribe 是一种非常受欢迎的工具,用于聚合和流式传输日志数据。它的设计可以扩展到极大量的节点,并且对于网络和节点故障具有鲁棒性。

Apache Kafka

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

Apache Flume

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

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

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