Репликация HBase

Обзор

Репликация в HBase — это механизм, позволяющий копировать содержимое таблицы (или её отдельных семейств столбцов) в другой кластер ADH. Это может служить целям резервирования и восстановления данных, географического распределения данных, агрегации данных и другим.

Кластер, содержащий исходные данные — это кластер источника, а кластер, принимающий данные — это кластер назначения. Любой кластер может быть источником, назначением, или и тем, и другим. Кластер источника может отправлять данные любому числу кластеров назначения. Процесс репликации является инкрементальным: когда в исходные данные вносятся какие-либо изменения, они передаются кластеру назначения. Если кластер назначения по какой-то причине недоступен, то изменения, внесенные с момента последней успешной передачи, хранятся на стороне источника до момента, когда кластер назначения станет доступен. Для работы репликации необходимо, чтобы совпадали имена таблиц источника и назначения, а также их соответствующих семейств столбцов.

ПРИМЕЧАНИЕ
Более подробную информацию о командах HBase shell, используемых для настройки репликации, можно получить в разделе Команды HBase shell → Replication commands.

Настройка репликации

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

  1. Откройте веб-интерфейс ADCM и выберите ваш кластер источника ADH.

  2. Перейдите в раздел Services → HBase → Primary configuration и активируйте переключатель Show advanced.

  3. Откройте секцию настроек Custom hbase-site.xml и нажмите Add property.

  4. В поле имени параметра введите hbase.replication. В качестве значения параметра введите true.

  5. Сохраните конфигурацию, нажав Save → Create, и перезапустите сервис, нажав Actions → Reconfig and graceful restart.

Теперь вы можете настроить репликацию в различных сценариях.

Из одного кластера в другой

Тестовая таблица, используемая для демонстрации процесса настройки репликации, получена с помощью импорта файла people.csv. Процедура импорта описана в статье Массовая загрузка с использованием встроенных задач MapReduce.

Для настройки репликации таблицы из кластера источника в кластер назначения выполните следующее:

  1. Перейдите в консоль HBase обоих кластеров.

  2. Создайте таблицу с той же структурой и свойствами, что и у исходной таблицы, в кластере назначения:

    create 'people', {NAME => 'basic', VERSIONS => 5}, {SPLITS => ['F', 'K', 'P', 'W']}, {NAME => 'location', VERSIONS => 5}

    Для получения свойств таблицы можно воспользоваться командой describe в консоли HBase кластера источника.

  3. В кластере источника создайте запись отношения репликации с помощью команды add_peer:

    add_peer '1', CLUSTER_KEY => 'av-adh-backup-1.ru-central1.internal,av-adh-backup-2.ru-central1.internal,av-adh-backup-3.ru-central1.internal:2181:/hbase'
  4. Сделайте таблицу недоступной для операций с данными с помощью команды disable:

    disable 'people'
  5. Включите репликацию для семейств столбцов с помощью команды alter:

    alter 'people', {NAME => 'basic', REPLICATION_SCOPE => '1'}, {NAME => 'location', REPLICATION_SCOPE => '1'}
  6. Сделайте таблицу вновь доступной для операций с данными с помощью команды enable:

    enable 'people'

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

status 'replication'

Вывод команды будет выглядеть подобным образом:

version 2.5.10
3 live servers
    av-adh-1.ru-central1.internal:
       SOURCE: PeerID=1
         Normal Queue: 1
           No Ops shipped since last restart, SizeOfLogQueue=1, EditsReadFromLogQueue=0, OpsShippedToTarget=0, No edits for this source since it started, Replication Lag=0
      SINK: TimeStampStarted=1729231941314, Waiting for OPs...
    av-adh-2.ru-central1.internal:
       SOURCE: PeerID=1
         Normal Queue: 1
           No Ops shipped since last restart, SizeOfLogQueue=1, EditsReadFromLogQueue=0, OpsShippedToTarget=0, No edits for this source since it started, Replication Lag=0
      SINK: TimeStampStarted=1729231977710, Waiting for OPs...
    av-adh-3.ru-central1.internal:
       SOURCE: PeerID=1
         Normal Queue: 1
           AgeOfLastShippedOp=799, TimeStampOfLastShippedOp=Fri Oct 18 12:27:53 UTC 2024, SizeOfLogQueue=1, EditsReadFromLogQueue=1, OpsShippedToTarget=1, TimeStampOfNextToReplicate=Fri Oct 18 12:27:53 UTC 2024, Replication Lag=0

Свойство OpsShippedToTarget показывает, сколько операций изменения было передано в таблицу в кластере назначения. Ненулевое значение хотя бы на одном сервере означает, что репликация происходит.

Если таблица в кластере источника была непустой перед настройкой репликации, возможно, понадобится скопировать её содержимое в кластер назначения. Чтобы это сделать, подключитесь к узлу HBase кластера источника по SSH и выполните команды следующего вида:

$ cd /bin
./hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=av-adh-backup-1.ru-central1.internal,av-adh-backup-2.ru-central1.internal,av-adh-backup-3.ru-central1.internal:2181:/hbase people

где:

  • --peer.adr — значение CLUSTER_KEY, использованное ранее при составлении команды add_peer;

  • people — название копируемой таблицы.

Из одного кластера в несколько других

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

Пример:

add_peer '1', CLUSTER_KEY => 'av-adh-backup1-1.ru-central1.internal,av-adh-backup1-2.ru-central1.internal,av-adh-backup1-3.ru-central1.internal:2181:/hbase'
add_peer '2', CLUSTER_KEY => 'av-adh-backup2-1.ru-central1.internal,av-adh-backup2-2.ru-central1.internal,av-adh-backup2-3.ru-central1.internal:2181:/hbase'
add_peer '3', CLUSTER_KEY => 'av-adh-backup3-1.ru-central1.internal,av-adh-backup3-2.ru-central1.internal,av-adh-backup3-3.ru-central1.internal:2181:/hbase'
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней