问题的可能答案。
这是一段时间以来,我使用了水槽。仍然希望他们帮助。
- 可水槽用来读取更频繁的文件服务器,这些较小的文件,并存储在HDFS?
由于数据源是可定制的,水槽可用于传输事件的数据包括大量的数量,但不限于网络流量数据,社交媒体产生的数据,电子邮件和几乎任何数据源可能。
注意:Flume不支持tail
作为源。可以将tail
命令包装在一个可执行源中以流式传输该文件。
对于尾矿库文件,您可以check this out
目录为多个文件源的实现可以tracked here
你可以阅读有关HDFS sink here,可以写信给HDFS
。我知道有CombineFileInputFormat和SequenceFiles 将这些文件合并处理,但是这些较小的文件是否可以在存储在HDFS中之前连接成 ?
Flume基本上在Event机制上工作。可以根据所用时间或数据大小或事件数量定期滚动文件(关闭当前文件并创建一个新文件)。检查HDFS接收器的相同链接。
如果文件数量很大,可以使用CombineFileINputFormat。在写入HDFS之前,我不知道如何做到这一点。
注:
正如我已经说过水槽工作在基于事件的机制,据我知道这不是传输文件。如果你看看这个interface for Event,你会注意到下面的方法
byte[] getBody()
:返回此事件中包含的数据的原始字节数组。
void setBody(byte[] body)
:设置此事件中包含的数据的原始字节数组。
因此,一个事件的最大大小是byte []可以采用的大小。我不知道你的文件可以放在那里。你必须自己测试它。此外,还有其他的条件,我现在不记得,可能会阻碍你将文件传输到HDFS。
谢谢JtheRocker。实际上,我没有对文件服务器目录的任何控制,并且文件中不需要尾部。我需要flume在网络位置将文件传输到HDFS,并在到达时或间隔时传输。这些文件的平均速度可能是每小时1000个文件,最高文件可能达到3000个。 – learninghuman
@ManikandanKannan:请检查 - 我已经更新了答案。 –
谢谢。如果不是flume,还有其他方式将数据摄入HDFS吗?一种选择是将文件加载到hadoop namenode的本地文件系统中,然后使用HDFS put命令加载到HDFS中。 – learninghuman