我想经常将文件从文件服务器加载到HDFS。较小的文件(2 MB到20 MB)经常被加载到文件服务器。必须将这些文件加载到HDFS for MR进程中。 在这些文件可用于Map-Reduce作业之前,我看到了2个问题。
如果在运行MR作业时挑选这些文件并将其加载到HDFS中,则将这些文件加载到HDFS本身需要很长时间。
- 醇>
这些较小的文件必须合并为MR作业。
问题
可以使用Flume更频繁地读取文件服务器中的这些较小文件并存储在HDFS中吗?
- 醇>
我知道有CombineFileInputFormat和SequenceFiles来组合这些文件进行处理,但是这些可以吗 哪个较小的文件甚至在存储在HDFS之前就连接起来了?
答案 0 :(得分:1)
问题的可能答案。
已经有一段时间了,我使用了水槽。仍然希望他们能帮忙。
- 可以使用Flume更频繁地读取文件服务器中的这些较小文件并存储在HDFS中吗?
醇>
由于数据源是可自定义的,因此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。