Резервное копирование и восстановление Hive

В данной статье описаны процессы резервного копирования и восстановления Hive-таблиц. Создание резервной копии таблицы Hive включает следующие шаги:

  • Создание копии данных из хранилища Hive (Hive warehouse) в HDFS.

  • Создание дампа базы данных Hive Metastore.

Для восстановления Hive-таблицы из резервной копии необходимы обратные действия, а именно:

  • Копирование файлов из резервной копии в HDFS.

  • Импорт дамп-файла в базу данных Hive Metastore.

Подробности каждого из этапов описаны далее в статье. Также в статье приведен пример, в котором показаны все операции, необходимые для выполнения резервного копирования и восстановления таблиц Hive.

Резервное копирование таблиц Hive

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

  1. Остановите сервис Hive с помощью ADCM.

  2. Создайте резервную копию HDFS-директории Hive warehouse.

    Hive хранит содержимое таблиц в HDFS-директории (устанавливается параметром hive.metastore.warehouse.dir, по умолчанию /apps/hive/warehouse). Для создания копии HDFS-директории используйте снепшоты HDFS, distcp или любой другой способ для копирования HDFS-директории.

  3. Создайте резервную копию базы данных Hive Metastore.

    Помимо "сырых" данных (содержимого таблиц), которые хранятся в HDFS, Hive Metastore использует реляционную базу данных для хранения метаданных о таблицах. Эти метаданные включают схему, информацию о партиционировании, бакетах, индексах, транзакциях, а также прочую системную информацию, необходимую для корректной работы Hive. Все метаданные хранятся в базе данных hive — именно эту базу необходимо экспортировать в дамп при создании резервной копии.

Восстановление таблиц Hive

Чтобы восстановить Hive-таблицу из резервной копии, необходимо выполнить следующее:

  1. Остановите сервис Hive с помощью ADCM.

  2. Скопируйте файлы резервной копии в соответствующую HDFS-директорию Hive warehouse.

  3. Импортируйте SQL дамп-файл в базу данных Hive Metastore.

    ПРИМЕЧАНИЕ
    При импорте дамп-файла в Hive Metastore существующая база данных hive с метаданными полностью перезаписывается. Таким образом, после импорта дампа в Hive-кластере будут доступны лишь те Hive-таблицы, которые присутствовали в дампе.

Пример

Ниже приведен сценарий, описывающий все необходимые для выполнения резервного копирования и восстановления шаги. Пример предполагает полную перезапись метаданных Hive при восстановлении таблицы. Это означает, что после восстановления таблицы в кластере Hive останутся только таблицы из резервной копии.

  1. Создайте тестовую Hive-таблицу и запишите в нее данные:

    SELECT * FROM transactions;
    +----------------------+----------------------+--------------------------+------------------------+
    | transactions.txn_id  | transactions.acc_id  | transactions.txn_amount  | transactions.txn_date  |
    +----------------------+----------------------+--------------------------+------------------------+
    | 1                    | 1002                 | 10.00                    | 2023-01-01             |
    | 8                    | 1003                 | 50.00                    | 2023-01-01             |
    | 3                    | 1002                 | 30.00                    | 2023-01-02             |
    | 4                    | 1001                 | 100.50                   | 2023-01-02             |
    | 2                    | 1002                 | 20.00                    | 2023-01-03             |
    | 6                    | 1001                 | 200.50                   | 2023-01-03             |
    | 7                    | 1003                 | 50.00                    | 2023-01-03             |
    | 5                    | 1001                 | 150.50                   | 2023-01-04             |
    | 9                    | 1003                 | 75.00                    | 2023-01-04             |
    +----------------------+----------------------+--------------------------+------------------------+
    SQL для создания тестовой таблицы

     
    Для создания и наполнения тестовой таблицы Hive выполните следующий SQL с помощью /bin/beeline.

    DROP TABLE IF EXISTS transactions;
    CREATE TABLE transactions(txn_id int, acc_id int, txn_amount decimal(10,2), txn_date date);
    INSERT INTO transactions VALUES
    (1, 1002, 10.00, '2023-01-01'),
    (2, 1002, 20.00, '2023-01-03'),
    (3, 1002, 30.00, '2023-01-02'),
    (4, 1001, 100.50, '2023-01-02'),
    (5, 1001, 150.50, '2023-01-04'),
    (6, 1001, 200.50, '2023-01-03'),
    (7, 1003, 50.00, '2023-01-03'),
    (8, 1003, 50.00, '2023-01-01'),
    (9, 1003, 75.00, '2023-01-04');
  2. С помощью ADCM остановите сервис Hive.

  3. Создайте снепшот директории Hive warehouse в HDFS. В этом сценарии нужная директория — /apps/hive/warehouse/transactions (при условии, что hive.metastore.warehouse.dir указывает на apps/hive/warehouse/). Для создания снепшота следуйте инструкциям ниже.

     
    Разрешите создание снепшотов для HDFS-директории /apps/hive/warehouse/transactions:

    $ sudo -u hdfs hdfs dfsadmin -allowSnapshot /apps/hive/warehouse/transactions

    Результат:

    Allowing snapshot on /apps/hive/warehouse/transactions succeeded

    Создайте снепшот HDFS-директории:

    $ sudo -u hdfs hdfs dfs -createSnapshot /apps/hive/warehouse/transactions snapshot_transactions

    Результат:

    Created snapshot /apps/hive/warehouse/{test-table-name}/.snapshot/snapshot_transactions

    Скопируйте снепшот во временную локацию, поскольку директория /apps/hive/warehouse/transactions будет удалена на дальнейших шагах. Например:

    $ sudo -u hdfs hadoop fs -mkdir /user/tmp
    $ sudo -u hdfs hadoop fs -chown hdfs:hdfs /user/tmp
    $ sudo -u hdfs hdfs dfs -cp /apps/hive/warehouse/transactions/.snapshot/snapshot_transactions /user/tmp

    Удалите снепшот из /apps/hive/warehouse/transactions. Этот шаг обязателен, иначе Hive не сможет удалить warehouse HDFS-директорию из-за наличия файлов снепшота внутри.

    $ sudo -u hdfs hdfs dfs -deleteSnapshot /apps/hive/warehouse/transactions/ snapshot_transactions
  4. Выполните дамп базы данных Hive Metastore. В этом сценарии Hive использует базу данных MariaDB, которая устанавливается как отдельный сервис ADH. Для других типов баз данных, например Postgres, используйте соответствующий синтаксис дампа. Для создания дампа базы данных MariaDB на хосте ADH с сервером MariaDB выполните команду с правами суперпользователя:

    $ sudo mysqldump -uroot hive > hive_backup.sql
  5. Запустите сервис Hive.

  6. Удалите тестовую Hive-таблицу.

    DROP TABLE transactions;

    Убедитесь, что HDFS директория /apps/hive/warehouse/transactions также была удалена.

  7. Восстановите тестовую таблицу Hive из резервной копии. Для этого выполните следующие шаги.

     
    Скопируйте файлы снепшота в директорию Hive warehouse в HDFS.

    $ sudo -u hdfs hdfs dfs -cp /user/tmp/snapshot_transactions /apps/hive/warehouse/transactions
    $ sudo -u hdfs hdfs dfs -ls /apps/hive/warehouse/transactions

    Затем импортируйте SQL дамп-файл в базу данных Hive Metastore. Для MariaDB используйте следующую команду:

    $ sudo mysql hive < hive_backup.sql
  8. Выполните рестарт сервиса Hive.

  9. Запросите данные из восстановленной Hive-таблицы:

    SELECT * FROM transactions;

    Вывод показывает, что тестовая таблица была успешно восстановлена.

    +----------------------+----------------------+--------------------------+------------------------+
    | transactions.txn_id  | transactions.acc_id  | transactions.txn_amount  | transactions.txn_date  |
    +----------------------+----------------------+--------------------------+------------------------+
    | 1                    | 1002                 | 10.00                    | 2023-01-01             |
    | 2                    | 1002                 | 20.00                    | 2023-01-03             |
    | 3                    | 1002                 | 30.00                    | 2023-01-02             |
    | 4                    | 1001                 | 100.50                   | 2023-01-02             |
    | 5                    | 1001                 | 150.50                   | 2023-01-04             |
    | 6                    | 1001                 | 200.50                   | 2023-01-03             |
    | 7                    | 1003                 | 50.00                    | 2023-01-03             |
    | 8                    | 1003                 | 50.00                    | 2023-01-01             |
    | 9                    | 1003                 | 75.00                    | 2023-01-04             |
    +----------------------+----------------------+--------------------------+------------------------+
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней