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)