hadoop s3a文件系统,中止对象上传?

k4aesqcs  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(331)

我有这样的代码

ParquetWriter<Record> writer = getParquetWriter("s3a://my_bucket/my_object_path.snappy.parquet");
for (Record r : someIterable) {
   validate(r);
   writer.write()
}
writer.close();

如果 validate 抛出异常,我要释放与编写器关联的所有资源。但在这种情况下,我不想在s3中创建任何对象。这是可以实现的吗?
如果我关闭writer,它将结束s3多部分上传并在云中创建一个对象。如果我不关闭它,到目前为止写的部分将留在磁盘缓冲区中,阻塞了工作。

b0zn9rqh

b0zn9rqh1#

是的,这是个问题。hadoop-16906中已经讨论过,为可以终止的流等添加一些abortable.abort()接口
问题是这还不足以增加 S3ABlockOutputStream 类,我们需要通过fsdataoutputstream等传递它,在fs api中指定它,如果传递不起作用,则定义语义,承诺维护它等等,需要付出很多努力。如果你真的想这么做,欢迎。。。
关注hdfs-13934,多部分上传api。这将允许您执行上载,然后提交/中止它。不太适合你的工作流程。
恐怕你得去上传了。请记住为bucket设置一个生命周期规则来删除旧的上传,并查看 hadoop s3guard uploads 命令列出/中止它们。

相关问题