Flume介绍
Apache Flume 是一个分布式,可靠且可用的系统,用于有效地从许多不同的源收集、聚合和移动大量日志数据到一个集中式的数据存储区。 Flume 的使用不只限于日志数据。因为数据源可以定制,flume 可以被用来传输大量事件数据,这些数据不仅仅包括网络通讯数据、社交媒体产生的数据、电子邮件信息等
最常见的作用是Flume 可用于移动大规模批量流数据到HDFS系统。从Web服务器收集当前日志文件数据到HDFS聚集用于分析。
Flume 支持多种来源,如:
- tail (从本地文件,该文件的管道数据和通过Flume写入 HDFS,类似于Unix命令“tail”)
- 系统日志
- Apache log4j (允许Java应用程序通过Flume事件写入到HDFS文件)。
Flume代理是JVM进程,里面有3个组成部分 : Flume Source, Flume Channel 和 Flume Sink -通过该事件传播发起在外部源之后

监听web服务端日志信息->发送事件到sources端来消费->缓存数据到channel中->sink从channel中取数据进行消费并保存到hdfs中
Source
消费由外部源(如Web服务器)传递给它的事件。外部源以一定的格式发送数据给 Flume
channel
可以理解为缓存区,用来保存从 Source 那拿到的数据,直到 Flume slink 将数据消费
sink
从 channel 消费完数据就会将数据从 channel 中清除,随后将数据放到外部存储系统例如 HDFS (使用 Flume HDFS sink)或发送到其他 Flume agent 的 source 中。不管是 Source 还是 Slink 都是异步发送和消费数据。
对Flume做了简单介绍之后,带大家一起搭建一下Flume环境,Flume搭建很简单。
解压软件
解压下载好的flume软件
[root@master mmcc]# tar -zxvf apache-flume-1.8.0-bin.tar.gz
配置conf目录文件
- 将
flume-env.sh.template
复制一份,并改名为flume-env.sh
[root@master conf]# cp flume-env.sh.template flume-env.sh
- 配置java环境 (可选)
vi flume-env.sh
JAVA_HOME=/app/lib/jdk1.7.0_55 #jdk的目录
JAVA_OPTS="-Xms100m -Xmx200m -Dcom.sun.management.jmxremote"
此时我们就已经可以直接使用了。做一个简单的例子,监听\home\mmcc\testlogs
目录下文件的内容变化,并将其存储到hdfs上的testlogs
目录,关于hdfs相关内容可参考hadoop之旅2-centerOS7: 搭建分布式hadoop环境
编写conf文件
[root@master conf]# vi flume-conf
agent.sources = r1 #设置名称
agent.channels = c1
agent.sinks = k1
agent.sources.r1.type = spooldir #用于抽取目录下文件
agent.sources.r1.spoolDir = /home/mmcc/testlogs #监听的目录
agent.channels.c1.type=memory #h缓冲区类型为内存
agent.channels.c1.capacity=1000
agent.channels.c1.transactionCapacity = 100
agent.sinks.k1.type = hdfs #处理的类型,存入hdfs
agent.sinks.k1.hdfs.path=hdfs://master:9000/testlogs
agent.sinks.k1.hdfs.filePrefix = testlog_
agent.sinks.k1.hdfs.fileType = DataStream
agent.sources.r1.channels = c1
agent.sinks.k1.channel = c1
执行flume
[root@master flume-1.8.0]# ./bin/flume-ng agent --conf ./conf/ --conf-file ./conf/flume-conf --name agent -Dflume.root.logger=INFO,console
- 最前面是通过bin下的flume-ng这个脚本进行启动;
- 下面就是启动时候需要的一系列参数,-–conf表示是配置 conf文件,conf-file 表示配置文件的位置,可以是相对位置也可以是绝对位置,–name 就是之前配置文件内的”agent.channels = c1”,猜测是flume服务器配置的名称, -Dflume.root.logger 表示输出形式,console是命令窗口输出,logging是log/flume.log文件输出。
执行成功后,flume就会为我们一直监听我们配置的/home/mmcc/testlogs
目录
测试
在/home/mmcc/testlogs
目录下
vi testlog1 #编辑任意内容
hhhh
klsjdlkfjlds
lsdkjflks
kldjfljsljcvxl
lkjvlh
保存退出 :wq
在hdfs上可以看到,生成了对应的文件

同时testlog1也会被flume标志为已经扫描过的状态 COMPLETED
