Какие операции HDFS являются атомарными?
Я пытаюсь написать код для импорта файлов в HDFS для использования в качестве внешней таблицы улья. Я обнаружил, что с помощью чего-то вроде:
фу | имя хоста ssh "hdfs dfs -put - /destination/$FILENAME"
может вызвать тип ошибки, когда временный файл создается и затем переименовывается по завершении. Это может привести к состязанию куста между списком каталогов и выполнением запроса.
Одним из обходных путей является копирование во временную директорию и "hdfs dfs mv" файл на место.
Конкретные и общие / академические вопросы:
- Команда "hdfs dfs -mv" является атомарной, верно?
- Какие другие команды HDFS или операции являются атомарными?
- Могут ли две команды "hdfs dfs -mkdir", выполненные примерно в одно и то же время, поверить, что обе они преуспели?
- Есть ли лучший способ избежать гонки с улей при перемещении файлов в положение?
1 ответ
Во введении Hadoop FS вы можете найти требования к атомарности
Вот основные ожидания от Hadoop-совместимой файловой системы. Некоторые файловые системы не соответствуют всем этим ожиданиям; В результате некоторые программы могут работать не так, как ожидалось.
валентность
Есть некоторые операции, которые ДОЛЖНЫ быть атомарными. Это потому, что они часто используются для реализации блокировки / монопольного доступа между процессами в кластере.
- Создание файла. Если параметр overwrite имеет значение false, проверка и создание ДОЛЖНЫ быть атомарными.
- Удаление файла.
- Переименование файла.
- Переименование каталога.
- Создание единого каталога с помощью mkdir ().
...
Большинство других операций идут без требований или гарантий атомарности.
Поэтому, чтобы убедиться, что вы должны проверить базовую файловую систему. Но исходя из этих требований ответы:
- да
- вышеперечисленное
- нет
- imho переименование файла это хороший выбор для работы