Какие операции HDFS являются атомарными?

Я пытаюсь написать код для импорта файлов в HDFS для использования в качестве внешней таблицы улья. Я обнаружил, что с помощью чего-то вроде:

фу | имя хоста ssh "hdfs dfs -put - /destination/$FILENAME"

может вызвать тип ошибки, когда временный файл создается и затем переименовывается по завершении. Это может привести к состязанию куста между списком каталогов и выполнением запроса.

Одним из обходных путей является копирование во временную директорию и "hdfs dfs mv" файл на место.

Конкретные и общие / академические вопросы:

  1. Команда "hdfs dfs -mv" является атомарной, верно?
  2. Какие другие команды HDFS или операции являются атомарными?
  3. Могут ли две команды "hdfs dfs -mkdir", выполненные примерно в одно и то же время, поверить, что обе они преуспели?
  4. Есть ли лучший способ избежать гонки с улей при перемещении файлов в положение?

1 ответ

Решение

Во введении Hadoop FS вы можете найти требования к атомарности

Вот основные ожидания от Hadoop-совместимой файловой системы. Некоторые файловые системы не соответствуют всем этим ожиданиям; В результате некоторые программы могут работать не так, как ожидалось.

валентность

Есть некоторые операции, которые ДОЛЖНЫ быть атомарными. Это потому, что они часто используются для реализации блокировки / монопольного доступа между процессами в кластере.

  1. Создание файла. Если параметр overwrite имеет значение false, проверка и создание ДОЛЖНЫ быть атомарными.
  2. Удаление файла.
  3. Переименование файла.
  4. Переименование каталога.
  5. Создание единого каталога с помощью mkdir ().

...

Большинство других операций идут без требований или гарантий атомарности.

Поэтому, чтобы убедиться, что вы должны проверить базовую файловую систему. Но исходя из этих требований ответы:

  1. да
  2. вышеперечисленное
  3. нет
  4. imho переименование файла это хороший выбор для работы
Другие вопросы по тегам