水槽仍然保留 .tmp 文件并且没有将文件完全复制到 HDFS

Posted

技术标签:

【中文标题】水槽仍然保留 .tmp 文件并且没有将文件完全复制到 HDFS【英文标题】:flume still keep the .tmp file and not copying the file completely to HDFS 【发布时间】:2016-06-21 13:37:28 【问题描述】:

您好,我正在使用 flume 将文件从 spooling 目录复制到 HDFS,使用文件作为通道。

#Component names
a1.sources = src
a1.channels = c1
a1.sinks = k1

#Source details
a1.sources.src.type = spooldir
a1.sources.src.channels = c1
a1.sources.src.spoolDir = /home/cloudera/onetrail
a1.sources.src.fileHeader = false
a1.sources.src.basenameHeader = true
# a1.sources.src.basenameHeaderKey = basename
a1.sources.src.fileSuffix = .COMPLETED
a1.sources.src.threads = 4
a1.sources.src.interceptors = newint
a1.sources.src.interceptors.newint.type = timestamp

#Sink details
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
a1.sinks.k1.hdfs.path = hdfs:///data/contentProviders/cnet/%Y%m%d/
# a1.sinks.k1.hdfs.round = false
# a1.sinks.k1.hdfs.roundValue = 1
# a1.sinks.k1.hdfs.roundUnit = second
a1.sinks.k1.hdfs.writeFormat = Text
a1.sinks.k1.hdfs.fileType = DataStream
#a1.sinks.k1.hdfs.file.Type = DataStream
a1.sinks.k1.hdfs.filePrefix = %basename
# a1.sinks.k1.hdfs.fileSuffix = .xml
a1.sinks.k1.threadsPoolSize = 4

# use a single file at a time
a1.sinks.k1.hdfs.maxOpenFiles = 1

# rollover file based on maximum size of 10 MB
a1.sinks.k1.hdfs.rollCount = 0
a1.sinks.k1.hdfs.rollInterval = 0
a1.sinks.k1.hdfs.rollSize = 0
a1.sinks.k1.hdfs.batchSize = 12

# Channel details
a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /tmp/flume/checkpoint/
a1.channels.c1.dataDirs = /tmp/flume/data/

# Bind the source and sink to the channel
a1.sources.src.channels = c1
a1.sinks.k1.channels = c1

通过上述配置,它能够将文件复制到 hdfs,但我面临的问题是一个文件保持为 .tmp 而不是复制完整的文件内容。

谁能帮我解决可能是什么问题。

【问题讨论】:

【参考方案1】:

.tmp 文件在被 Flume“滚动”后将重命名为其最终名称。

你所有的翻转设置都是 0,这意味着“永远保持直播”。

将一个或多个设置为非零值确定 Flume 何时认为文件完成,以便它可以关闭它并打开下一个。

有关详细信息,请参阅documentation here on Flume Sinks。

【讨论】:

以上是关于水槽仍然保留 .tmp 文件并且没有将文件完全复制到 HDFS的主要内容,如果未能解决你的问题,请参考以下文章

C# - 仅当文件完全复制到磁盘时才复制文件

如何保留 perl 变量的尾随空格?

使用内存通道增加水槽中的文件大小

QFile::copy 是不是将源文件权限保留在复制的文件中?

在 Eclipse 中完全重命名项目

02-04 文件管理命令