我正在尝试使用水槽假脱机目录摄取到 HDFS(SpoolDir
我正在使用Cloudera Hadoop 5.4.2。(Hadoop 2.6.0,Flume 1.5.0)。
它适用于较小的文件,但适用于较大的文件时失败。请在下面找到我的测试场景:
在实际场景中,我们的文件大小约为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无法处理较大文件的已知问题。
当做
-奥贝德
尝试使用文件通道,因为它比内存通道更可靠。
使用以下配置添加文件通道。
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
我用几个大小的文件测试了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