【问题标题】:Flume to HDFS split a file to lots of filesFlume to HDFS 将一个文件拆分为多个文件
【发布时间】:2015-02-12 14:12:53
【问题描述】:

我正在尝试将 700 MB 的日志文件从 flume 传输到 HDFS。 我已将flume 代理配置如下:

...
tier1.channels.memory-channel.type = memory
...
tier1.sinks.hdfs-sink.channel = memory-channel
tier1.sinks.hdfs-sink.type = hdfs
tier1.sinks.hdfs-sink.path = hdfs://***
tier1.sinks.hdfs-sink.fileType = DataStream
tier1.sinks.hdfs-sink.rollSize = 0

源是spooldir,通道是memory,接收器是hdfs

我也尝试发送一个 1MB 的文件,并将其拆分为 1000 个文件,每个文件的大小为 1KB。 我注意到的另一件事是传输非常慢,1MB 大约需要 1 分钟。 我做错了吗?

【问题讨论】:

    标签: hadoop hdfs flume flume-ng


    【解决方案1】:

    您还需要禁用滚动超时,通过以下设置完成:

    tier1.sinks.hdfs-sink.hdfs.rollCount = 0
    tier1.sinks.hdfs-sink.hdfs.rollInterval = 300
    

    rollcount 防止翻转,rollIntervall 这里设置为 300 秒,设置为 0 将禁用超时。你必须选择你想要的翻转机制,否则 Flume 只会在关闭时关闭文件。

    默认值如下:

    hdfs.rollInterval   30  Number of seconds to wait before rolling current file (0 = never roll based on time interval)
    hdfs.rollSize   1024    File size to trigger roll, in bytes (0: never roll based on file size)
    hdfs.rollCount  10  Number of events written to file before it rolled (0 = never roll based on number of events)
    

    【讨论】:

    • 谢谢,这行得通。但是现在,经过此配置,我无法传输更多文件。 Flume 说已经传输成功了,但是在 hdfs 中看不到文件。有什么建议吗?
    • flume 向 HDFS 写入事件时,总是会在目标目录中看到一个临时文件。您可以使用各种前缀和后缀来控制文件的命名。文件写入后,您还会看到 hdfs-sink 在 HDFS 上将其关闭。一个好的开始是将 log4j 的日志级别设置为调试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 2016-07-26
    • 2013-08-24
    • 2021-03-04
    • 1970-01-01
    相关资源
    最近更新 更多