flume hdfs sink在hdfs上生成许多小文件

fafcakar  于 2021-06-04  发布在  Flume
关注(0)|答案(3)|浏览(455)

我有一个玩具设置发送log4j消息到hdfs使用flume。我无法配置hdfs接收器以避免许多小文件。我想我可以配置hdfs接收器,以便在每次文件大小达到10mb时创建一个新文件,但它仍在创建大约1.5kb的文件。
这是我当前的Flume配置:

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
lokaqttq

lokaqttq1#

这可能是因为内存通道及其容量。我猜一旦它的容量满了,它就会将数据转储到hdfs。你试过用文件通道代替内存吗?

kulphzqa

kulphzqa2#

这是你在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。

ppcbkaq5

ppcbkaq53#

hdfs接收器具有属性 hdfs.batchSize (默认值100),它描述“在刷新到hdfs之前写入文件的事件数”。我想这是你的问题。
还要考虑检查所有其他属性:hdfs sink。

相关问题