Использование снепшотов для резервного копирования и восстановления данных в HBase
Обзор
Снепшоты в HBase — это функциональность, позволяющая делать резервное копирование данных с минимально возможным влиянием на производительность HBase. При создании снепшота таблицы не выполняется копирование данных, а сама таблица остается доступной для операций с данными. Экспорт снепшота в другой кластер выполняется без участия серверов регионов и Master-сервера с помощью утилиты, основанной на distcp. При необходимости таблица может быть быстро восстановлена из снепшота.
Снепшот по сути представляет собой набор метаданных: схема таблицы и указатели на HFile, содержащие данные таблицы. HFile после создания не может быть изменен никаким образом, кроме удаления. HFile, содержащие данные таблицы, становятся связанными со снепшотом в момент его создания. Если HFile, связанный со снепшотом, подвергается сжатию, то вместо удаления он помещается в архив. HFile, связанные со снепшотом, существуют все время существования этого снепшота для возможности извлечения информации и восстановления соответствующей таблицы. Тот же принцип относится к клонам снепшотов, которые являются таблицами, восстановленными из снепшота, но независимыми от оригинальных таблиц: пока существует клон — связанные с его снепшотом HFile также существуют. Поэтому необходимо использование политики ротации для снепшотов и их клонов во избежание исчерпания пространства на дисках.
ПРИМЕЧАНИЕ
Более подробную информацию о командах HBase shell, используемых для операций со снепшотами, можно получить в разделе Команды HBase shell → Snapshots commands.
|
Использование
Для показанных ниже примеров будет использоваться небольшая тестовая таблица articles
, процесс создания которой описан в статье Начало работы с HBase shell. Выполните Шаг 1 и Шаг 3 из неё, если вы хотите попробовать выполнить эти примеры самостоятельно.
Приведенные примеры соответствуют следующему жизненному циклу снепшота:
-
Создание снепшота и проверка его существования.
-
Восстановление таблицы из снепшота после внесения в неё изменений.
-
Экспорт снепшота в другой кластер HBase и восстановление таблицы из него.
-
Удаление снепшота.
Все команды выполняются в консоли HBase shell, если не указано иное.
Создание снепшота
Используйте команду snapshot, чтобы создать снепшот таблицы. Пример:
snapshot 'articles', 'articles_snp'
Используйте команду list_snapshots, если вы хотите просмотреть все снепшоты, или команду list_table_snapshots, если вы хотите просмотреть снепшоты заданной таблицы. Пример:
list_table_snapshots 'articles'
Вывод команды будет выглядеть следующим образом:
SNAPSHOT TABLE + CREATION TIME articles_snp articles (2024-11-01 08:11:25 UTC) 1 row(s) Took 0.0528 seconds => ["articles_snp"]
Восстановление данных из снепшота
После создания снепшота измените данные в таблице любым образом. Например, можно полностью удалить одну строку и добавить другую. Пример:
deleteall 'articles', 'article2'
put 'articles', 'article3', 'basic:author', 'King'
put 'articles', 'article3', 'basic:header', 'Test article3'
put 'articles', 'article3', 'tags:ref', true
Считайте данные из таблицы, чтобы убедиться, что данные изменились. Пример:
scan 'articles'
Вывод команды должен выглядеть следующим образом:
ROW COLUMN+CELL article1 column=basic:author, timestamp=2024-11-01T08:03:55.730, value=Test author article1 column=basic:header, timestamp=2024-11-01T08:03:55.758, value=Test article article1 column=tags:arch, timestamp=2024-11-01T08:03:55.776, value=true article1 column=tags:concepts, timestamp=2024-11-01T08:03:55.794, value=true article1 column=tags:tutorials, timestamp=2024-11-01T08:03:58.771, value=true article3 column=basic:author, timestamp=2024-11-01T08:19:36.078, value=King article3 column=basic:header, timestamp=2024-11-01T08:19:36.093, value=Test article3 article3 column=tags:ref, timestamp=2024-11-01T08:19:37.856, value=true 2 row(s) Took 0.0638 seconds
Используйте команду restore_snapshot для восстановления таблицы, но сперва сделайте её недоступной для операций с данными. Пример:
disable 'articles'
restore_snapshot 'articles_snp'
Сделайте таблицу вновь доступной и считайте данные из неё, чтобы убедиться, что восстановление сработало. Пример:
enable 'articles'
scan 'articles'
Вывод команды должен выглядеть следующим образом:
ROW COLUMN+CELL article1 column=basic:author, timestamp=2024-11-01T08:03:55.730, value=Test author article1 column=basic:header, timestamp=2024-11-01T08:03:55.758, value=Test article article1 column=tags:arch, timestamp=2024-11-01T08:03:55.776, value=true article1 column=tags:concepts, timestamp=2024-11-01T08:03:55.794, value=true article1 column=tags:tutorials, timestamp=2024-11-01T08:03:58.771, value=true article2 column=basic:author, timestamp=2024-11-01T08:04:19.531, value=Test author2 article2 column=basic:header, timestamp=2024-11-01T08:04:19.554, value=Test article2 article2 column=tags:ref, timestamp=2024-11-01T08:04:20.802, value=true 2 row(s) Took 0.0387 seconds
Экспорт снепшота
Снепшот можно экспортировать в другой кластер и восстановить таблицу в нем. Для этого сначала подключитесь к узлу HBase исходного кластера через SSH и переключитесь на пользователя hbase
, а затем выполните экспорт. Команда экспорта имеет следующий синтаксис:
$ hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot <snapshot_name> -copy-to hdfs://<namenode_active>:<port><hbase_dir> -mappers <map_number>
где:
-
<snapshot_name>
— имя экспортируемого снепшота; -
<namenode_active>
— сетевой адрес активного сервера NameNode в кластере назначения (используйте командуhdfs haadmin -getAllServiceState
, чтобы узнать, какой сервер является активным); -
<port>
— номер порта сервера NameNode (8020
по умолчанию); -
<hbase_dir>
— домашняя директория HBase: значение параметраzookeeper.znode.parent
в конфигурационном файле hbase-site.xml кластера назначения (/hbase
по умолчанию); -
<map_number>
— количество экземпляров методаmap
(мапперов) для выполнения задачи экспорта.
Пример:
$ sudo -u hbase bash
$ hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot articles_snp -copy-to hdfs://av-adh-backup-1.ru-central1.internal:8020/hbase -mappers 4
Перейдите в консоль HBase shell кластера назначения и восстановите таблицу из снепшота:
restore_snapshot 'articles_snp'
ПРИМЕЧАНИЕ
В этом случае восстановленная таблица уже доступна для операций с данными.
|
Ротация снепшотов
Важно, чтобы старые и ненужные снепшоты не накапливались и своевременно удалялись. HFile, связанные со снепшотами (или их клонами), не могут быть удалены, пока эти снепшоты существуют, даже если HFile находятся в архиве. Если тот или иной снепшот вам больше не нужен, удалите его с помощью команды delete_snapshot. Пример:
delete_snapshot 'articles_snp'
Также можно удалить все снепшоты заданной таблицы с помощью команды delete_table_snapshots или удалить все снепшоты, чьи имена соответствуют заданному регулярному выражению, с помощью команды delete_all_snapshot.