0

我想经常将文件从文件服务器加载到 HDFS。较小的文件(2 MB 到 20 MB)经常被加载到文件服务器。这些文件必须加载到 HDFS 以进行 MR 进程。在这些文件可用于 Map-Reduce 作业之前,我看到了 2 个问题。

  1. 如果这些文件在运行 MR 作业时被挑选并加载到 HDFS 中,那么将这些文件加载​​到 HDFS 本​​身需要很长时间。

  2. 这些较小的文件必须为 MR 作业合并。

问题

  1. 是否可以使用 Flume 更频繁地读取文件服务器中这些较小的文件并存储在 HDFS 中?

  2. 我知道有 CombineFileInputFormat 和 SequenceFiles 可以组合这些文件进行处理,但是这些较小的文件甚至可以在存储到 HDFS 之前连接起来吗?

4

1 回答 1

1

问题的可能答案。

已经有一段时间了,我用的是flume。仍然希望他们有所帮助。

  1. 是否可以使用 Flume 更频繁地读取文件服务器中这些较小的文件并存储在 HDFS 中?

由于数据源是可定制的,Flume 可用于传输大量事件数据,包括但不限于网络流量数据、社交媒体生成的数据、电子邮件消息和几乎任何可能的数据源。

注意:Flume 不支持tail作为源。可以将命令包装tail在 exec 源中以流式传输文件。

对于拖尾文件,您可以检查一下

可以在此处跟踪作为多个文件源的目录的实现

您可以在此处阅读有关HDFS sink 的信息,它可以写入 HDFS

2 . 我知道有 CombineFileInputFormat 和 SequenceFiles 可以组合这些文件进行处理,但是这些较小的文件甚至可以在存储到 HDFS 之前连接起来吗?

Flume 基本上适用于 Event 机制。可以根据经过的时间或数据大小或事件数定期滚动文件(关闭当前文件并创建新文件)。检查 HDFS 接收器的相同链接。

如果文件数量很大,您可能可以使用 CombineFileINputFormat。在写入 HDFS 之前,我不知道如何做到这一点。

笔记:

正如我已经说过的那样,水槽适用于基于事件的机制,据我所知,它不适用于传输文件。如果您查看Event 的此接口,您会注意到以下方法

byte[] getBody():返回此事件中包含的数据的原始字节数组。

void setBody(byte[] body):设置此事件中包含的数据的原始字节数组。

因此,事件的最大大小是 byte[] 可以占用的大小。不知道你的文件能不能放进去。你必须自己测试它。此外,还涉及其他条件,我现在不记得了,这可能会妨碍您将文件传输到 HDFS。

于 2013-07-29T14:44:30.060 回答