zoukankan      html  css  js  c++  java
  • flume安装使用+根据数据源分类

    安装搭建:

      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解析命令。

    flume

    channel

     sink

    参考:

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

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

    http://blog.sina.com.cn/s/blog_8f80da6a0102wf29.html 

  • 相关阅读:
    3、Find and run the whalesay image
    1、docker初涉
    Java之ThreadLocal原理分析
    Java之Synchronized和ReentrantLock锁机制的比较
    Java之动态代理的实现及原理
    Java之atomic包的原理及分析
    深入理解Java内存模型-volatile
    Java WeakReference
    JavaScript 事件的冒泡,委派
    JavaScript Date删除添加员工信息练习
  • 原文地址:https://www.cnblogs.com/51python/p/10894852.html
Copyright © 2011-2022 走看看