簡體   English   中英

從卡夫卡到帶有笛子的hdfs僅一個文件

[英]only one file to hdfs from kafka with flume

我正在嘗試通過水槽將數據從kafka放入hdfs。 kafka_producer每10秒發送一條消息。 我想將所有消息收集在hdfs上的一個文件中。 這是我使用的水槽的配置,但是它在hdfs上存儲了許多文件(一個用於發送消息):

agent1.sources.kafka-source.type = org.apache.flume.source.kafka.KafkaSource
agent1.sources.kafka-source.zookeeperConnect = localhost:2181
agent1.sources.kafka-source.topic = prova
agent1.sources.kafka-source.groupId = flume
agent1.sources.kafka-source.channels = memory-channel
agent1.sources.kafka-source.interceptors = i1
agent1.sources.kafka-source.interceptors.i1.type = timestamp
agent1.sources.kafka-source.kafka.consumer.timeout.ms = 100
agent1.channels.memory-channel.type = memory
agent1.channels.memory-channel.capacity = 10000
agent1.channels.memory-channel.transactionCapacity = 1000
agent1.sinks.hdfs-sink.type = hdfs
agent1.sinks.hdfs-sink.hdfs.path = hdfs://localhost:9000/input
agent1.sinks.hdfs-sink.hdfs.rollInterval = 5
agent1.sinks.hdfs-sink.hdfs.rollSize = 0
agent1.sinks.hdfs-sink.hdfs.rollCount = 0
agent1.sinks.hdfs-sink.hdfs.fileType = DataStream
agent1.sinks.hdfs-sink.channel = memory-channel
agent1.sources = kafka-source
agent1.channels = memory-channel
agent1.sinks = hdfs-sink

PS我從file.csv開始。 kafka生產者獲取文件並選擇一些感興趣的字段,然后每10秒一次發送一個條目。 Flume將條目存儲在hadoop hdfs上,但是存儲在許多文件中(1個條目= 1個文件)。 我希望所有條目都在一個文件中。 如何更改水槽的配置?

看來實際上已經設置了水槽以在HDFS上為每個輸入文件創建一個文件。

如此處的建議您可以通過編寫一個定期的pig(或mapreduce)作業來處理此問題,該作業將所有輸入文件合並在一起。

減少文件數量的另一種選擇是減少入站文件的頻率。

將rollInterval設置為0,因為您不想基於時間制作其他文件。 如果要基於數字條目或事件進行更改,請更改rollCount值。 例如,如果要將10個事件或條目保存在一個文件中:

agent1.sinks.hdfs-sink.hdfs.rollInterval = 0
agent1.sinks.hdfs-sink.hdfs.rollSize = 0
agent1.sinks.hdfs-sink.hdfs.rollCount = 10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM