目录
设置
属性名称 | 默认值 | 说明 |
---|---|---|
channel | - | |
type | - | 组件类型名称,必须是hdfs |
hdfs.path | - | HDFS路径,例如:hdfs://mycluster/flume/mydata |
hdfs.filePrefix | FlumeData | flume在hdfs目录中创建文件的前缀 |
hdfs.fileSuffix | - | flume在hdfs目录中创建文件的后缀 |
hdfs.inUsePrefix | - | flume正在写入的临时文件的前缀 |
hdfs.inUseSuffix | .tmp | flume正在写入的临时文件的后缀 |
hdfs.rollInterval | 30 | 多长时间写一个新的文件 (0 = 不写新的文件),单位:秒 |
hdfs.rollSize | 1024 | 文件多大时写新文件,单位:字节(0: 不基于文件大小写新文件) |
hdfs.rollCount | 10 | 当写一个新的文件之前要求当前文件写入多少事件(0 = 不基于事件数写新文件) |
hdfs.idleTimeout | 0 | 多长时间没有新增事件则关闭文件(0 = 不自动关闭文件),单位:秒 |
hdfs.batchSize | 100 | 写多少个事件开始向HDFS刷数据 |
hdfs.codeC | - | 压缩格式:gzip, bzip2, lzo, lzop, snappy |
hdfs.fileType | SequenceFile | 支持的值有:SequenceFile,DataStream,CompressedStream |
hdfs.maxOpenFiles | 5000 | 最大打开文件数。如果数量超了则关闭最旧的文件 |
hdfs.minBlockReplicas | - | 对每个hdfs的block设置最小副本数。不指定则使用hadoop的配置值(默认为1) |
hdfs.writeFormat | - | 对于sequence file记录的类型。Text或者Writable(默认值) |
hdfs.callTimeout | 10000 | 为HDFS操作(如open、write、flush、close)准备的时间,单位:毫秒 |
hdfs.threadsPoolSize | 10 | 每个HDFS sink用于HDFS io操作的线程数 |
hdfs.rollTimerPoolSize | 1 | 每个HDFS sink用于调度计时文件滚动的线程数 |
hdfs.round | false | 是否需要新建文件夹以支持文件夹滚动 |
hdfs.roundValue | 1 | 与roundUnit一起指定文件夹滚动的时长,会四舍五入 |
hdfs.roundUnit | second | 控制文件夹个数。多长时间生成新文件夹,可设置为second, minute或hour |
hdfs.timeZone | Local Time | 用于解析目录路径的时区名称,例如:America/Los_Angeles |
hdfs.useLocalTimeStamp | false | 一般设置为true以使用本地时间。若不使用,则要求flume发送的事件header中带有时间戳 |
时间参数
别名 | 描述 |
---|---|
%t | Unix时间戳,毫秒 |
%{host} | 替换名为"host"的事件header的值。支持任意标题名称。 |
%a | 星期几的短名,例如:Mon, Tue, ... |
%A | 星期几的全名,例如:Monday, Tuesday, ... |
%b | 月份短名,例如:Jan, Feb, ... |
%B | 月份全名,例如:January, February, ... |
%c | 时间和日期,格式如:Thu Mar 3 23:05:25 2030 |
%d | 月份中的天数,两位数字表示(01-31) |
%e | 月份中的天数,不补零(1-31) |
%D | 日期,与%m/%d/%y格式相同 |
%H | 小时,24小时制,两位数字表示(00-23) |
%I | 小时,12小时制,两位数字表示(01-12) |
%j | 一年中的天数,三位数字表示(001-366) |
%k | 小时,24小时制,不补零(0-23) |
%m | 月份,两位数字表示(01-12) |
%n | 月份,不补零(1-12) |
%M | 分钟,两位数字表示(00-59) |
%p | 本地化的上午或下午标识 |
%s | 自1970-01-01 00:00:00 UTC以来的秒数 |
%S | 秒,两位数字表示(00-59) |
%y | 年份的最后两位,两位数字表示(00-99) |
%Y | 年份,四位数字表示(例如:2030) |
%z | 数字时区,例如:+hhmm(如-0400) |
配置文件
spooldir-logger-hdfs01.conf
配置文件内部具体的参数可以参考上面的两张表格
bash
# Name the components on this agent
# a1--agent
# all source of a1
a1.sources = r1
# all sinks of a1
a1.sinks = k1
# all channels of a1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = spooldir
#
a1.sources.r1.spoolDir = /opt/module/jar/test
a1.sources.r1.fileSuffix= .wunaiieq
a1.sources.r1.ignorePattern=([^ ]*\.tmp)
a1.sources.r1.fileHeader = true
# Describe the sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = /flume/enents/%m-%d/%H%M/%S
a1.sinks.k1.hdfs.filePrefix = events-
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 5
a1.sinks.k1.hdfs.roundUnit =second
a1.sinks.k1.hdfs.useLocalTimeStamp = true
# 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
执行效果
使用spooldir进行source设置,监控目录下新产生的文件
输出端的sink则连接至hdfs,以每5秒频率产生一个文件夹,同时flume会将日志写入到此文件夹中。(当监控的source没有产生变化时,不会有events输出,因此不会产生文件)
文件读取
报错了,产生的是二进制文件
[atguigu@master test]$ hdfs dfs -cat /flume/enents/12-06/1045/50/events-.1733453151446
2024-12-06 10:53:06,283 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
²3ڂOaag.apache.hadoop.io.LongWritable"org.apache.hadoop.io.BytesWritablV;ꨄn
²3;