Flume的Source
source学习网址:
http://flume.apache.org/FlumeUserGuide.html
一、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= #描述sink
a1.sinks.s1.type=logger #描述内存channel
a1.channels.c1.type=memory
a1.channels.c1.capacity=
a1.channels.c1.transactionCapacity= #位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=
a1.channels.c1.transactionCapacity= #位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=
a1.channels.c1.transactionCapacity= #位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= #描述a1的s1
a1.sinks.s1.type=logger #描述a1的c1
a1.channels.c1.type=memory
a1.channels.c1.capacity=
a1.channels.c1.transactionCapacity= #位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=
a1.channels.c1.transactionCapacity= #位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" : "", "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= #描述sink
a1.sinks.s1.type=logger #描述内存channel
a1.channels.c1.type=memory
a1.channels.c1.capacity=
a1.channels.c1.transactionCapacity= #位channel 绑定 source和sink
a1.sources.r1.channels=c1
a1.sinks.s1.channel=c1
2.执行启动命令
3.执行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在解析时才能拿到对应的数据
Flume的Source的更多相关文章
- 把Flume的Source设置为 Spooling directory source
把Flume的Source设置为 Spooling directory source,在设定的目录下放置需要读取的文件,一些文件在读取过程中会报错. 文件格式和报错如下: 实验一 读取汉子和“:&qu ...
- flume http source示例讲解
一.介绍 flume自带的Http Source可以通过Http Post接收事件. 场景:对于有些应用程序环境,它可能不能部署Flume SDK及其依赖项,或客户端代码倾向于通过HTTP而不是Flu ...
- Flume:source和sink
Flume – 初识flume.source和sink 目录基本概念常用源 Source常用sink 基本概念 什么叫flume? 分布式,可靠的大量日志收集.聚合和移动工具. events ...
- FLUME KAFKA SOURCE 和 SINK 使用同一个 TOPIC
FLUME KAFKA SOURCE 和 SINK 使用同一个 TOPIC 最近做了一个事情,过滤下kakfa中的数据后,做这个就用到了flume,直接使用flume source 和 flume s ...
- 一次flume exec source采集日志到kafka因为单条日志数据非常大同步失败的踩坑带来的思考
本次遇到的问题描述,日志采集同步时,当单条日志(日志文件中一行日志)超过2M大小,数据无法采集同步到kafka,分析后,共踩到如下几个坑.1.flume采集时,通过shell+EXEC(tail -F ...
- Flume组件source,channel,sink源码分析
LifeCycleState: IDLE, START, STOP, ERROR [Source]: org.apache.flume.Source 继承LifeCycleAware{stop() + ...
- Flume笔记--source端监听目录,sink端上传到HDFS
官方文档参数解释:http://flume.apache.org/FlumeUserGuide.html#hdfs-sink 需要注意:文件格式,fileType=DataStream 默认为Sequ ...
- flume自定义Source(taildirSource),自定义Sink(数据库),开发完整步骤
一.flume简单了解推荐网站(简介包括简单案例部署): http://www.aboutyun.com/thread-8917-1-1.html 二.我的需求是实现从ftp目录下采集数据,目录下文件 ...
- Flume学习之路 (二)Flume的Source类型
一.概述 官方文档介绍:http://flume.apache.org/FlumeUserGuide.html#flume-sources 二.Flume Sources 描述 2.1 Avro So ...
随机推荐
- tomcat服务器安装方法
tomcat: 链接:https://pan.baidu.com/s/1pMEu0hP 密码:g0ah (tomcat7) jdk :链接:https://pan.baidu.com/s/1 ...
- NYOJ 737:石子合并(一)(区间dp)
737-石子合并(一) 内存限制:64MB 时间限制:1000ms 特判: No 通过数:30 提交数:37 难度:3 题目描述: 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆. ...
- Apache 启动失败没有错误信息的解决办法
在cmd命令行 进入到apache安装bin目录 执行以下 httpd.exe -w -n "apache2.2" -k start 注意apache2.2是你安装的apache服 ...
- django HttpResponse的用法
一.传json字典 def back_json(rquest): #JsonResponse父类是HttpResponse,原码里调用了json.dumps() from django.http im ...
- if else的使用以及如何从键盘获取数值
if-else的使用 顺序结构 顺序从上到下执行,中间没有判断和跳转 分支结构 根据条件,选择性地执行某段代码 有if-else和switch两种分支语句 循环结构 根据循环,重复性地执行某段代码 有 ...
- hdu3974 Assign the task dfs序+线段树
There is a company that has N employees(numbered from 1 to N),every employee in the company has a im ...
- 【mybatis源码学习】调试mybatis的第一个程序
[一].基础知识准备 mybatis-config.xml配置文件的结构 MyBatis配置文件中大标签configuration下子标签包括: configuration |--- properti ...
- 快速挂载iso文件到虚拟机系统
在vm软件菜单栏那里选择vm,再选择弹出菜单最下面的设置,如图,找到实体机上的iso文件,保存. 这时候,在虚拟机ls /dev会发现有一个cdrom,这个就是我们的iso文件,不过我们还需要把它挂载 ...
- VS版本号定义、规则和相关的Visual Studio插件
软件版本号主要标识了软件的版本,通过其可以了解软件.类库文件的当前版本,使得软件版本控制有所依据. 我们就Windows系统和.NET Framework的编号规则来看,软件版本号的定义结构一般是这样 ...
- MySQL中正则表达式
正则表达式是用来匹配文本的特殊的串(字符集合),将一个模式(正则表达式)与一个文本串进行比较 从文本文件中提取电话号码 查找名字中间带有数字的文件 文本块中重复出现的单词 替换页面的URL为这些URL ...