Flume 解决 HDFS Sink写入HDFS小文件的问题

  • 使用Flume的HDFS Sink,将log文件中的数据写入HDFS,进到UI发现产生了大量的小文件,每个小文件都是1K多,而占一个128M的block。

在这里插入图片描述

  • 解决:关键是以下三个关键变量的配置,如果要按照某一项来,比如rollSize,则其他两项设为0。
NameDefaultDescription
hdfs.rollInterval30滚动当前文件前等待的秒数 ( 设为0 =从不根据时间间隔滚动 )
hdfs.rollSize1024触发滚动的文件大小,以字节为单位 (设为0=从不基于文件大小滚动)
hdfs.rollCount10在滚动之前写入文件的事件数 (设为0 =从不根据事件数滚动)
  • 下面贴出 flume-smallHdfs.conf 中的配置信息,按照10K来滚动。
# agent的组件名称
a1.sources = r1
a1.channels = c1
a1.sinks = k1

# source配置
a1.sources.r1.type = TAILDIR
a1.sources.r1.channels = c1
a1.sources.r1.positionFile = /opt/flume/checkpoint/behavior/taildir_position.json
a1.sources.r1.filegroups = f1 f2
a1.sources.r1.filegroups.f1 = /opt/apache-tomcat-7.0.72-01/logs/LogsCollect/atguigu.log
a1.sources.r1.filegroups.f2 = /opt/apache-tomcat-7.0.72-02/logs/LogsCollect/atguigu.log
a1.sources.r1.fileHeader = true

# channel配置
a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /opt/flume/checkpoint/behavior_collect
a1.channels.c1.dataDirs = /opt/flume/data/behavior_collect
a1.channels.c1.maxFileSize = 104857600
a1.channels.c1.capacity = 90000000
a1.channels.c1.keep-alive = 60

# sink配置
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
a1.sinks.k1.hdfs.path = hdfs://node2:8020/flume/datastream
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.idleTimeout = 10
a1.sinks.k1.hdfs.rollInterval = 0
a1.sinks.k1.hdfs.rollSize = 10240  # 按照10k来滚动
a1.sinks.k1.hdfs.rollCount = 0
a1.sinks.k1.hdfs.useLocalTimeStamp=false
  • 注意:hdfs.idleTimeout —— 关闭非活动文件的超时时间(0 =禁用自动关闭空闲文件)。
  • 下面是修改配置文件后,写入HDFS的文件大小,发现生效了。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值