当前位置: 首页 > 知识库问答 >
问题:

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

陆畅
2023-03-14

我正在尝试使用水槽假脱机目录摄取到 HDFS(SpoolDir

我正在使用Cloudera Hadoop 5.4.2。(Hadoop 2.6.0,Flume 1.5.0)。

它适用于较小的文件,但适用于较大的文件时失败。请在下面找到我的测试场景:

    < li >千字节到50-60兆字节的文件,处理时没有问题。 < li >大于50-60MB的文件,它将大约50MB写入HDFS,然后我发现flume代理意外退出。 < Li > flume日志中没有错误消息。我发现它在试图创造”。tmp”文件(HDFS),每次都在意外退出前写入几兆字节(有时2MB,有时45MB)。过了一段时间,最后试了试”。文件被重命名为已完成。tmp“已移除”),源spoolDir中的文件也重命名为”。已完成”虽然完整的文件没有写入HDFS。

在实际场景中,我们的文件大小约为2GB。因此,需要一些强大的水槽配置来处理工作负载。

注:

> < li>Flume代理节点是hadoop集群的一部分,而不是datanode(它是一个边缘节点)。 < li >假脱机目录是运行flume代理的同一服务器上的本地文件系统。 < li >所有都是物理服务器(不是虚拟的)。 < li >在同一个集群中,我们有twitter数据馈送,flume运行良好(尽管数据量非常小)。 < li>

请找到我在此处使用的以下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无法处理较大文件的已知问题。

当做

-奥贝德

  • 我已经将同一个主题发布到另一个开放社区,如果我从另一个社区得到解决方案,我会在这里更新,反之亦然。

共有2个答案

范嘉
2023-03-14

尝试使用文件通道,因为它比内存通道更可靠。

使用以下配置添加文件通道。

spoolDir.channel = channel-1

spoolDir.channels.channel-1.type=文件

spoolDir.channels.channel-1.checkpoint /mnt/flume/checkpoint

spoolDir.channels.channel-1.dataDirs=/mnt/flume/data

胡元明
2023-03-14

我用几个大小的文件测试了flume,最后得出结论“flume不适合大文件”。

所以,我终于开始使用HDFS NFS网关了。这真的很酷,现在我什至不需要本地存储中的假脱机目录。使用 scp 将文件直接推送到 nfs 挂载的 HDFS

希望它能帮助一些和我面临同样问题的人。

谢谢奥贝德

 类似资料:
  • 我有我有水槽代理如下 假脱机目录中的文件将自动重命名为 。已完成,文件应重命名为 。在水槽代理将该文件写入 HDFS 后完成,但在我的情况下,它将文件重命名为 .在代理运行之前已完成。它还将文件重命名为 .即使我只是手动将文件复制到假脱机目录,也已完成。 还有一个问题是删除策略即使在文件复制到HDFS后也不会删除文件。 代理将假脱机目录文件随机写入HDFS。 它还在HDFS创建了大量的tmp文件。

  • 我正在为我公司的 POC 实施一个小型 hadoop 集群。我正在尝试使用Flume将文件导入HDFS。每个文件都包含如下 JSON 对象(每个文件 1 个“长”行): “objectType”是数组中对象的类型(例如:事件、用户…)。 这些文件稍后将由多个任务根据“对象类型”进行处理。 我正在使用spoolDir源和HDFS接收器。 我的问题是: > 当flume写入HDFS时,是否可以保留源文

  • 在SQLcl中,将spool设置为file会出现错误“SP2-0556:文件名无效”。文件名中没有空格,路径正确(文件夹C:\Temp确实存在)。已经尝试过; 在Win10、OracleXE11上使用SQLcl 17.2.0。从sqlplus假脱机工作正常。如何将SQLcl设置为假脱机文件?

  • 问题内容: 我从Git存储库导入了一个项目,并在Eclipse中为其添加了Maven性质。在资源文件夹中,我添加了一个名为的配置文件。现在,每当我尝试从Java代码打开此文件时,都会得到。该文件也存在于maven编译项目后生成的文件夹中。 谁能告诉我可能是什么问题?我尝试加载此文件的Java代码是: 其中是一个对象。 谁能给我一些有关如何解决此问题的提示? 问题答案: 如果文件在编译后被放置在目标

  • 我从Git存储库中导入了一个项目,并在Eclipse中向其添加了Maven nature。在resources文件夹中,我添加了一个名为的配置文件。现在,每当我试图从我的Java代码打开这个文件时,我会得到。该文件也存在于maven编译项目后生成的文件夹中。

  • 刚开始学习Apache Flume。我遵循Flume官方入门网站上的说明: https://cwiki.apache.org/confluence/display/FLUME/Getting开始 按照上面链接上的说明操作后,几乎一切都很好。但是后来我找不到任何日志文件。我想日志文件在{flume.directory}/logs下。有办法找到水槽日志文件吗? 这是我的log4j.properties