码迷,mamicode.com
首页 > Web开发 > 详细

flume根据数据源分类

时间:2019-05-20 17:17:44      阅读:450      评论:0      收藏:0      [点我收藏+]

标签:通道   不用   channels   mem   des   htm   logger   file   curl   

基本搭建:

  1)解压下载的flume(安装jdk1.6及其以上)

  2)在conf文件夹里面建立example.conf文件

    

#example.conf:单节点Flume配置
#命名Agent a1的组件
a1.sources  =  r1
a1.sinks  =  k1
a1.channels  =  c1
 
#描述/配置Source
a1.sources.r1.type  =  netcat
a1.sources.r1.bind  =  0.0.0.0<br>a1.sources.r1.port  =  44444
 
#描述Sink
a1.sinks.k1.type  =  logger
 
#描述内存Channel
a1.channels.c1.type  =  memory
a1.channels.c1.capacity  =  1000
a1.channels.c1.transactionCapacity  =  100
 
#为Channle绑定Source和Sink
a1.sources.r1.channels  =  c1
a1.sinks.k1.channel  =  c1

  3)启动flume

  

bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console

  4)新建窗口运行

  

telnet localhost 44444

  5)在该窗口输入,另一个窗口会输出记录

 

================================================================================================================================

flume对接不同的数据源

1、Avro Source

监听AVRO端口来接受来自外部AVRO客户端的事件流。利用Avro Source可以实现多级流动、扇出流、扇入流等效果。另外也可以接受通过flume提供的Avro客户端发送的日志信息。

  修改上面的example文件(仅做部分修改)

  

#描述/配置Source<br>a1.sources.r1.type  =  avro
a1.sources.r1.bind  =  0.0.0.0
a1.sources.r1.port  =  44444

 启动flume:

    ./flume-ng agent --conf ../conf --conf-file ../conf/template2.conf --name a1 -Dflume.root.logger=INFO,console

 通过flume提供的avro客户端向指定机器指定端口发送日志信息:

    ./flume-ng avro-client --conf ../conf --host 0.0.0.0 --port 44444 --filename ../mydata/log1.txt

会发现确实收集到日志

 

 

2、Spooling Directory Source

这个Source允许你将将要收集的数据放置到"自动搜集"目录中。这个Source将监视该目录,并将解析新文件的出现。事件处理逻辑是可插拔的,当一个文件被完全读入通道,它会被重命名或可选的直接删除。

要注意的是,放置到自动搜集目录下的文件不能修改,如果修改,则flume会报错。

  修改上面的example文件(仅做部分修改)

#描述/配置Source
a1.sources.r1.type  = spooldir
a1.sources.r1.spoolDir=/home/park/work/apache-flume-1.6.0-bin/mydata

 

启动flume:

    ./flume-ng agent --conf ../conf --conf-file ../conf/template4.conf --name a1 -Dflume.root.logger=INFO,console

 向指定目录中传输文件,发现flume收集到了该文件,将文件中的每一行都作为日志来处理

 

3、NetCat Source

  一个NetCat Source用来监听一个指定端口,并将接收到的数据的每一行转换为一个事件。

  不用修改就行了

 

 

4、HTTP Source

  修改上面的example文件(仅做部分修改)

#描述/配置Source
    a1.sources.r1.type  = http
    a1.sources.r1.port  = 66666

启动flume:

    ./flume-ng agent --conf ../conf --conf-file ../conf/template6.conf --name a1 -Dflume.root.logger=INFO,console

 通过命令发送HTTP请求到指定端口:

    curl -X POST -d ‘[{ "headers" :{"a" : "a1","b" : "b1"},"body" : "hello~http~flume~"}]‘ http://0.0.0.0:6666

 

 

 

 

flume使用 注意:

 

  1、flume在收集log的时候经常会出现Line length exceeds max (2048), truncating line!,这个一般情况对于一些log的存储没影响,但是遇到需要解析log的情况就有问题了,有时一个json或者其他格式的log被截断了,解析也会出问题,所以在source的属性配置里可以通过参数deserializer.maxLineLength调高默认的2048。
  

  2、flume在监听相应的目录时,如果有重名的文件,或者直接在监听目录下修改相应正在读取的文件时,都会报错,而且flume-ng目前没有这种容错机制,报错只能重启了,还有一个比较大的问题,flume-ng没有提供相应的kill脚本,只能通过shell直接ps -aux | grep flume找到相应的PID,然后手动kill。
  

  3、flume在监听相应目录时,如果目录下的文件是通过HTTP或者scp传输过来的,小文件的话没问题,但是当文件大小超过网络传输速率,就会造成flume读取文件时报错直接显示文件大小正在变化,这点也是比较麻烦的,所以建议是现有个临时目录先存放文件,等文件传输完成后再通过shell的mv命令直接发送到监听目录。
  

  4、有时候我们的log文件是以压缩的方式传输过来,但是如果我们想解析后才发送出去的话,可以将当前的Spooling Directory Source的改为Exec Source,可以指定改source的command参数里写shell解析命令。

 

参考:

http://www.cnblogs.com/cnmenglang/p/6544081.html

https://blog.csdn.net/yc_1993/article/details/80865009

 

flume根据数据源分类

标签:通道   不用   channels   mem   des   htm   logger   file   curl   

原文地址:https://www.cnblogs.com/51python/p/10894852.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!