Как работает HDFS с добавлением - PullRequest
10 голосов
/ 06 февраля 2012

Предположим, что один использует размер блока по умолчанию (128 МБ), а файл использует 130 МБ;поэтому, используя один полноразмерный блок и один блок с 2 МБ.Затем к файлу необходимо добавить 20 МБ (теперь должно быть 150 МБ).Что происходит?

Изменяет ли HDFS размер последнего блока с 2 до 22 МБ?Или создать новый блок?

Как добавление файла в HDFS имеет дело с совпадением?Есть ли риск потери данных?

Создает ли HDFS третий блок, помещает в него 20 + 2 МБ и удаляет блок с 2 МБ.Если да, то как это работает одновременно?

Ответы [ 3 ]

6 голосов
/ 17 февраля 2016

В соответствии с последней проектной документа в выпуске Jira , упомянутом ранее , мы найдем следующие ответы на ваш вопрос:

  1. HDFS добавит к последний блок, не создаст новый блок и скопирует данные из старого последнего блока. Это не сложно, потому что HDFS просто использует обычную файловую систему для записи этих блочных файлов как обычных файлов. Обычные файловые системы имеют механизмы для добавления новых данных. Конечно, если вы заполните последний блок, вы создадите новый блок.
  2. В HDFS одновременно разрешена только одна запись или добавление к любому файлу, поэтому параллелизм не обрабатывается. Это управляется наменоде. Вам нужно закрыть файл, если вы хотите, чтобы кто-то еще начал писать в него.
  3. Если последний блок в файле не реплицируется, добавление завершится ошибкой. Приложение записывается в одну реплику, которая передает его в реплики, аналогично обычной записи. Мне кажется, что нет никакого дополнительного риска потери данных по сравнению с обычной записью.
3 голосов
/ 14 ноября 2012

Вот очень полный проектный документ о приложении, и он содержит проблемы параллелизма.

Текущий Документы HDFS дает ссылку на этот документ, поэтому мы можем предположить, что это последний документ. (Дата документа - 2009)

И связанный вопрос .

1 голос
/ 08 февраля 2012

Распределенная файловая система Hadoop поддерживает добавления к файлам, и в этом случае она должна добавить 20 МБ ко 2-му блоку в вашем примере (который изначально имеет 2 МБ).Таким образом, вы получите два блока, один с 128 МБ, а другой с 22 МБ.

Этот является ссылкой на дополнительные документы Java для HDFS.

...