我使用Apache Flink在HDFS上创建了一些存档数据文件,生成的文件名具有类似part- {parallel-task} - {count}的模式,但我所期望的应该具有“.gz”后缀,可以直接加载Apache Spark。
我找不到任何API将后缀添加到Apache Flink中BucketingSink生成的最终完成文件,但只能为InProgress,Pending和ValidLength状态添加后缀。有人可以帮忙吗? HDFS Connector& Java API
答案 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);