flume推特流在hdfs中滚动小文件

ldioqlga  于 2021-05-30  发布在  Hadoop
关注(0)|答案(3)|浏览(425)

我想我已经尝试了改变配置文件的各种组合。我还发现可能是因为我的复制因子是3,所以我把它改成了1。我正在aws上使用cloudera manager。下面是我的配置文件,有什么想法吗?
在hdfs中,文件大小都在20kb以下,试图获得至少40-50mb。有趣的是,同一个配置文件正在我练习的虚拟机上写~60mb的文件(预装hadoop+工具)。查看下面的配置文件,有什么想法吗?


# The configuration file needs to define the sources,

# the channels and the sinks.

# Sources, channels and sinks are defined per agent,

# in this case called 'TwitterAgent'

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

TwitterAgent.sources.Twitter.type = com.cloudera.flume.source.TwitterSource
TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sources.Twitter.consumerKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TwitterAgent.sources.Twitter.consumerSecret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TwitterAgent.sources.Twitter.accessToken = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
TwitterAgent.sources.Twitter.accessTokenSecret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TwitterAgent.sources.Twitter.keywords = apple, grapes, fruits, strawberry, mango, pear
TwitterAgent.sinks.HDFS.channel = MemChannel
TwitterAgent.sinks.HDFS.type = hdfs
TwitterAgent.sinks.HDFS.hdfs.path = hdfs://123.456.789.us-west-2.compute.amazonaws.com:8020/user/flume/tweets
TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 0
TwitterAgent.sinks.HDFS.hdfs.batchSize = 100000
TwitterAgent.sinks.HDFS.hdfs.rollSize = 0
TwitterAgent.sinks.HDFS.hdfs.rollCount = 0

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

z9ju0rcb1#

是的,通过添加这一行,它解决了我在使用flume时在hdfs上创建多个小文件的问题

a1.sinks.HDFS.hdfs.minBlockReplicas = 1
bqf10yzr

bqf10yzr2#

如果 rollInterval , batchSize , rollSize & rollCount 都没用了,剩下的东西看起来 hdfs.callTimeout .
因为有人说减少复制因子可能是解决办法。
减少复制系数意味着减少 hdfs 操作时间和根据flume用户指南,默认值为 callTimeout 是10000毫秒。
其他线索是
如何:进行apacheflume性能调优(第1部分)
如何在接收器失败后强制flume ng处理积压的事件?
在flume ng中使用hdfs sink and rollinterval批处理90秒的日志信息

pn9klfpd

pn9klfpd3#

所以我终于找到了问题所在(注意我正在运行一个单节点测试集群)。stackoverflow中的一个解决方案是将dfs.replication factor设置为1,我这样做了,但没有解决问题。
由于某种原因,在我的flume代理中,配置不匹配。hdfs接收器有一个名为 minBlockReplicas ,它通知它需要有多少块副本,如果没有指定,它会从默认hdfs配置文件(我以为我设置为1)中提取该参数。看起来它得到了不同的价值 dfs.replication 或为 dfs.namennode.replication.min .
我通过使用

TwitterAgent.sinks.HDFS.hdfs.minBlockReplicas = 1

希望这有帮助。

相关问题