Hadoop S3A 文件系统,中止对象上传?
Hadoop S3A filesystem, abort object upload?
我有这样的代码
ParquetWriter<Record> writer = getParquetWriter("s3a://my_bucket/my_object_path.snappy.parquet");
for (Record r : someIterable) {
validate(r);
writer.write()
}
writer.close();
如果validate
抛出异常,我要释放与writer关联的所有资源。但在这种情况下,我不想在 S3 中创建任何对象。这可以实现吗?
如果我关闭编写器,它将结束 s3 分段上传并在云中创建一个对象。如果我不关闭它,到目前为止写入的部分将保留在磁盘缓冲区中,阻塞工作。
是的,这是个问题。 HADOOP-16906 Add some Abortable.abort() interface for streams etc which can be terminated
这里的问题是添加到 S3ABlockOutputStream
class 是不够的,我们需要通过 FSDataOutputStream 等传递它,在 FS APIs 中指定它,如果直通不起作用,则定义语义,承诺维护它等。需要付出很多努力。如果你确实想这样做,欢迎补丁......
关注HDFS-13934,分段上传API。这将让您进行上传,然后 commit/abort 它。不太适合您的工作流程。
恐怕你将不得不继续上传。请记住为存储桶设置生命周期规则以删除旧上传,并查看 hadoop s3guard uploads
命令以 list/abort 它们。
我有这样的代码
ParquetWriter<Record> writer = getParquetWriter("s3a://my_bucket/my_object_path.snappy.parquet");
for (Record r : someIterable) {
validate(r);
writer.write()
}
writer.close();
如果validate
抛出异常,我要释放与writer关联的所有资源。但在这种情况下,我不想在 S3 中创建任何对象。这可以实现吗?
如果我关闭编写器,它将结束 s3 分段上传并在云中创建一个对象。如果我不关闭它,到目前为止写入的部分将保留在磁盘缓冲区中,阻塞工作。
是的,这是个问题。 HADOOP-16906 Add some Abortable.abort() interface for streams etc which can be terminated
这里的问题是添加到 S3ABlockOutputStream
class 是不够的,我们需要通过 FSDataOutputStream 等传递它,在 FS APIs 中指定它,如果直通不起作用,则定义语义,承诺维护它等。需要付出很多努力。如果你确实想这样做,欢迎补丁......
关注HDFS-13934,分段上传API。这将让您进行上传,然后 commit/abort 它。不太适合您的工作流程。
恐怕你将不得不继续上传。请记住为存储桶设置生命周期规则以删除旧上传,并查看 hadoop s3guard uploads
命令以 list/abort 它们。