Apache Flume大数据开发工具概述与入门(三)

119 阅读2分钟

「这是我参与2022首次更文挑战的第26天,活动详情查看:2022首次更文挑战」。

2. 采集文件到 HDFS

采集需求:比如业务系统使用 log4j 生成的日志,日志内容不断增加,需要把追加到日志文件中的数据实时采集到 hdfs

根据需求,首先定义以下 3 大要素

  • 采集源,即 source——监控文件内容更新 : exec ‘tail -F file’

  • 下沉目标,即 sink——HDFS 文件系统 : hdfs sink

  • Source 和 sink 之间的传递通道——channel,可用 file channel 也可以用内存 channel

配置文件编写:

# Name the components on this agent

a1.sources = r1

a1.sinks = k1

a1.channels = c1

# Describe/configure the source

a1.sources.r1.type = exec

a1.sources.r1.command = tail -F /root/logs/test.log

a1.sources.r1.channels = c1

# Describe the sink

a1.sinks.k1.type = hdfs

a1.sinks.k1.hdfs.path = /flume/tailout/%y-%m-%d/%H%M/

a1.sinks.k1.hdfs.filePrefix = events

a1.sinks.k1.hdfs.round = true

a1.sinks.k1.hdfs.roundValue = 10

a1.sinks.k1.hdfs.roundUnit = minute

a1.sinks.k1.hdfs.rollInterval = 3

a1.sinks.k1.hdfs.rollSize = 20

a1.sinks.k1.hdfs.rollCount = 5

a1.sinks.k1.hdfs.batchSize = 1

a1.sinks.k1.hdfs.useLocalTimeStamp = true

#生成的文件类型,默认是 Sequencefile,可用 DataStream,则为普通文本

a1.sinks.k1.hdfs.fileType = DataStream

# Use a channel which buffers events in memory

a1.channels.c1.type = memory

a1.channels.c1.capacity = 1000

a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel

a1.sources.r1.channels = c1

a1.sinks.k1.channel = c1

参数解析:

  • rollInterval

默认值:30

hdfs sink 间隔多长将临时文件滚动成最终目标文件,单位:秒;

如果设置成 0,则表示不根据时间来滚动文件;

注:滚动(roll)指的是,hdfs sink 将临时文件重命名成最终目标文

件,并新打开一个临时文件来写入数据;

  • rollSize

默认值:1024

当临时文件达到该大小(单位:bytes)时,滚动成目标文件;

如果设置成 0,则表示不根据临时文件大小来滚动文件;

  • rollCount

默认值:10

当 events 数据达到该数量时候,将临时文件滚动成目标文件;

如果设置成 0,则表示不根据 events 数据来滚动文件;

  • round

默认值:false

是否启用时间上的“舍弃”,这里的“舍弃”,类似于“四舍五入”。

  • roundValue

默认值:1

时间上进行“舍弃”的值;

  • roundUnit

默认值:seconds

时间上进行“舍弃”的单位,包含:second,minute,hour

示例:

a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/%S

a1.sinks.k1.hdfs.round = true

a1.sinks.k1.hdfs.roundValue = 10

a1.sinks.k1.hdfs.roundUnit = minute

当时间为 2022-02-16 17:38:59 时候,hdfs.path 依然会被解析为:

/flume/events/20220216/17:30/00

因为设置的是舍弃 10 分钟内的时间,因此,该目录每 10 分钟新生成一个。