Flume——sink(每5秒记录写入HDFS)

目录

设置

属性名称 默认值 说明
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;

相关推荐
liuze4081 天前
VMware虚拟机集群上部署HDFS集群
大数据·hadoop·hdfs
陌殇殇2 天前
Hadoop 002 — HDFS常用命令及SpringBoot整合操作
hadoop·spring boot·hdfs
£菜鸟也有梦4 天前
Flume进阶之路:从基础到高阶的飞跃
大数据·hive·hadoop·flume
北漂老男孩12 天前
Hadoop HDFS 体系结构与文件读写流程剖析
大数据·hadoop·hdfs·学习方法
北漂老男孩13 天前
Hadoop 大数据启蒙:初识 HDFS
大数据·hadoop·hdfs
北漂老男孩13 天前
Hadoop 大数据启蒙:深入解析分布式基石 HDFS
大数据·hadoop·分布式·hdfs·学习方法
线条113 天前
Flume 自定义拦截器开发实战:添加时间戳与 JSON 处理
大数据·json·flume
A尘埃13 天前
Kafka集成Flume/Spark/Flink(大数据)/SpringBoot
大数据·kafka·flume·集成
深兰科技15 天前
深兰科技董事长陈海波受邀出席2025苏商高质量发展(常州)峰会,共话AI驱动产业升级
人工智能·mongodb·intellij-idea·hbase·flume·新质生产力·深兰科技
IT成长日记16 天前
【Sqoop基础】Sqoop生态集成:与HDFS、Hive、HBase等组件的协同关系深度解析
hive·hdfs·sqoop