首页 文章

Flume HDFS Sink在HDFS上生成大量小文件

提问于
浏览
1

我有一个玩具设置使用flume向hdfs发送log4j消息 . 我无法配置hdfs接收器以避免许多小文件 . 我以为我可以配置hdfs接收器来创建一个新文件,每次文件大小达到10mb,但它仍然创建大约1.5KB的文件 .

这是我目前的水槽配置:

a1.sources=o1
a1.sinks=i1
a1.channels=c1

#source configuration
a1.sources.o1.type=avro
a1.sources.o1.bind=0.0.0.0
a1.sources.o1.port=41414

#sink config
a1.sinks.i1.type=hdfs
a1.sinks.i1.hdfs.path=hdfs://localhost:8020/user/myName/flume/events
#never roll-based on time
a1.sinks.i1.hdfs.rollInterval=0
#10MB=10485760
a1.sinks.il.hdfs.rollSize=10485760
#never roll base on number of events
a1.sinks.il.hdfs.rollCount=0

#channle config
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100

a1.sources.o1.channels=c1
a1.sinks.i1.channel=c1

3 回答

  • 4

    这是你在conf中的拼写错误 .

    #sink config
    a1.sinks.i1.type=hdfs
    a1.sinks.i1.hdfs.path=hdfs://localhost:8020/user/myName/flume/events
    #never roll-based on time
    a1.sinks.i1.hdfs.rollInterval=0
    #10MB=10485760
    a1.sinks.il.hdfs.rollSize=10485760
    #never roll base on number of events
    a1.sinks.il.hdfs.rollCount=0
    

    在'rollSize'和'rollCount'行中,您将 il 设为 i1 . 请尝试使用DEBUG,然后你会发现:

    [SinkRunner-PollingRunner-DefaultSinkProcessor] (org.apache.flume.sink.hdfs.BucketWriter.shouldRotate:465)  - rolling: rollSize: 1024, bytes: 1024
    

    由于 il ,正在使用rollSize 1024的默认值 .

  • 0

    HDFS Sink具有属性 hdfs.batchSize (默认为100),其描述了"number of events written to file before it is flushed to HDFS" . 我认为这是你的问题 .

    还要考虑检查所有其他属性:HDFS Sink .

  • 0

    这可能是因为内存通道及其容量 . 我想它一旦容量变满就将数据转储到HDFS . 你尝试使用文件通道而不是内存吗?

相关问题