【问题标题】:Copy files from my local filesystem to HDFS using Flume使用 Flume 将文件从本地文件系统复制到 HDFS
【发布时间】:2016-07-12 15:57:38
【问题描述】:

使用 java 中的文件生成器,我将在本地文件系统中有一个目录和文件流,我需要在 HDFS 中移动它们。我在互联网上搜索,发现我可以使用 Flume,但是我没有找到任何资源可以向我解释如何做到这一点。您知道如何实现吗?

谢谢

【问题讨论】:

  • 需要更多详细信息才能给您带来一些成功。首先,你有几台机器,或者你在同一个节点上做所有事情(例如测试)。文件的性质是什么:是您将一次性读取的静态文件还是不时创建的日志文件?
  • 目前,我使用同一个节点进行测试。它将是用户创建的日志文件,每次创建之间的间隔可以从几分钟到几小时不等。但现在我正在生成随机文件,以查看 HDFS 将如何响应小文件的流式传输。

标签: hadoop hdfs flume flume-ng


【解决方案1】:

我从来没有在同一台机器上做过(正如你在评论中提到的,关于环境),所以你可能需要做一些测试和调整才能使以下配置正常工作。

在您的情况下,由于文件将在一个(或多个目录)中动态创建,我建议配置Spooling Directory Source(每个目录)和HDFS Sink。在 Flume 安装文件夹的conf 目录下创建一个文件test.conf 并放入类似的配置:

# Name the components on this agent
agent.sources = file-source
agent.sinks = hdfs-sink
agent.channels = mem-channel

# Associate channel with source and sink
agent.sources.file-source.channels = mem-channel
agent.sinks.hdfs-sink.channel = mem-channel

# Configure the source
agent.sources.file-source.type = spooldir
agent.sources.file-source.spoolDir = /tmp/spool/
agent.sources.file-source.fileHeader = true

# Configure the sink
agent.sinks.hdfs-sink.type = hdfs
agent.sinks.hdfs-sink.hdfs.path = /tmp/log.log
agent.sinks.hdfs-sink.hdfs.fileType = DataStream
agent.sinks.hdfs-sink.hdfs.path = /flume/test/

# Use a channel which buffers events in memory
agent.channels.mem-channel.type = memory
agent.channels.mem-channel.capacity = 1000
agent.channels.mem-channel.transactionCapacity = 100

要运行代理,请在 Flume 安装目录中执行以下命令:

bin/flume-ng agent -n agent -c conf -f conf/test.conf

开始将文件放入/tmp/spool/ 并检查它们是否出现在 HDFS 中。

当你要分发系统时,我建议在客户端使用Avro Sink,在服务器上使用Avro Source,你会在那儿得到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 2015-03-28
    • 2014-08-29
    • 1970-01-01
    • 2022-01-11
    • 2012-11-21
    • 1970-01-01
    相关资源
    最近更新 更多