小记---------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

 

posted @ 2019-10-09 10:36  二黑诶  阅读(779)  评论(0编辑  收藏  举报