我有一个玩具设置发送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
3条答案
按热度按时间lokaqttq1#
这可能是因为内存通道及其容量。我猜一旦它的容量满了,它就会将数据转储到hdfs。你试过用文件通道代替内存吗?
kulphzqa2#
这是你在conf中的拼写错误。
在“rollsize”和“rollcount”行中,您将il设置为i1。请尝试使用debug,然后您会发现:
由于il的原因,将使用默认值rollsize 1024。
ppcbkaq53#
hdfs接收器具有属性
hdfs.batchSize
(默认值100),它描述“在刷新到hdfs之前写入文件的事件数”。我想这是你的问题。还要考虑检查所有其他属性:hdfs sink。