Flume 需要时间将文件上传到 HDFS

Posted

技术标签:

【中文标题】Flume 需要时间将文件上传到 HDFS【英文标题】:Flume takes time to upload a file to HDFS 【发布时间】:2016-11-10 10:24:26 【问题描述】:

在检查为什么 Flume 需要时间将平面文件上传到 HDFS 方面,我需要获得您的帮助。我尝试只上传 1 个文件(10MB 大小),但是 17 小时过去了,它仍在使用“.tmp”上传。当我检查日志详细信息时,它似乎卡在了频道中:

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.LogFile 关闭 RandomReader /data5/flumedata/log-1

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.LogFile 关闭 RandomReader /data5/flumedata/log-2

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.LogFile 关闭 RandomReader /data5/flumedata/log-3

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.LogFile 关闭 RandomReader /data5/flumedata/log-4

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.LogFile 关闭 RandomReader /data5/flumedata/log-5

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.LogFile 关闭 RandomReader /data5/flumedata/log-6

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.LogFile 关闭 RandomReader /data5/flumedata/log-7

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.LogFile 关闭 RandomReader /data5/flumedata/log-8

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.EventQueueBackingStoreFile CheckpointBackupCompleted

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.LogFile 关闭 RandomReader /data5/flumedata/log-9

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.LogFile 关闭 RandomReader /data5/flumedata/log-10

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.LogFile 关闭 RandomReader /data5/flumedata/log-11

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.LogFile 关闭 RandomReader /data5/flumedata/log-12

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.LogFile 关闭 RandomReader /data5/flumedata/log-13

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.LogFile 关闭 RandomReader /data5/flumedata/log-14

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.LogFile 关闭 RandomReader /data5/flumedata/log-15

11 月 10 日,X:XX:XX.XXX PM INFO org.apache.flume.channel.file.LogFile 关闭 RandomReader /data5/flumedata/log-16

这里是配置:

agent.sources = source1
agent.channels = channel1
agent.sinks = sinks1

agent.sources.source1.type = spooldir
agent.sources.source1.spoolDir = /data1/forupload
agent.sources.source1.channels = channel1
agent.sources.source1.basenameHeader = true


agent.channels.channel1.type = file
agent.channels.channel1.capacity = 1000000
agent.channels.channel1.transactionCapacity = 10000
agent.channels.channel1.checkpointDir = /data5/checkpoint
agent.channels.channel1.dataDirs = /data5/flumedata
agent.channels.channel1.useDualCheckpoints = true
agent.channels.channel1.backupCheckpointDir = /data5/backupcheckpoint
agent.channels.channel1.maxFileSize = 900000000

agent.sinks.sinks1.type = hdfs
agent.sinks.sinks1.hdfs.path = /user/flume
agent.sinks.sinks1.hdfs.filetype = DataStream
agent.sinks.sinks1.channel = channel1
agent.sinks.sinks1.hdfs.filePrefix = %basename
agent.sinks.sinks1.hdfs.fileSuffix = .csv
agent.sinks.sinks1.hdfs.rollInterval = 0
agent.sinks.sinks1.hdfs.rollSize = 0
agent.sinks.sinks1.hdfs.rollCount = 0

感谢您对此的帮助

【问题讨论】:

【参考方案1】:

我认为所有数据都已发送。您可以检查您要发送的文件是否已被删除到file.name.COMPLETED。如果它已被删除,则该文件应该已经发送。

但是,文件通道中可能仍有一些数据,因为数据是批量传输的。如果剩余数据的大小小于批量大小,则将留在通道中。

为了完成发送,您可以使用kill -SIGTERM flume_process_id 杀死进程。当 Flume 接收到这个信号时,它会将所有剩余的数据刷新到 HDFS。 HDFS上的文件会被重命名,即去掉.tmp后缀。

【讨论】:

感谢您的回复!我实际上正在寻找有效使用 Flume 的选项,而无需有人手动终止将所有数据完全上传到 HDFS 的过程,消除漫长的等待时间并在上传时将其保留为 1 个文件(因为从现在开始,文件拆分)。我错过了配置中的任何内容吗? @bertsnipe Flume 将流数据从源移动到目标。它假设数据是无穷无尽的。因此,当您将另一个文件放入 spool 目录时,Flume 会将新文件发送到通道,而第一个文件剩下的任何数据都将发送到 sink 和 hdfs。如果你只想用 Flume 发送一个文件,你必须手动杀死它。我也是 Flume 新手,如果你有更好的解决方案,请纠正我。 另外,您的 HDFS 接收器配置禁止滚动文件。所以所有数据都应该放在 HDFS 上的单个文件中。

以上是关于Flume 需要时间将文件上传到 HDFS的主要内容,如果未能解决你的问题,请参考以下文章

编写 Flume 配置以将不断增长的文件上传到 HDFS

flume与kafka结合上传文件到HDFS上

大数据开发:flume上传HDFS

批量上传文件到HDFS的Shell脚本

Flume 将 txt 文件更改为二进制文件

Flume学习系列----实战Spooling到HDFS