Моя проблема может быть результатом моего непонимания с глобальной согласованностью в хранилище Google, но поскольку я не испытывал эту проблему до недавнего времени (в середине ноября), и теперь она кажется легко воспроизводимой, я хотел кое-каких разъяснений. Проблема начала происходить в куске искрового кода, запущенного на вычислительном движке с использованием bdutil, но я могу воспроизвести из командной строки gsutil.GCS - глобальная согласованность с удалением + переименование
Мой код удаляет путь назначения и сразу же переименовывает путь источника в качестве пути назначения. С глобальной согласованностью, которую я ожидал бы, поскольку путь назначения больше не существует, src будет переименован в пункт назначения, но вместо этого src вложен внутри адресата, как если бы назначение все еще существовало и это не было согласованным.
Hadoop код для воспроизведения выглядит следующим образом:
fs.delete(new Path(dest), true)
fs.rename(new Path(src), new Path(dest))
Из командной строки можно воспроизводящий:
gsutil -m rm -r gs://mybucket/dest
gsutil -m cp -r gs://mybucket/src gs://mybucket/dest
Если причина в том, что список операции в конечном счете, последовательные и реализация FileSystem использует чтобы определить, существует ли место назначения, тогда я понимаю, а затем есть ли рекомендованное решение, чтобы гарантировать, что пункт назначения больше не существует до переименования?
Спасибо, Люка
Спасибо. Я думаю, что я перепроектирую поток данных, поэтому я всегда создаю новый «каталог» с меткой времени в имени, вместо того, чтобы пытаться заменить существующий «каталог», – lukeforehand