大象教程
首页
Spark
Hadoop
HDFS
MapReduce
Hive
Flume 教程
Flume 教程
#Flume 教程 Apache Flume 是一个分布式、高可靠、高可用的用来收集、聚合、转移不同来源的大量日志数据到中央数据仓库的工具。 Apache Flume是Apache软件基金会(ASF)的顶级项目。 ##系统要求 1. Java运行环境:Java 1.8或更高版本 2. 内存:足够的内存 用来配置Souuces、Channels和Sinks 3. 硬盘空间:足够的硬盘用来配置Channels 和 Sinks 4. 目录权限:Agent用来读写目录的权限 Flume版本|依赖的JRE版本 -|- Flume 1.9.0|Java1.8 或更高版本 Flume 1.8.0|Java1.8 或更高版本 Flume 1.7.0|Java1.7 或更高版本 Flume 1.4.0、1.5.0、1.5.2、1.6.0|Java1.6 或更高版本(建议使用1.7) ##体系结构 ###数据流模型 Event是Flume定义的一个数据流传输的最小单元。Agent就是一个Flume的实例,本质是一个JVM进程,该JVM进程控制Event数据流从外部日志生产者那里传输到目的地(或者是下一个Agent)。 Event英文直译是事件,但是在Flume里表示数据传输的一个最小单位(被Flume收集的一条条日志又或者一个个的二进制文件,不管你在外面叫什么,进入Flume之后它就叫event)。参照下图可以看得出Agent就是Flume的一个部署实例, 一个完整的Agent中包含了必须的三个组件Source、Channel和Sink,Source是指数据的来源和方式,Channel是一个数据的缓冲池,Sink定义了数据输出的方式和目的地(这三个组件是必须有的,另外还有很多可选的组件interceptor、channel selector、sink processor等后面会介绍)。 ![](/media/editor/file_1664517791000_20220930140311812996.png) Source消耗由外部(如Web服务器)传递给它的Event。外部以Flume Source识别的格式向Flume发送Event。例如,Avro Source 可接收从Avro客户端(或其他FlumeSink)接收Avro Event。用 Thrift Source 也可以实现类似的流程,接收的Event数据可以是任何语言编写的只要符合Thrift协议即可。 当Source接收Event时,它将其存储到一个或多个channel。该channel是一个被动存储器(或者说叫存储池),可以存储Event直到它被Sink消耗。『文件channel』就是一个例子 - 它由本地文件系统支持。sink从channel中移除Event并将其放入外部存储库(如HDFS,通过 Flume的 HDFS Sink 实现)或将其转发到流中下一个Flume Agent(下一跳)的Flume Source。 Agent中的source和sink与channel存取Event是异步的。 Flume的Source负责消费外部传递给它的数据(比如web服务器的日志)。外部的数据生产方以Flume Source识别的格式向Flume发送Event。 >提示 “Source消耗由外部传递给它的Event”,这句话听起来好像Flume只能被动接收Event,实际上Flume也有Source是主动收集Event的,比如:Spooling Directory Source 、Taildir Source 。 ###复杂流 Flume可以设置多级Agent连接的方式传输Event数据。也支持扇入和扇出的部署方式,类似于负载均衡方式或多点同时备份的方式。 >**提示**:这里必须解释一下,第一句的意思是可以部署多个Agent组成一个数据流的传输链。第二句要知道扇入(多对一)和扇出(一对多)的概念,就是说Agent可以将数据流发到多个下级Agent,也可以从多个Agent发到一个Agent中。 其实他们就是想告诉你,你可以根据自己的业务需求来任意组合传输日志的Agent流,引用一张后面章节的图,这就是一个扇入方式的Flume部署方式,前三个Agent的数据都汇总到一个Agent4上,最后由Agent4统一存储到HDFS。 ![](/media/editor/file_1664518958000_20220930142238409018.png) ###可靠性 Event会在每个Agent的Channel上进行缓存,随后Event将会传递到流中的下一个Agent或目的地(比如HDFS)。只有成功地发送到下一个Agent或目的地后Event才会从Channel中删除。这一步保证了Event数据流在Flume Agent中传输时端到端的可靠性。 Flume使用事务来保证Event的**可靠传输**。Source和Sink对Channel提供的每个Event数据分别封装一个事务用于存储和恢复,这样就保证了数据流的集合在点对点之间的可靠传输。在多层架构的情况下,来自前一层的sink和来自下一层的Source 都会有事务在运行以确保数据安全地传输到下一层的Channel中。 ###可恢复性 Event数据会缓存在Channel中用来在失败的时候恢复出来。Flume支持保存在本地文件系统中的『文件channel』,也支持保存在内存中的『内存Channel』,『内存Channel』显然速度会更快,缺点是万一Agent挂掉『内存Channel』中缓存的数据也就丢失了。 ##Flume 的应用 假设电子商务Web应用程序要分析特定区域的客户行为。为此,他们需要将可用的日志数据移入Hadoop进行分析。Apache Flume在这里为我们提供了帮助。 Flume用于将应用程序服务器生成的日志数据以更高的速度移入HDFS。 ##Flume 的优点 这是使用Flume的优点: - 使用Apache Flume,我们可以将数据存储到任何集中存储(HBase,HDFS)中。 - 当传入数据的速率超过可以将数据写入目的地的速率时,Flume充当数据生产者和集中存储之间的中介,并在它们之间提供稳定的数据流。 - Flume提供了上下文路由功能。 - Flume中的事务是基于通道的,其中为每个消息维护两个事务(一个发送者和一个接收者)。它保证了可靠的消息传递。 - Flume是可靠的,容错的,可扩展的,可管理的和可定制的。 ##Flume 的特点 Flume的一些显着功能如下: - Flume有效地将来自多个Web服务器的日志数据提取到集中存储(HDFS,HBase)中。 - 使用Flume,我们可以将来自多个服务器的数据立即放入Hadoop。 - 除日志文件外,Flume还用于导入由社交网站(如Facebook和Twitter)以及电子商务网站(如Amazon和Flipkart)生成的大量事件数据。 - Flume支持大量的源和目标类型。 - Flume支持多跳流,扇入扇出流,上下文路由等。 - Flume可以水平缩放。
加我微信交流吧