2013-10-01 6 views
2

Если HDFS не позволяет изменять файлы, как HBase хранит и изменяет данные? Его трудно найти ответ на этот вопрос, потому что результаты в основном ориентированы на формат физических данных HBase. Но я не мог найти, как HBase справляется с проблемой неизменности файлов HHDFS?Как HDFS изменяет данные

ответ

5

HBase хранит данные в HDFS в индексированной форме. Упротившись, файлы HDFS имеют ключи, хранящиеся в отсортированном порядке, так что поиск определенного ключа происходит быстро. Хранилище данных HBase позаботится в RegionServers (RS).

В RS ключи сначала записываются в хранилище в памяти (называемом memstore). В memstore хранятся новые ключи/обновления удалений. После определенного порогового значения эти клавиши переносятся на HDFS в качестве нового индексного файла. Обновления обрабатываются по временным меткам - предполагается, что последняя версия является единственной допустимой версией. Поэтому, если предыдущий индексный файл имеет тот же ключ, он будет проигнорирован. Удаления - это то же самое, что и обновления, единственное отличие заключается в том, что удаленные объекты имеют специальное поле типа, в котором есть флаг, обозначающий ключ как удаленный.

Я сделал несколько упрощений: формат файла

  • Индекс сильно изменился с течением времени. Первоначально это был MapFile. В более поздних версиях HBase используется формат HFile с метаданными и оптимизациями, характерными для HBase.
  • Запись записывается на диск в WAL (журнал записи вперед), прежде чем они войдут в memstore. Это делается для предотвращения потери данных.

Я также нашел несколько отличных связанных статей, которые вы должны прочитать:

+0

Большое спасибо, это было действительно полезно, а также спасибо за ссылки. – user2833557

0

HBase делает несколько вещей (следующее упрощение, но это объясняет общую идею): для согласованности, которую он записывает в WAL-файлы, данные по мере их поступления - поэтому никаких изменений в данных нет.

«Проблема» связана с HFiles, где данные хранятся упорядоченным образом. Первое, что HBase делает для решения этого, заключается в том, что он хранит данные в памяти (memstore для каждого региона) и только сбрасывает их на диск, когда они заполняются. Это экономит некоторые перезаписи.

Ожидание перед сохранением решает только некоторые проблемы, когда вам нужно переупорядочить данные (например, повторные обновления одного и того же ключа и т. Д.), Так что вторая вещь, которую делает HBase, это компромиссы, где она считывает несколько HFiles и создает новые с объединенными данными (и удаляет старые файлы)

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