我有类似的代码
ParquetWriter<Record> writer = getParquetWriter("s3a://my_bucket/my_object_path.snappy.parquet");
for (Record r : someIterable) {
validate(r);
writer.write()
}
writer.close();
如果 validate
抛出异常,我想释放与作者关联的所有资源。但在这种情况下,我不想在 S3 中创建任何对象。这是可以实现的吗?如果我关闭编写器,它将结束 s3 分段上传并在云中创建一个对象。如果我不关闭它,到目前为止写入的部分将保留在磁盘缓冲区中,从而阻塞工作。
最佳答案
是的,这是一个问题。已在 HADOOP-16906 中讨论过为可以终止的流等添加一些 Abortable.abort() 接口(interface)
这里的问题是添加到 S3ABlockOutputStream
是不够的类,我们需要通过 FSDataOutputStream 等传递它,在 FS API 中指定它,如果传递不起作用,则定义语义, promise 维护它等等。很多努力。如果您确实想这样做,欢迎使用补丁...
关注 HDFS-13934 , 分段上传 API。这将让您进行上传,然后提交/中止它。不太适合您的工作流程。
恐怕您将不得不进行上传。请记住为存储桶设置生命周期规则以删除旧上传,并查看 hadoop s3guard uploads
命令也列出/中止它们。
关于java - Hadoop S3A 文件系统,中止对象上传?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62486420/