如何在Apache Flink中为BucketingSink生成的最终完成文件添加后缀?

时间:2018-01-11 10:13:16

标签: apache-flink flink-streaming bucket sink suffix

我使用Apache Flink在HDFS上创建了一些存档数据文件,生成的文件名具有类似part- {parallel-task} - {count}的模式,但我所期望的应该具有“.gz”后缀,可以直接加载Apache Spark。

我找不到任何API将后缀添加到Apache Flink中BucketingSink生成的最终完成文件,但只能为InProgress,Pending和ValidLength状态添加后缀。有人可以帮忙吗? HDFS Connector& Java API

1 个答案:

答案 0 :(得分:0)

据我所见,没有选项可以使用默认的BucketingSink添加后缀。

一种选择是不使用检查点并将挂起的后缀设置为所需的后缀。但由于在大多数情况下需要检查点,因此这不是最佳的。

我的解决方案是创建一个BucketingSinkWithSuffix实现,它几乎是默认BucketingSink的精确副本。唯一需要改变的是为后缀添加一个成员变量,可以在构造函数中设置并调整基本路径的创建方式。

这是我对构造函数的实现:

    public BucketingSinkWithSuffix(String basePath, String suffix) {
    this.basePath = basePath;
    this.bucketer = new DateTimeBucketer<>();
    this.writerTemplate = new StringWriter<>();
    this.partSuffix = suffix;
}

用于生成基本路径(第523行和第528行):

partPath = new Path(bucketPath, partPrefix + "-" + subtaskIndex + "-" + bucketState.partCounter + partSuffix);