flume假脱机目录源:无法加载文件较大的文件

dgsult0t  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(497)

我正在尝试使用flume spooling目录摄取hdfs(spooldir>memory channel>hdfs)。
我正在使用ClouderaHadoop5.4.2(hadoop 2.6.0和flume 1.5.0)。
它可以很好地处理较小的文件,但是在处理较大的文件时会失败。请在下面找到我的测试场景:
大小为KB到50-60MB的文件,未经处理。
大于50-60mb的文件,它将50mb写入hdfs,然后我发现flume代理意外退出。
Flume日志上没有错误消息。我发现它多次尝试创建“.tmp”文件(hdfs),每次都会在意外退出之前写入数兆字节(有时是2mb,有时是45mb)。一段时间后,最后尝试的“.tmp”文件重命名为completed(“.tmp”已删除),源spooldir中的文件也重命名为“.completed”,尽管完整文件未写入hdfs。
在真实场景中,我们的文件大小约为2gb。因此,需要一些健壮的flume配置来处理工作负载。
注:
flume代理节点是hadoop集群的一部分,而不是datanode(它是一个边缘节点)。
spool目录是运行flume代理的同一服务器上的本地文件系统。
都是物理服务器(不是虚拟服务器)。
在同一个集群中,我们使用flume运行twitter数据馈送(尽管数据量非常小)。
请找到我在这里使用的flume.conf文件:


############# start flume.conf####################

spoolDir.sources = src-1

spoolDir.channels = channel-1

spoolDir.sinks = sink_to_hdfs1

######## source

spoolDir.sources.src-1.type = spooldir

spoolDir.sources.src-1.channels = channel-1

spoolDir.sources.src-1.spoolDir = /stage/ETL/spool/

spoolDir.sources.src-1.fileHeader = true

spoolDir.sources.src-1.basenameHeader =true

spoolDir.sources.src-1.batchSize = 100000

######## channel

spoolDir.channels.channel-1.type = memory

spoolDir.channels.channel-1.transactionCapacity = 50000000

spoolDir.channels.channel-1.capacity = 60000000

spoolDir.channels.channel-1.byteCapacityBufferPercentage = 20

spoolDir.channels.channel-1.byteCapacity = 6442450944

######## sink

spoolDir.sinks.sink_to_hdfs1.type = hdfs

spoolDir.sinks.sink_to_hdfs1.channel = channel-1

spoolDir.sinks.sink_to_hdfs1.hdfs.fileType = DataStream

spoolDir.sinks.sink_to_hdfs1.hdfs.path = hdfs://nameservice1/user/etl/temp/spool

spoolDir.sinks.sink_to_hdfs1.hdfs.filePrefix = %{basename}-

spoolDir.sinks.sink_to_hdfs1.hdfs.batchSize = 100000

spoolDir.sinks.sink_to_hdfs1.hdfs.rollInterval = 0

spoolDir.sinks.sink_to_hdfs1.hdfs.rollSize = 0

spoolDir.sinks.sink_to_hdfs1.hdfs.rollCount = 0

spoolDir.sinks.sink_to_hdfs1.hdfs.idleTimeout = 60

############# end flume.conf####################

请建议我是否有任何问题,我的配置或我遗漏了什么。
或者这是一个已知的问题,flume spooldir无法处理更大的文件。
当做,
-奥贝德
我已经将同一主题发布到另一个开放社区,如果我从另一个社区获得解决方案,我将在这里更新,反之亦然。

628mspwn

628mspwn1#

我用几个大小的文件测试了flume,最后得出结论“flume不适合较大的文件”。
所以,我终于开始使用hdfs-nfs网关了。这真的很酷,现在我甚至不需要在本地存储spool目录。使用scp将文件直接推送到nfs挂载的hdfs。
希望它能帮助像我一样面临同样问题的人。
谢谢,奥贝德

rjjhvcjd

rjjhvcjd2#

尝试使用文件通道,因为它比内存通道更可靠。
使用以下配置添加文件通道。
spooldir.channels=通道1
spooldir.channels.channel-1.type=文件
spooldir.channels.channel-1.checkpointdir=/mnt/flume/checkpoint
spooldir.channels.channel-1.datadirs=/mnt/flume/data

相关问题