0

次のような Flume の構成ファイルがあります。

TwitterAgent.sources = Twitter
TwitterAgent.channels = MemChannel
TwitterAgent.sinks = HDFS

TwitterAgent.sources.Twitter.type = 
TwitterAgent.sources.Twitter.channels = MemChannel

TwitterAgent.sources.Twitter.consumerKey = 
TwitterAgent.sources.Twitter.consumerSecret = 
TwitterAgent.sources.Twitter.accessToken = 
TwitterAgent.sources.Twitter.accessTokenSecret =  

TwitterAgent.sources.Twitter.keywords = 

TwitterAgent.sinks.HDFS.channel = MemChannel
TwitterAgent.sinks.HDFS.type = hdfs
TwitterAgent.sinks.HDFS.hdfs.path =
TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text
TwitterAgent.sinks.HDFS.hdfs.batchSize = 10000
TwitterAgent.sinks.HDFS.hdfs.rollSize = 0
TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000

TwitterAgent.channels.MemChannel.type = memory
TwitterAgent.channels.MemChannel.capacity = 10000
TwitterAgent.channels.MemChannel.transactionCapacity = 10000

私はプライベートフィールドを省略しました。これはツイートを Apache Hadoop にダウンロードしています。ただし、各ツイート ファイルは、別のツイートが作成される前に、ファイル内で約 30 ~ 60 KB にしか達しません。大量の小さなテキスト ファイルにならないように、より大きなファイルを作成するにはどうすればよいですか?

rollCount を 10000 にすればできると思ったのですが、そうではないようです。

4

2 に答える 2

3

これを解決するには、rollCount を 0 に、transactionCapactity を 1000 に変更して (容量より小さく保つため)、batchSize を 10000 のままにしました。正確には64MB)。

于 2013-08-13T22:23:29.077 に答える
0

あなたの答えでは、rollCount=0 を設定すると、flume は暗黙のデフォルト値に基づいて 30 秒間隔でファイルをロールします。たぶんそれがあなたが大きなサイズになっている理由です。

hdfs.rollInterval   30  <-- default
hdfs.rollSize   0   
hdfs.rollCount  0   
hdfs.batchSize  10000

ただし、本当にファイルサイズを制御したい場合は、rollSize を何らかの値に設定し、他のロール値を 0 に設定します。つまり、

hdfs.rollInterval   0
hdfs.rollSize   some_number_of_bytes    
hdfs.rollCount  0   
hdfs.batchSize  10000

hdfs.batchSize は、チャネルからプルしたいスループットの量であり、ファイルが最終的にどのくらいの大きさになるかを示すものではありません。

于 2015-11-06T03:27:53.080 に答える