Была ли файловая система oop S3A, прервать загрузку объекта? - PullRequest
1 голос
/ 20 июня 2020

У меня есть код типа

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 и создаст объект в облаке. Если я не закрою его, уже написанные части останутся в буфере диска, засоряя работу.

1 Ответ

0 голосов
/ 24 июня 2020

Да, это проблема. Это обсуждалось в HAD OOP -16906 Добавить некоторый интерфейс Abortable.abort () для потоков и c, который может быть завершен

Проблема в том, что недостаточно, чтобы добавить к классу S3ABlockOutputStream, нам нужно будет передать его через FSDataOutputStream et c, указать его в API-интерфейсах FS, определить семантику, если сквозная передача не работает, зафиксировать его на поддержании et c. Много усилий. Если вы все же хотите это сделать, мы приветствуем патчи ...

Следите за HDFS-13934 , API для многокомпонентной загрузки. Это позволит вам выполнить загрузку, а затем зафиксировать / прервать ее. Не совсем подходит для вашего рабочего процесса.

Боюсь, вам придется go при загрузке. Не забудьте установить правило жизненного цикла для корзины, чтобы удалить старые загрузки, и посмотрите на команду hadoop s3guard uploads, чтобы вывести список / прервать их тоже.

...