我们有包含文本文件的时间戳目录,存储在HDFS中。
我们可以定期添加新文件,因此我们使用具有监控持续时间的FileSource
(Flink 1.14.4和流式作业),以便它不断地拾取任何新文件。
挑战在于,我们需要在输出中包含父目录的时间戳,以便将此丰富数据与另一个流进行时间窗口连接。
以前我可以扩展输入格式来提取路径信息,并发出一个Tuple2<LongWritable, Text>
(有关如何执行此操作的问题,请参阅我的SO answer)。
但是对于新的FileSource体系结构,我真的不确定这是否可行,或者如果可行,正确的方法是什么。
我已经浏览了源代码(FileSource,AbstractFileSource,SourceReader,FileSourceReader,FileSourceSplit,令人作呕),但还没有看到任何使所有工作顺利的方法。
可能有一种方法可以使用一些非常丑陋的hack来处理TextLineFormat,它将对FSDataInputStream进行逆向工程,试图找到有关原始文件的信息,但感觉非常脆弱。
有什么建议吗?
1条答案
按热度按时间wgx48brx1#
我正面临着完全相同的问题。有解决办法了吗?
我认为FSDataInputStream是一条错误的道路。就我的理解而言,它只是文件或任何源中的数据流。与文件源相关,有一个名为FileSourceSplit的拆分抽象。它有一个获取文件路径的方法。唯一的问题是,我没有找到合适的类来使用它。阿里巴巴集团在Flip-27 https://www.alibabacloud.com/blog/flink-course-series-8-detailed-interpretation-of-flink-connector_598017的第2.4章中提供了对新Source API的详细解释。参考该图,正确的使用部分是SplitFetcher或RecordEmitter以及SplitStates。
我会给予更多的信息,如果我发现任何东西。