Flume - 将文件从文件服务器加载到HDFS

时间:2013-07-29 12:28:19

标签: hadoop mapreduce flume

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

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

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

  4.   

问题

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

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

  4.   

1 个答案:

答案 0 :(得分:1)

问题的可能答案。

已经有一段时间了,我使用了水槽。仍然希望他们能帮忙。

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

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

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

对于拖尾文件,您可以check this out

将目录实施为多个文件的来源可以是tracked here

您可以阅读HDFS sink here,它可以写入HDFS

  

<强> 2 即可。我知道有CombineFileInputFormat和SequenceFiles   合并这些文件进行处理,但这些较小的文件可以   甚至在它存储在HDFS之前连接?

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

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

注意:

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

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

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

因此,事件的最大大小是byte []可以采用的。我不知道你的文件是否可以放入其中。你必须自己测试一下。此外,还有其他一些条件,我现在不记得,这可能会妨碍您将文件传输到HDFS。