2014-02-19 2 views
5

Есть ли способ получить блокировку в каталоге в HDFS? Вот что я пытаюсь сделать:Блокировка каталога в HDFS

Я каталог под названием ../ последний/...

Каждый день мне нужно добавить свежие данные в этот каталог, но прежде, чем скопировать новые данные здесь , Я хочу получить блокировку, поэтому никто не использует ее, пока я копирую в нее новые данные.

Есть ли способ сделать это в HDFS?

ответ

3

Нет, это невозможно сделать с помощью HDFS.

В общем, когда у меня возникает эта проблема, я пытаюсь скопировать данные в случайное временное местоположение, а затем переместить файл после завершения копирования. Это хорошо, потому что mv довольно мгновен, а копирование занимает больше времени. Таким образом, если вы проверяете, если кто-то пишет, а затем мв, период времени, и «замок» проводится в течение более короткого времени

  1. Генерирует случайное число
  2. Поместите данные в новую папку в HDFS: // TMP/$ randomnumber
  3. Проверьте, если назначение ОК (hadoop fs -ls возможно)
  4. hadoop fs -mv данные в каталог latest.

Есть небольшой шанс, что между 3 и 4 у вас может быть кто-то, кто-то клобурит. Если это действительно заставляет вас нервничать, возможно, вы можете реализовать простой замок в ZooKeeper. Curator может помочь вам в этом.

+0

Право! Создание данных в месте «temp» и его перемещение не являются доказательством пули », поскольку некоторые пользователи могут запускать (длинную) работу MR. Не знаете, как поможет простая блокировка в ZooKeeper. Нет гарантии, что пользователь сначала получит блокировку перед запуском MR-задания против моих данных, верно? Я что-то упускаю? Почему-то я думаю, что замок должен быть на уровне Namenode. Просьба уточнить подход ZooKeeper. Благодарю. – DilTeam

+0

Да, вы правы. Подход ZooKeeper предполагает, что вы доверяете, что каждый использует ZK для получения блокировки. Ничто не мешает пользователю просто игнорировать это. На мой взгляд, вам нужно будет найти нетехнический или дизайнерский подход к решению вашей проблемы. –

Смежные вопросы