【问题标题】:Apache Flume taking more time than copyFromLocal commandApache Flume 比 copyFromLocal 命令花费更多时间
【发布时间】:2016-10-05 10:15:34
【问题描述】:

我的本​​地文件系统中有 24GB 的文件夹。我的任务是将该文件夹移动到 HDFS。我做了两种方法。 1) hdfs dfs -copyFromLocal /home/data/ /home/

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

2) 使用 Flume。

这是我的经纪人

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 命令更快地加载数据。

【问题讨论】:

  • 您对要放入 HDFS 的数据有任何进一步的信息吗?是日志数据吗?它会随着时间而改变吗?这些数据是在哪里生成的?

标签: hdfs flume flume-ng bigdata


【解决方案1】:

如果您在读取和写入操作方面看起来很简单,那么当您使用文件通道时,flume 的配置至少会慢 2 倍 - 从磁盘读取的每个文件都被封装到一个 Flume 事件中(在内存中)然后通过文件通道序列化回磁盘。然后接收器从文件通道(磁盘)读回事件,然后将其推送到 hdfs。

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

所有这些因素加起来会降低性能。如果您想获得更具可比性的性能,则应在 spoolDir 源上使用 BlobDeserializer,并结合内存通道(但要了解,在 JRE 过早终止的情况下,内存通道并不能保证事件的传递。

【讨论】:

    【解决方案2】:

    Apache Flume 不适用于将文件夹从本地文件系统移动或复制到 HDFS。 Flume 旨在有效地收集、聚合和移动来自许多不同来源的大量日志数据到集中式数据存储。 (参考:Flume User Guide

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

    【讨论】:

    • 我不同意你的开场白,这是 Flume 的一个用例 - 自动将数据从本地磁盘复制到 HDFS。
    • 根据flume.apache.org/FlumeUserGuide.html 的说法,“Apache Flume 是一个分布式、可靠且可用的系统,用于有效地收集、聚合和移动来自许多不同来源的大量日志数据到集中式数据存储。”。如果该数据是生成的日志文件,您可以使用 Flume 中的新功能 taildir 源。我认为那将是您提到的一个用例。
    猜你喜欢
    • 2021-04-29
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 2021-04-22
    • 2015-11-17
    相关资源
    最近更新 更多