【问题标题】:Apache Flink Streaming files from directory来自目录的 Apache Flink 流式处理文件
【发布时间】:2018-04-26 02:17:58
【问题描述】:

我想以给定的顺序将一堆 csv 文件加载到 Apache Flink 中,例如由文件名中的命名方案确定,其中可能包含一些时间戳信息。

在 Apache Spark 中,只要将文件移动到特定目录(例如 /data/staging),我就可以将文件流式传输到数据集,原子文件移动如下

Dataset<Row> fileStreamDf = spark.readStream()
            .option("header", true)
            .schema(schema)
            .csv("/data/staging")

然后我会按照给定的顺序一个一个地移动文件,例如使用 bash 脚本,到该暂存目录。

如何使用 Apache Flink 实现相同的目标?

【问题讨论】:

    标签: apache-flink


    【解决方案1】:

    这不是完全相同的用例,但我们必须在流式作业中做类似的事情(文件是 HDF5 而不是 CSV)。所以我写了一个RichSourceFunction,它知道如何以正确的顺序迭代文件,并将文件路径(这些在 S3 中)作为字符串记录发出。然后下游FlatMapFunction 解析文件并发出实际的行。

    【讨论】:

    • 感谢您的解决方案,我可以看到它是如何工作的。我们的设置实际上非常相似,我们在 S3 上有 csv(和 ev. hdf5)。可能使用 Kafka 作为来源可能是一种可能的解决方案。实时数据已经来自 Kafka 通道。
    • 嗨丹尼尔 - 如果数据在 Kafka 中,那么是的,从那里采购(而不是通过 S3)是有意义的。 PS - 如果我的回答有帮助,请接受:)
    • 感谢很有帮助。我认为这可能是应该成为基本 Flink 堆栈的一部分的功能,因为它在测试设置中非常常见,并且当您必须合并历史数据和实时数据时
    猜你喜欢
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    相关资源
    最近更新 更多