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

Apache Flume花费的时间比创造性命令多

归翔
2023-03-14

我在本地文件系统中有24GB文件夹。我的任务是将该文件夹移动到HDFS。我有两种方法。1)hdfs dfs-复制来自本地 /home/data/ /home/

这大约需要 15 分钟才能完成。

2)使用水槽。

这是我的经纪人

spool_dir.sources = src-1
spool_dir.channels = channel-1
spool_dir.sinks = sink_to_hdfs
# source
spool_dir.sources.src-1.type = spooldir
spool_dir.sources.src-1.channels = channel-1
spool_dir.sources.src-1.spoolDir = /home/data/
spool_dir.sources.src-1.fileHeader = false
# HDFS sinks
spool_dir.sinks.sink_to_hdfs.type = hdfs
spool_dir.sinks.sink_to_hdfs.hdfs.fileType = DataStream
spool_dir.sinks.sink_to_hdfs.hdfs.path = hdfs://192.168.1.71/home/user/flumepush
spool_dir.sinks.sink_to_hdfs.hdfs.filePrefix = customevent
spool_dir.sinks.sink_to_hdfs.hdfs.fileSuffix = .log
spool_dir.sinks.sink_to_hdfs.hdfs.batchSize = 1000
spool_dir.channels.channel-1.type = file
spool_dir.channels.channel-1.checkpointDir = /home/user/spool_dir_checkpoint
spool_dir.channels.channel-1.dataDirs = /home/user/spool_dir_data
spool_dir.sources.src-1.channels = channel-1
spool_dir.sinks.sink_to_hdfs.channel = channel-1

这一步花了将近一个小时将数据推送到HDFS。

据我所知,Flume是分布式的,所以Flume加载数据的速度应该比copyFromLocal命令更快。

共有2个答案

梁盛
2023-03-14

Apache Flume不是用来将文件夹从本地文件系统移动或复制到HDFS的。Flume旨在有效地从许多不同的来源收集、聚合和移动大量日志数据到一个集中的数据存储。(参考:水槽用户指南)

如果你想移动大文件或目录,你应该使用hdfs dfs -copyFromLocal,正如你已经提到的。

贝德辉
2023-03-14

如果你看起来简单的读和写操作,flume将至少比你的配置慢2倍,因为你使用了文件通道-从磁盘读取的每个文件都被封装到flume事件(在内存中)中,然后通过文件通道序列化回磁盘。然后,接收器从文件通道(磁盘)读回事件,然后将其推送到hdfs。

您还没有在spoolDir源上设置blob反序列化器(因此它一次从源文件中读取一行,包装在flume Event中,然后写入文件通道),因此与HDFS接收器的默认rollXXX值相匹配,您将获得每10个事件/30s/1k的HDFS文件,而不是使用copyFromLocal获得的每个输入文件的文件。

所有这些因素加在一起会降低性能。如果想获得更好的性能,应该在spoolDir源上使用BlobDeserializer,并配以内存通道(但是要明白,内存通道不能保证在JRE过早终止的情况下事件的交付。

 类似资料:
  • 问题内容: 在UNIX / LINUX中,是否有一种简单的方法来跟踪命令花费的时间? 问题答案: 是的,请使用,例如 请咨询更多选项。连结。

  • 问题内容: 我已经阅读了许多示例,并最终使用以下代码从Java程序内部执行了命令行命令。 我已经用一个简单的ls命令测试了它,并且工作正常。当我尝试运行另一个命令时,它将永远耗费时间(保持运行25分钟,但尚未停止)。 当我在命令行上执行tabix命令时,我得到以下统计信息 4.173u 0.012s 0:04.22 99.0%0 + 0k 0 + 0io 0pf + 0w 因此,它应该很快完成。

  • 在分析我的代码时,我发现很大一部分时间(~5%)花在跳转指令上;特别是< code>jnbe 0x1800...。不幸的是,我不确定为什么跳转指令会花费这么多时间(比之前调用相同次数的< code>mulsd命令花费的时间百分比更高);它只是告诉处理器移动到一个特定的位置,实际上它本身并不做任何事情,对吗?我的最佳猜测是,对于这个特定的条件,分支预测失败了,这导致这个语句比我预期的要长。

  • 问题内容: 我想保存一个或数组。 我尝试与和一起使用,发现前者总是花费更少的时间。 我的实际数据要大得多,但在这里我仅展示一小段用于演示目的: 输出: 我的实际大小(字典中约有100,000个键)时差更加明显。 为什么在保存和加载时,泡菜比np.save花费的时间更长? 我什么时候应该使用? 问题答案: 因为只要书面对象不包含Python数据, numpy对象在内存中的表示方式比Python对象简

  • 我在学习java stream api时在代码中发现了这个问题。 这是我的代码 我在sts和inteliJ IDE上试用了这段代码,结果都是一样的。并行比顺序需要更长的时间。我的JDK有问题吗?请建议。

  • 问题内容: 我有一本书得很长。我使用setText()方法在JTextArea中显示它。它冻结了UI,并花费大量时间。我该如何解决? 这是SSCCE: 问题答案: 在与构造GUI分开的单独线程中创建DefaultStyledDocument似乎是创建巨大文本区域的最快方法。DefaultStyledDocument是线程安全的。 这是我用来测试DefaultStyledDocument的代码。我用