Flume的写法

Flume的写法

1.配置文件

现在我们明白了,Flume就是用来采集数据,Source将采集的数据封装成一个个的事件event对象进行传输,这些事件首先缓存在Channel中(Channel Memory, Channel File) 两种Channel的方式,然后Sink从Channel中主动拉取数据,并将数据发送到指定的位置(可以是HDFS, Kafka…)。

所以,我们怎么写一个Flume呢,也就是数据采集。其实就是一个配置文件,我们需要考虑的四个东西也就是flume基本组成架构。Agent,Source,Channel,Sink

注:配置文件写法来源于官方手册http://flume.apache.org/FlumeUserGuide.html

我么可以根据官方手册,来写我们的配置文件,官网是规范示范。

在这里插入图片描述

1.首先我们需要给我们Agent中组件和自己命名,a1 Agent , r1 sources , k1 sinks , c1 channels

2.我们需要设置source,从哪里接收数据。数据输入源端口类型,主机号,端口号,这样source就相当于连接上了数据来源,可以采集数据了。

3.设置Sink 输出

4.设置channel

5.将source,channel,sink连接起来。

2.实时监控单个追加文件,上传到hdfs

exec-flume-hdfs.conf

#各个组件命名
a1.sources = r1
a1.channels = c1
a1.sinks = k1

#Source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -f /opt/module/flume-1.9.0/datas/hive.log

#tail -f 操作就是监控这个文件内容的增加,一旦这个文件执行了追加操作,就会将追加的数据,发送到HDFS上

#Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 100

#Sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://hadoop102:8020/flume/%Y%m%d/%H
#上传文件的前缀
a1.sinks.k1.hdfs.filePrefix = logs-
##是否按照时间滚动文件夹
a1.sinks.k1.hdfs.round = true
##多少时间单位创建一个新的文件夹
a1.sinks.k1.hdfs.roundValue = 1
##重新定义时间单位
a1.sinks.k1.hdfs.roundUnit = hour
##是否使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true
##积攒多少个Event才flush到HDFS一次
a1.sinks.k1.hdfs.batchSize = 100
##设置文件类型,可支持压缩
a1.sinks.k1.hdfs.fileType = DataStream
##多久生成一个新的文件,60S
a1.sinks.k1.hdfs.rollInterval = 60
##设置每个文件的滚动大小
a1.sinks.k1.hdfs.rollSize = 134217700
##文件的滚动与Event数量无关
a1.sinks.k1.hdfs.rollCount = 0

#组合 绑定
a1.sources.r1.channels = c1 
a1.sinks.k1.channel = c1 

注意:tail -f 操作就是监控这个文件内容的增加,一旦这个文件执行了追加操作,就会将追加的数据,发送到HDFS上。

启动Flume,执行这个配置文件的指令: 没有配置路径,所以在 /opt/module/flume-1.9.0/ 执行,因为指令在这个路径下的 bin路径里面。

bin/flume-ng agent -c conf -f datas/exec-flume-hdfs.conf -n a1 因为我们的配置文件写在datas里。

bin/flume-ng agent -c conf -f datas/exec-flume-hdfs.conf -n a1 -Dflume.root.logger=INFO,console 将日志打印到 linux 操作台。

3.监控文件夹下,新文件的增加操作

spool-flume-hdfs.conf

#也就是说,当被监控的文件夹里,增加了一个新文件是,这个新文件就会被存储到HDFS中,随后这个文件就会被打上 file.COMPLETED的标签,flume通过监控文件名,来判断是否需要上传。

#各个组件命名
a1.sources = r1
a1.channels = c1
a1.sinks = k1

#Source
a1.sources.r1.type = spooldir
a1.sources.r1.channels = c1
a1.sources.r1.spoolDir = /opt/module/flume-1.9.0/datas/spoolDir
a1.sources.r1.fileSuffix = .COMPLETED
a1.sources.r1.ignorePattern = ([^ ]*\.tmp)

#Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 100

#Sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://hadoop102:8020/flume/%Y%m%d/%H
#上传文件的前缀
a1.sinks.k1.hdfs.filePrefix = logs-
##是否按照时间滚动文件夹
a1.sinks.k1.hdfs.round = true
##多少时间单位创建一个新的文件夹
a1.sinks.k1.hdfs.roundValue = 1
##重新定义时间单位
a1.sinks.k1.hdfs.roundUnit = hour
##是否使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true
##积攒多少个Event才flush到HDFS一次
a1.sinks.k1.hdfs.batchSize = 100
##设置文件类型,可支持压缩
a1.sinks.k1.hdfs.fileType = DataStream
##多久生成一个新的文件
a1.sinks.k1.hdfs.rollInterval = 60
##设置每个文件的滚动大小
a1.sinks.k1.hdfs.rollSize = 134217700
##文件的滚动与Event数量无关
a1.sinks.k1.hdfs.rollCount = 0

#组合 绑定
a1.sources.r1.channels = c1 
a1.sinks.k1.channel = c1

4.监控文件加下,多个文件的执行的追加操作

taildir-flume-hdfs.conf 监视某个文件夹下的已有文件中的内容,每次文件中内容添加,就会同步到hdfs中去

#各个组件命名
a1.sources = r1
a1.channels = c1
a1.sinks = k1

#Source
a1.sources.r1.type = TAILDIR
a1.sources.r1.positionFile = /opt/module/flume-1.9.0/datas/position/position.json
a1.sources.r1.filegroups = f1
#a1.sources.r1.filegroups = f1 f2  或者直接写成这种格式,一个f1 代表file1 f2代表file2
#可以用正则表达式来定义文件名,文件名中包含file都监视
a1.sources.r1.filegroups.f1 = /opt/module/flume-1.9.0/datas/taildir/.*file.*

#a1.sources.r1.filegroups.f2 = /opt/module/flume-1.9.0/datas/taildir/file1.txt
#a1.sources.r1.filegroups.f2 = /opt/module/flume-1.9.0/datas/taildir/file2.txt


#Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 100

#Sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://hadoop102:8020/flume/%Y%m%d/%H
#上传文件的前缀
a1.sinks.k1.hdfs.filePrefix = logs-
##是否按照时间滚动文件夹
a1.sinks.k1.hdfs.round = true
##多少时间单位创建一个新的文件夹
a1.sinks.k1.hdfs.roundValue = 1
##重新定义时间单位
a1.sinks.k1.hdfs.roundUnit = hour
##是否使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true
##积攒多少个Event才flush到HDFS一次
a1.sinks.k1.hdfs.batchSize = 100
##设置文件类型,可支持压缩
a1.sinks.k1.hdfs.fileType = DataStream
##多久生成一个新的文件
a1.sinks.k1.hdfs.rollInterval = 60
##设置每个文件的滚动大小
a1.sinks.k1.hdfs.rollSize = 134217700
##文件的滚动与Event数量无关
a1.sinks.k1.hdfs.rollCount = 0

#组合 绑定
a1.sources.r1.channels = c1 
a1.sinks.k1.channel = c1


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200824205621190.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dpbGxpYW1jY2M=,size_16,color_FFFFFF,t_70#pic_center)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值