java - Hadoop S3A 文件系统,中止对象上传?

标签 java hadoop amazon-s3 parquet parquet-mr

我有类似的代码

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/

相关文章:

hadoop - Spark ml 模型保存到 hdfs

hadoop - Apache Pig:在Pig中处理数据类型时面临问题

python - 如何避免 Windows AWS CLI S3 中出现警告消息

java - 获取列和行选择时数组越界?

java - 足够堆栈溢出吗?

java - Thymeleaf:使用 th:each 时如何排除外部标签?

java - selectOneMenu 未显示正确的值,但 getter 获取了它

hadoop - AccessControlException Hadoop

python-3.x - 如何在 sagemaker notebook 中打开存储在 S3 存储桶中的模型 tarfile?

mongodb - 查询数据以在AWS中实现最小延迟的最佳方法