小记---------FLUM的三种配置方式:spooldir、exec、hadoop sink
FLUM概述
是一个分布式的数据收集系统,具有高可靠、高可用、事务管理、失败重启等功能,数据处理速度快,完全可以用于生产环境
核心:agent(是FLUM的一个代号,名字 )。agent是一个Java进程,运行在日志收集端,通过agent接收日志,然后暂存起来,再发送到目的地
核心概念:agent、source、channel、sink、interceptor
agent:(是FLUM的一个代号,名字 )。agent是一个Java进程
source(输入):可以接收各种格式的数据,如console/thrift/exec/httpdent
sink(输出):可以发送到各种不同的目的地,如HDFS、HBASE、文件、控制台等
channel(管道):缓冲数据,可以放在内存、文件、数据库等
interceptor(拦截器):可以在数据传递过程中改变其属性信息
第一种 spooldir
1.配置spool.conf
vi /usr/local/hadoop/flume-1.6.0/conf/spool.conf
a1.sources = r1 //起名字 a1.sinks = k1 //起名字 a1.channels = c1 //起名字 # Describe/configure the source a1.sources.r1.type =spooldir //监视一个'目录'、'文件夹' a1.sources.r1.spoolDir =/usr/local/hadoop/flume-1.6.0/logs //被监视的目录(从这个目录收集数据) a1.sources.r1.fileHeader= true //是否有头文件 a1.sources.r1.channels =c1 //把收集的数据给到channels # Describe the sink a1.sinks.k1.type = logger //输出为日志 a1.sinks.k1.channel = c1 //从channels拿数据 # Use a channel which buffers events inmemory a1.channels.c1.type = memory //内存 a1.channels.c1.capacity = 1000 //channels存放最大值 a1.channels.c1.transactionCapacity = 100 //sink接收channels时最大数据值
2.启动服务flume agent a1
flume-ng agent -c . -f /usr/local/hadoop/flume-1.6.0/conf/spool.conf -n a1 -Dflume.root.logger=INFO,console a1:agent名字;在console输出
3.测试:追加文件到/usr/local/hadoop/flume-1.6.0/logs目录
echo "spool test1" >/usr/local/hadoop/flume-1.6.0/logs/spool_text.log
被读取的文件会加上后缀名:表示已经完成读取
COMPLETED
例2:Exec EXEC执行一个给定的命令获得输出的源,如果要使用tail命令,必须使得file足够大才能看到输出内容
位置:vi /usr/local/hadoop/flume-1.6.0/conf/exec.conf
#Name the components on this agent a1.sources= r1 a1.sinks= k1 a1.channels= c1 #Describe/configure the source a1.sources.r1.type = exec //监控'文件' #a1.sources.r1.command = tail -F /usr/local/hadoop/flume-1.6.0/logs/exec.log //可以直接读取文件;tail-F 默认读取最后10行Linux命令 a1.sources.r1.command= tail -F /usr/local/hadoop/flume-1.6.0/logs/log_exec_tail a1.sources.r1.channels = c1 #Describe the sink a1.sinks.k1.type= logger a1.sinks.k1.channel= c1 #Use a channel which buffers events in memory a1.channels.c1.type= memory a1.channels.c1.capacity= 1000 a1.channels.c1.transactionCapacity= 100
2.启动服务flume agent a1
flume-ng agent -c . -f /usr/local/hadoop/flume-1.6.0/conf/exec.conf -n a1 -Dflume.root.logger=INFO,console
3.测试:生成足够多的内容在文件里(循环往log_exec_tail写数据)
for i in {1..100};do echo "exec tail$i" >> /usr/local/hadoop/flume-1.6.0/bin/log_exec_tail;echo $i;sleep 0.1;done
例3.Hadoop sink
vi /usr/local/hadoop/flume-1.6.0/conf/hdfs_sink.conf
a1.sources = r1 a1.sinks = k1 a1.channels = c1 # Describe/configure the source a1.sources.r1.type= syslogtcp //输入为系统日志协议 a1.sources.r1.port = 5140 //端口号 a1.sources.r1.host = localhost //IP地址 a1.sources.r1.channels = c1 # Describe the sink a1.sinks.k1.type= hdfs //输出到HDFS a1.sinks.k1.channel = c1 a1.sinks.k1.hdfs.path = hdfs://master:9000/flume/syslogtcp //输出到hdfs路径 a1.sinks.k1.hdfs.filePrefix = Syslog //输出文件前缀 a1.sinks.k1.hdfs.round = true //是循环 a1.sinks.k1.hdfs.roundValue = 10 //循环10 a1.sinks.k1.hdfs.roundUnit = minute //分钟 # 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
2.启动flume agent a1
flume-ng agent -c . -f /usr/local/hadoop/flume-1.6.0/conf/hdfs_sink.conf -n a1 -Dflume.root.logger=INFO,console
3.测试产生的syslog
echo "hello idoall flume -> hadoop testing one" | nc localhost 5140
4.查看
在master上再打开一个窗口,去hadoop上检查文件是否生成
hadoop fs -ls /flume/syslogtcp hadoop fs -cat /user/flume/syslogtcp/Syslog.1407644509504
作者:于二黑
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号