我有一个将数据流传输到HDFS接收器(附加到同一文件)的水槽,可以“捕捉”并从HDFS看到它。但是,MapReduce作业仅提取第一批刷新的对象(bacthSize = 100)。其余的都没有被捡起,尽管我可以看到其余的。当文件滚动(关闭)后执行MapRecue作业时,它将拾取所有数据。您知道为什么MR作业即使找不到也无法找到其余的批次。
最佳答案
就我所知,Flume(在我的情况下为1.4)根本没有真正添加到HDFS文件中。启动HDFS接收器后,它将创建一个0 kb的.tmp文件,直到将其滚动/重命名。增量记录尚未在HDFS上,而是在通道上的Flume代理中。因此,在重命名事件(.tmp到最终文件名)之前,您将无权访问新到达的数据。
(MR FileInputFormat过滤所有以“_filename”或“.filename”开头的文件)