Apache Flume 是一个分布式,可靠且可用的系统,用于有效地从许多不一样的源收集、聚合和移动大量日志数据到一个集中式的数据存储区。 Flume 的使用不仅限于日志数据。由于数据源能够定制,flume 能够被用来传输大量事件数据,这些数据不单单包括网络通信数据、社交媒体产生的数据、电子邮件信息等java
最多见的做用是Flume 可用于移动大规模批量流数据到HDFS系统。从Web服务器收集当前日志文件数据到HDFS汇集用于分析。web
Flume 支持多种来源,如:apache
Flume代理是JVM进程,里面有3个组成部分 : Flume Source, Flume Channel 和 Flume Sink -经过该事件传播发起在外部源以后缓存
监听web服务端日志信息->发送事件到sources端来消费->缓存数据到channel中->sink从channel中取数据进行消费并保存到hdfs中bash
消费由外部源(如Web服务器)传递给它的事件。外部源以必定的格式发送数据给 Flume服务器
能够理解为缓存区,用来保存从 Source 那拿到的数据,直到 Flume slink 将数据消费网络
从 channel 消费完数据就会将数据从 channel 中清除,随后将数据放到外部存储系统例如 HDFS (使用 Flume HDFS sink)或发送到其余 Flume agent 的 source 中。无论是 Source 仍是 Slink 都是异步发送和消费数据。app
对Flume作了简单介绍以后,带你们一块儿搭建一下Flume环境,Flume搭建很简单。异步
解压下载好的flume软件分布式
[root@master mmcc]# tar -zxvf apache-flume-1.8.0-bin.tar.gz
复制代码
flume-env.sh.template
复制一份,并更名为flume-env.sh
[root@master conf]# cp flume-env.sh.template flume-env.sh
复制代码
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环境
[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
复制代码
[root@master flume-1.8.0]# ./bin/flume-ng agent --conf ./conf/ --conf-file ./conf/flume-conf --name agent -Dflume.root.logger=INFO,console
复制代码
执行成功后,flume就会为咱们一直监听咱们配置的/home/mmcc/testlogs
目录
在/home/mmcc/testlogs
目录下
vi testlog1 #编辑任意内容
hhhh
klsjdlkfjlds
lsdkjflks
kldjfljsljcvxl
lkjvlh
复制代码
保存退出 :wq
在hdfs上能够看到,生成了对应的文件
同时testlog1也会被flume标志为已经扫描过的状态 COMPLETED