Репликация HBase
Обзор
Репликация в HBase — это механизм, позволяющий копировать содержимое таблицы (или её отдельных семейств столбцов) в другой кластер ADH. Это может служить целям резервирования и восстановления данных, географического распределения данных, агрегации данных и другим.
Кластер, содержащий исходные данные — это кластер источника, а кластер, принимающий данные — это кластер назначения. Любой кластер может быть источником, назначением, или и тем, и другим. Кластер источника может отправлять данные любому числу кластеров назначения. Процесс репликации является инкрементальным: когда в исходные данные вносятся какие-либо изменения, они передаются кластеру назначения. Если кластер назначения по какой-то причине недоступен, то изменения, внесенные с момента последней успешной передачи, хранятся на стороне источника до момента, когда кластер назначения станет доступен. Для работы репликации необходимо, чтобы совпадали имена таблиц источника и назначения, а также их соответствующих семейств столбцов.
ПРИМЕЧАНИЕ
Более подробную информацию о командах HBase shell, используемых для настройки репликации, можно получить в разделе Команды HBase shell → Replication commands.
|
Настройка репликации
Для репликации таблицы число кластеров может быть любым, при этом один из них будет кластером источника, а остальные — кластерами назначения. Когда все кластеры настроены и работают, выполните следующее:
-
Откройте веб-интерфейс ADCM и выберите ваш кластер источника ADH.
-
Перейдите в раздел Services → HBase → Primary configuration и активируйте переключатель Show advanced.
-
Откройте секцию настроек Custom hbase-site.xml и нажмите Add property.
-
В поле имени параметра введите
hbase.replication
. В качестве значения параметра введитеtrue
. -
Сохраните конфигурацию, нажав Save → Create, и перезапустите сервис, нажав Actions → Reconfig and graceful restart.
Теперь вы можете настроить репликацию в различных сценариях.
Из одного кластера в другой
Тестовая таблица, используемая для демонстрации процесса настройки репликации, получена с помощью импорта файла people.csv. Процедура импорта описана в статье Массовая загрузка с использованием встроенных задач MapReduce.
Для настройки репликации таблицы из кластера источника в кластер назначения выполните следующее:
-
Перейдите в консоль HBase обоих кластеров.
-
Создайте таблицу с той же структурой и свойствами, что и у исходной таблицы, в кластере назначения:
create 'people', {NAME => 'basic', VERSIONS => 5}, {SPLITS => ['F', 'K', 'P', 'W']}, {NAME => 'location', VERSIONS => 5}
Для получения свойств таблицы можно воспользоваться командой
describe
в консоли HBase кластера источника. -
В кластере источника создайте запись отношения репликации с помощью команды 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'
-
Сделайте таблицу недоступной для операций с данными с помощью команды disable:
disable 'people'
-
Включите репликацию для семейств столбцов с помощью команды alter:
alter 'people', {NAME => 'basic', REPLICATION_SCOPE => '1'}, {NAME => 'location', REPLICATION_SCOPE => '1'}
-
Сделайте таблицу вновь доступной для операций с данными с помощью команды 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'