zoukankan      html  css  js  c++  java
  • Flume之Source

    一、Avro 类型Source

    监听Avro 端口来接收外部avro客户端的事件流。和netcat不同的是,avro-source接收到的是经过avro序列化后的数据,然后反序列化数据继续传输。所以,如果是avro-source的话,源数据必须是经过avro序列化后的数据。而netcat接收的是字符串格式。利用Avro source可以实现多级流动、扇出流、扇入流等效果。另外,也可以接收通过flume提供的avro客户端发送的日志信息。

    Avro Source可配选项说明

    实现步骤:

    1、修改配置文件,source的type属性为avro

    2、根据指定的配置文件启动flume。以template-avro.conf为例:

    #配置Agent a1 的组件
    a1.sources=r1
    a1.channels=c1
    a1.sinks=s1
     
    #描述/配置a1的source1
    a1.sources.r1.type=avro  
    a1.sources.r1.bind=0.0.0.0
    a1.sources.r1.port=44444
     
    #描述sink
    a1.sinks.s1.type=logger
     
    #描述内存channel
    a1.channels.c1.type=memory
    a1.channels.c1.capacity=1000
    a1.channels.c1.transactionCapacity=100
     
    #位channel 绑定 source和sink
    a1.sources.r1.channels=c1
    a1.sinks.s1.channel=c1

    3、执行启动指令,如果出现如下提示,证明启动成功。进入到bin目录执行指令:

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

    4、创建文件

     在flume安装目录下创建文件夹mydata,并在文件夹里面创建文件 1.txt,并填入内容。

    5、执行agent-avro客户端指令:

    ./flume-ng avro-client -H 0.0.0.0 -p 44444 -F ../mydata/1.txt -c ../conf/

    (注:可以通过执行:./flume-ng help 来查看指令)

    二、Exec类型Source

    可以将命令产生的输出作为源,Exec Source 可配置选项说明

    实现步骤:

    1、修改配置文件,source的type属性为avro。配置代码:

    #配置Agent a1 的组件
    a1.sources=r1
    a1.channels=c1
    a1.sinks=s1
     
    #描述/配置a1的source1
    a1.sources.r1.type=exec  
    a1.sources.r1.command=ping 192.168.234.163
     
    #描述sink
    a1.sinks.s1.type=logger
     
    #描述内存channel
    a1.channels.c1.type=memory
    a1.channels.c1.capacity=1000
    a1.channels.c1.transactionCapacity=100
     
    #位channel 绑定 source和sink
    a1.sources.r1.channels=c1
    a1.sinks.s1.channel=c1

    2、进入到bin目录执行指令:

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

    结果为ping 当前主机返回的结果(也可以尝试其他的linux指令,比如 cat  1.txt  查看文件内容)

    三、Spooling Directory类型Source

    将指定的文件加入到“自动搜集”目录中。flume会持续监听这个目录,把文件当做source来处理。注意:一旦文件被放到“自动收集”目录中后,便不能修改,如果修改,flume会报错。此外,也不能有重名的文件,如果有,flume也会报错。

    实现步骤:

    1、配置示例:

    #配置Agent a1 的组件
    a1.sources=r1
    a1.channels=c1
    a1.sinks=s1
     
    #描述/配置a1的source1
    a1.sources.r1.type=spooldir
    a1.sources.r1.spoolDir=/home/work/data
     
    #描述sink
    a1.sinks.s1.type=logger
     
    #描述内存channel
    a1.channels.c1.type=memory
    a1.channels.c1.capacity=1000
    a1.channels.c1.transactionCapacity=100
     
    #位channel 绑定 source和sink
    a1.sources.r1.channels=c1
    a1.sinks.s1.channel=c1

    2、创建相关的文件夹

    3、根据指定的配置文件,启动flume

    ./flume-ng agent -n a1 -c ../conf -f ../conf/spooling.conf  -Dflume.root.logger=INFO,console

    出现下图,证明flume正在监听指定的文件目录:

    4、向指定的文件目录下传送一个日志文件,发现flume的控制台打印相关的信息。

    此外,会发现被处理的文件,会追加一个后缀:completed,表示已处理完。(重名文件包括已加后缀的文件)

    四、NetCat Source

    一个NetCat Source用来监听一个指定端口,并接收监听到的数据。

    配置示例:

    #配置Agent a1 的组件
    a1.sources=r1
    a1.channels=c1
    a1.sinks=s1
     
    #描述/配置a1的r1
    a1.sources.r1.type=netcat
    a1.sources.r1.bind=0.0.0.0
    a1.sources.r1.port=44444
     
    #描述a1的s1
    a1.sinks.s1.type=logger
     
    #描述a1的c1
    a1.channels.c1.type=memory
    a1.channels.c1.capacity=1000
    a1.channels.c1.transactionCapacity=100
     
    #位channel 绑定 source和sink
    a1.sources.r1.channels=c1
    a1.sinks.s1.channel=c1

    五、Sequence Generator Source 

    一个简单的序列发生器,不断的产生事件,值是从0开始每次递增1。主要用来测试。可配置选项:

    配置示例

    #配置Agent a1 的组件
    a1.sources=r1
    a1.sinks=s1
    a1.channels=c1
     
    #描述/配置a1的source1
    a1.sources.r1.type=seq
     
    #描述sink
    a1.sinks.s1.type=logger
     
    #描述内存channel
    a1.channels.c1.type=memory
    a1.channels.c1.capacity=1000
    a1.channels.c1.transactionCapacity=100
     
    #位channel 绑定 source和sink
    a1.sources.r1.channels=c1
    a1.sinks.s1.channel=c1

    六、HTTP source

    此Source接受HTTP的GET和POST请求作为Flume的事件。其中GET方式应该只用于试验。如果想让flume正确解析Http协议信息,比如解析出请求头、请求体等信息,需要提供一个可插拔的"处理器"来将请求转换为事件对象,这个处理器必须实现HTTPSourceHandler接口。这个处理器接受一个 HttpServletRequest对象,并返回一个Flume Envent对象集合。flume提供了一些常用的Handler(处理器):

    JSONHandler

    可以处理JSON格式的数据,并支持UTF-8、UTF-16、UTF-32字符集。该handler接受Evnet数组,并根据请求头中指定的编码将其转换为Flume Event。如果没有指定编码,默认编码为UTF-8。

    JSON格式如下:

    [{
    
      "headers" : {
    
                 "timestamp" : "434324343",
    
                 "host" : "random_host.example.com"
    
                 },
    
      "body" : "random_body"
    
      },
    
      {
    
      "headers" : {
    
                 "namenode" : "namenode.example.com",
    
                 "datanode" : "random_datanode.example.com"
    
                 },
    
      "body" : "really_random_body"
    
      }]

    BlobHandler

    BlobHandler是一种将请求中上传文件信息转化为event的处理器。

    参数说明,加!为必须属性:

    !handler        –        The FQCN of this class: org.apache.flume.sink.solr.morphline.BlobHandler

    handler.maxBlobLength        100000000        The maximum number of bytes to read and buffer for a given request

     

    配置示例:

    #配置Agent a1 的组件
    a1.sources=r1
    a1.sinks=s1
    a1.channels=c1
     
    #描述/配置a1的source1
    a1.sources.r1.type=http
    a1.sources.r1.port=8888
     
    #描述sink
    a1.sinks.s1.type=logger
     
    #描述内存channel
    a1.channels.c1.type=memory
    a1.channels.c1.capacity=1000
    a1.channels.c1.transactionCapacity=100
     
    #位channel 绑定 source和sink
    a1.sources.r1.channels=c1
    a1.sinks.s1.channel=c1

    执行启动命令,执行curl 命令,模拟一次http的Post请求

    curl -X POST -d '[{"headers":{"a":"a1"},"body":"hello 123"}]'  http://0.0.0.0:8888

    注:这种格式是固定的,因为我们用的是flume自身提供的Json格式的Handler。此外,需要包含header 和body两关键字,这样,handler在解析时才能拿到对应的数据。

  • 相关阅读:
    topsort模板,poj 2585
    CUG2012年暑期ACM训练赛(单人赛)
    第一个QT, "hello linux"
    AOE网络,最长路关键路径的学习
    种类位置信息:geometry
    标准对话框:StandardDialogs
    最近整理的模板
    单调队列的学习
    118 ZOJ Monthly, July 2012
    离散化 + unique + lower_bound的学习,hdu4325
  • 原文地址:https://www.cnblogs.com/johnvwan/p/15656027.html
Copyright © 2011-2022 走看看