Flume Hadoop中的数据传输



  • 大数据

    大数据,因为我们知道,是不能用传统的计算技术来处理大型数据集的集合。大数据经过分析,可以提供有价值的结果。Hadoop是一个开放源代码框架,允许使用简单的编程模型在跨计算机集群的分布式环境中存储和处理大数据。
  • 流/日志数据

    通常,将要分析的大多数数据将由各种数据源生成,例如应用程序服务器,社交网站,云服务器和企业服务器。这些数据将采用日志文件和事件的形式。
    日志文件 - 通常,日志文件是列出操作系统中发生的事件/动作的文件。例如,Web服务器在日志文件中列出对服务器的所有请求。
    在收集此类日志数据时,我们可以获得有关以下信息:
    • 应用程序性能并查找各种软件和硬件故障。
    • 用户行为并获得更好的业务见解,做出更好的策略。
    将数据传输到HDFS系统的传统方法是使用put命令。让我们看看如何使用put命令。
  • HDFS put 命令

    处理日志数据的主要挑战是将由多台服务器生成的这些日志移至Hadoop环境。
    Hadoop File System Shell提供将数据插入Hadoop并从中读取数据的命令。您可以使用put命令将数据插入Hadoop ,如下所示。
    
    $ hadoop fs –put /所需文件的路径  /存放文件的HDFS路径
    
    put命令的问题
    我们可以使用Hadoop的put命令将数据从这些源传输到HDFS。但是,它具有以下缺点-
    • 使用put命令,一次只能传输一个文件,而数据生成器以更高的速率生成数据。由于对较旧数据的分析准确性较差,因此我们需要一种解决方案来实时传输数据。
    • 如果我们使用put命令,则需要打包数据,并且应准备好上传。由于网络服务器不断生成数据,因此这是一项非常困难的任务。
    我们在这里需要的是一种解决方案,它可以克服put命令的弊端,并将“流数据”从数据生成器传输到集中存储(尤其是HDFS),并且延迟更少。
    HDFS问题
    在HDFS中,该文件作为目录条目存在,并且在关闭之前,文件的长度将被视为零。例如,如果源正在将数据写入HDFS,并且网络在操作过程中被中断(没有关闭文件),则写入文件的数据将丢失。
    因此,我们需要一个可靠,可配置和可维护的系统来将日志数据传输到HDFS中。
    注 – 在POSIX文件系统中,无论何时我们访问文件(例如执行写操作),其他程序仍可以读取该文件(至少是文件的已保存部分)。这是因为文件在关闭之前就存在于磁盘上。
  • 可用的解决方案

    要将各种来源的流数据(日志文件,事件等)发送到HDFS,我们可以使用以下工具:
    Facebook的Scribe
    Scribe是一种非常流行的工具,用于聚合和流式传输日志数据。它旨在扩展到非常多的节点,并且对于网络和节点故障具有高可用性。
    Kafka由Apache Software Foundation开发。它是一个开源消息代理。使用Kafka,我们可以处理高吞吐量和低延迟的Feed。
    Apache Flume
    Apache Flume是一种工具/服务/数据摄取机制,用于收集各种网络服务器的聚合流并将大量流数据(例如日志数据,事件(等))传输到一个集中的数据存储中。
    它是一种高度可靠,分布式和可配置的工具,主要用于将流数据从各种来源传输到HDFS。
    在本教程中,我们将通过一些示例详细讨论如何使用Flume。