HBase: Как работает репликация? - PullRequest
18 голосов
/ 24 марта 2011

В настоящее время я оцениваю HBase как хранилище данных, но один вопрос остался без ответа: HBase хранит множество копий одного и того же объекта на многих узлах (или репликацию). Так как HBase обладает так называемой строгой согласованностью (в отличие от возможной согласованностью ), он гарантирует, что каждая реплика возвращает одно и то же значение при чтении.

Как я понял концепцию HBase, при чтении значений сначала запрашивается мастер HBase для (а их должно быть более одного) RegionServer, предоставляющего данные. Тогда я могу выдавать запросы на чтение и запись без изобретения мастера. Как тогда может работать репликация?

  • Как HBase обеспечивает согласованность?
  • Как внутренне работают операции записи?
  • Блокировать операции записи, пока не будут записаны все реплики (=> синхронная репликация). Если да, кто управляет этим переводом?
  • Как HDFS входит в игру?

Я уже прочитал BigTable -Paper и искал документы, но не нашел дополнительной информации об архитектуре HBase.

Спасибо!

1 Ответ

20 голосов
/ 25 марта 2011

hbase не делает никакой репликации так, как вы думаете. Он построен поверх HDFS, что обеспечивает репликацию для блоков данных, которые составляют таблицы hbase. Однако только один регион-сервер когда-либо обслуживает или записывает данные для любой данной строки.

Обычно региональные серверы связаны с узлами данных. Все записи данных в HDFS сначала идут на локальный узел, если это возможно, другой узел в той же стойке и другой узел в другой стойке (с учетом коэффициента репликации 3 в HDFS). Таким образом, сервер региона в конечном итоге получит все свои данные с локального сервера.

Что касается блокировки: единственный блок - до тех пор, пока WAL (запись в журнал записи) не будет записана на диск. Это гарантирует, что никакие данные не будут потеряны, поскольку журнал всегда можно воспроизвести. Обратите внимание, что в более старой версии hbase это не сработало, поскольку HDFS до недавнего времени не поддерживала длительную операцию добавления. На данный момент мы находимся в странном состоянии, так как нет официального выпуска Apache Hadoop, поддерживающего и append, и HBase. В то же время вы можете либо применить патч добавления самостоятельно, либо использовать дистрибутив Cloudera (рекомендуется).

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

...