【问题标题】:How to write to ORC files using BucketingSink in Apache Flink?如何在 Apache Flink 中使用 BucketingSink 写入 ORC 文件?
【发布时间】:2018-05-20 01:33:46
【问题描述】:

我正在开发一个 Flink 流程序,它读取 kafka 消息并将消息转储到 AWS s3 上的 ORC 文件。我发现没有关于 Flink 的 BucketingSink 和 ORC 文件编写器集成的文档。 BucketingSink 中没有这样的 ORC 文件编写器实现。

我被困在这里,有什么想法吗?

【问题讨论】:

    标签: hdfs apache-flink orc


    【解决方案1】:

    我同意,ORC 文件的BucketingSink 编写器将是一个很棒的功能。但是,它还没有贡献给 Flink。你必须自己实现这样的作家。

    如果您考虑将其贡献给 Flink,我相信 Flink 社区会帮助设计和审查作者。

    【讨论】:

    • 感谢费边。我检查了StreamWriterBase,我想扩展这个类。 ORC writer 不接受流。所以我必须实现Writer 接口。你有更好的主意吗?
    • 我没有详细看,但是应该可以实现Writer接口而不是StreamWriterBase接口。作者将包装 ORC 的core-java Writer
    • @Freedom 您在使用 BucketingSink 编写 ORC 文件方面取得了进展吗?如果是,你能分享代码吗?谢谢
    • 目前的形式(Flink 1.5.0),BucketingSink Writer不太适合写ORC文件。社区正在努力改进界面,以更好地支持基于批处理的编写器,例如 ORC 和 Parquet。
    • 我花了一些时间尝试通过实现 org.apache.flink.streaming.connectors.fs.Writer 为 BucketingSink 开发 ORCWriter,但收效甚微。棘手的部分是如何实现 flush() 和 getPos() 方法。这两种方法都需要访问隐藏在 ORC 的 writer 中的输出流。此外,ORC 似乎使用一个独立的流写入一个字段,并最终得到多个共存的输出流,这使得 flush() 和 getPos() 混杂。我期待@FabianHueske 提到的新 API。
    猜你喜欢
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 2022-10-04
    • 2019-11-20
    相关资源
    最近更新 更多