我正在尝试处理HDFS上的某些文件,并将结果也写回HDFS。在作业开始之前已经准备好文件。我要根据文件内容写入不同的路径和文件。我知道提供了BucketingSink
(doc here)可以在Flink流中实现这一点。但是,看来Dataset
没有类似的API。我发现了一些关于stackoverflow的问答。(1,2,3)。现在我认为我有两种选择:
MultipleTextOutputFormat
或MultipleOutputs
; BucketingSink
。我的问题是如何在它们之间做出选择,还是有其他解决方案?任何帮助表示赞赏。
编辑:此问题可能与this 相同。
答案 0 :(得分:1)
我们遇到了同样的问题。我们也很惊讶DataSet
不支持addSink()
。
我建议不要切换到流媒体模式。您可能会放弃在批处理模式下可用的一些优化(即内存池)。
您可能必须实现自己的 OutputFormat 来进行存储。
相反,您可以将OutputFormat[YOUR_RECORD]
(或RichOutputFormat[]
)扩展到仍可以使用BucketAssigner[YOUR_RECORD, String]
打开/写入/关闭输出流的位置。
这就是我们所做的,而且效果很好。
我希望flink能够尽快在批处理模式下对此提供支持。