【问题标题】:Flume Twitter Stream rolling small files in HDFSFlume Twitter Stream 在 HDFS 中滚动小文件
【发布时间】:2015-08-27 20:56:03
【问题描述】:

我想我已经尝试了所有更改配置文件的组合。我还在某处看到这可能是由于我的复制因子为 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

【问题讨论】:

标签: hadoop hdfs twitter4j flume


【解决方案1】:

如果rollIntervalbatchSizerollSizerollCount 不起作用,则保持看起来hdfs.callTimeout

因为有人说减少复制因子可能是解决方案。

降低复制因子意味着减少hdfs操作时间,根据flume用户guidelinecallTimeout的默认值是10000毫秒。

其他线索是

【讨论】:

    【解决方案2】:

    所以我终于弄清楚了这个问题。 (注意我正在运行一个单节点测试集群)。 stackoverflow 中的解决方案之一是将 dfs.replication 因子设置为 1,我这样做了,但这并没有解决问题。

    由于某种原因,发生的事情是在我的水槽代理中,配置不匹配。 HDFS Sink 有一个名为minBlockReplicas 的参数,它告诉它需要有多少块副本,如果没有指定,它会从默认的 HDFS 配置文件(我认为我设置为 1)中提取该参数。看起来它为dfs.replicationdfs.namennode.replication.min 获得了不同的值。

    我绕过了我直接使用修改我的水槽文件的错误

    TwitterAgent.sinks.HDFS.hdfs.minBlockReplicas = 1
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

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

      a1.sinks.HDFS.hdfs.minBlockReplicas = 1 
      

      【讨论】:

      • 请不要添加 works-for-to-to cmets 作为答案 - 一旦你有足够的声誉,你就可以投票/评论其他答案:-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      • 2021-03-25
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      相关资源
      最近更新 更多