flume简介
Flume是一种分布式、可靠和可用的服务,可以有效地收集、聚集和移动大量日志数据。它有一个基于流数据流的简单而灵活的体系结构。它具有可调可靠性机制和许多故障转移和恢复机制的健壮性和容错能力。它使用一个简单的可扩展数据模型,允许在线分析应用程序
flume环境要求
- 运行环境:jdk 1.8以上
- 内存要求:内存需要满足配置使用的sources、channels、sinks
- 磁盘空间:磁盘空间需要满足配置使用的channels、sinks
- 目录权限:agent目录的读/写权限
flume原理
flume原理图如下:
整个flume其实就是Agent的功能,接收source的数据,通过channel传输到sink上去,如果有大数据要处理数据的时候,会直接到sink去提取数据,flume就是将数据从source采集到sink上。
flume启动命令
首先进入我们的flume目录,然后我们可以在bin目录下执行命令,配置文件一般放在安装目录的conf下
bin/flume-ng agent -n a1 -c conf -f conf/flume-conf.properties.template
这条命令的意思是 运行bin目录下的flume-ng文件的agent,-n
是指后面跟上agent的名字是a1,-c
是指后面跟上conf配置,-f
是指后面跟上配置文件的路径。从flume原理图我们可以知道,我们需要配置source、channel、sink。这三个都有缺省的值,我们也可以自行指定。source、channel、sink都可以任意变换,参考地址http://flume.apache.org/FlumeUserGuide.html
例子1
source:netcat
channel:memory
sink:logger
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = 192.168.163.111
a1.sources.r1.port = 44444
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
将这段属性配置文件存放在安装文件下的conf目录下,然后我们就可以启动flume采集了,注意,a1.sources.r1.bind这个是本机的ip,不要用回环地址
bin/flume-ng agent -conf conf -f conf/netcat-logger.conf -name a1 -Dflume.root.logger=INFO,console
这条命令中,netcat-logger.conf是刚刚那个配置存储的文件名,结果直接输出到logger上
我们可以用socket工具、telnet、netcat连接这台服务器的44444端口来测试flume是否能成功采集数据
例子2
source:exec
channel:memory
sink:hdfs
a1.sources = r1
a1.sinks = k1
a1.channels = c1
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /home/hadoop/tmp/flume/log/new.log
a1.sources.r1.channels = c1
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M
a1.sinks.k1.hdfs.filePrefix = events-
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute
a1.sinks.k1.hdfs.useLocalTimeStamp = true
#a1.sinks.k1.hdfs.rollSize=100
a1.sinks.k1.hdfs.fileType = DataStream
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
将这段属性配置文件存放在安装文件下的conf目录下,然后我们就可以启动flume采集了,启动脚本是:
bin/flume-ng agent -c conf -f conf/tail-hdfs.conf -name a1
启动tail-hdfs.conf是我们保存的配置文件名
总结
通过上面的两个例子我们可以发现,source、channel、sink可以是多种类型的数据源,我们可以根据我们的需求来更换着三者中的任意项。可更换的数据源参考http://flume.apache.org/FlumeUserGuide.html