Перенос данных кластера Apache HBase в новую версию

В этой статье рассматривается обновление кластера Apache HBase в Azure HDInsight до более новой версии.

Сведения в этой статье применимы только в том случае, если для исходных и целевых кластеров используется одна и та же учетная запись хранения Azure. Сведения об обновлении с использованием новой или другой учетной записи хранения для целевого кластера см. в статье о переносе Apache HBase в новую версию с новой учетной записью хранения.

Время простоя при таком обновлении должно составлять всего несколько минут. Этот простой связан с необходимостью записать на диск все данные из памяти, а также настроить службу в новом кластере и перезапустить ее. Результаты будут различаться в зависимости от количества узлов, объема данных и других переменных.

Проверка совместимости Apache HBase

Перед обновлением Apache HBase убедитесь, что версии HBase в исходном и конечном кластерах совместимы. Ознакомьтесь с матрицей совместимости версий HBase и заметками о выпуске в руководстве по HBase, чтобы убедиться в совместимости приложения с новой версией.

Ниже приведен пример матрицы совместимости версий. "Да" означает совместимость, а "Нет" — потенциальную несовместимость:

Тип совместимости Основной номер версии Дополнительный номер версии Обновление
Совместимость клиента и сервера на уровне передачи данных Нет Да Да
Совместимость серверов Нет Да Да
Совместимость форматов файлов Нет Да Да
Совместимость API клиента Нет Да Да
Совместимость клиента на уровне двоичного кода Нет N Да
Ограниченная совместимость API на стороне сервера
объем стабилен Нет Да Да
Развитие Нет N Да
Работает неустойчиво Нет N Нет
Совместимость зависимостей Нет Да Да
Совместимость операций Нет Нет Да

Дополнительные сведения о версиях HDInsight и о совместимости см. в статье Версии Azure HDInsight.

Общие сведения о переносе кластера Apache HBase

Чтобы обновить кластер Apache HBase в Azure HDInsight, выполните следующие основные действия. Для получения подробных инструкций см. подробные шаги и команды или используйте скрипты из раздела Миграция HBase с помощью скриптов для автоматической миграции.

Подготовка исходного кластера

  1. Остановите прием данных.
  2. Сбросьте все данные из memstore на диск.
  3. Остановите HBase в Ambari.
  4. Для кластеров с ускоренной записью создайте резервную копию каталога журнала упреждающего протоколирования (WAL).

Подготовка целевого кластера

  1. Создайте целевой кластер.
  2. Остановите HBase в Ambari.
  3. Обновите fs.defaultFS в конфигурациях службы HDFS для ссылки на исходный контейнер исходного кластера.
  4. Для кластеров с ускоренной записью обновите hbase.rootdir в конфигурациях службы HBase для ссылки на исходный контейнер исходного кластера.
  5. Очистите данные Zookeeper.

Выполнение миграции

  1. Очистите и перенесите WAL.
  2. Скопируйте приложения из контейнера по умолчанию целевого кластера в исходный контейнер.
  3. Запустите все службы в целевом кластере Ambari.
  4. Проверьте HBase.
  5. Удалите исходный кластер.

Подробные шаги и команды миграции

Эти подробные инструкции и команды позволяют перенести кластер Apache HBase.

Подготовка исходного кластера

  1. Остановите прием данных в исходный кластер HBase.

  2. Очистите исходный кластер HBase, который вы обновляете.

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

    Данные memstore можно сбросить на диск с помощью скрипта flush_all_tables. sh из репозитория Azure hbase-utils на сайте GitHub.

    Можно также сбросить данные memstore на диск, запустив следующую команду оболочки HBase из кластера HDInsight.

    hbase shell
    flush "<table-name>"
    
  3. Войдите в Apache Ambari в исходном кластере с помощью https://<OLDCLUSTERNAME>.azurehdinsight.net и остановите на нем работу служб HBase.

  4. В запросе установите флажок, подтверждающий включение режима обслуживания для HBase.

    Подробные сведения о подключении к платформе Ambari и ее использовании см. в статье Управление кластерами HDInsight с помощью веб-интерфейса Ambari.

  5. Если в исходном кластере HBase не используются операции ускоренной записи, пропустите этот шаг. Для исходных кластеров HBase с операциями ускоренной записи создайте резервную копию каталога WAL в HDFS, выполнив следующие команды из сеанса SSH на любом узле Zookeeper или рабочему узле исходного кластера.

    hdfs dfs -mkdir /hbase-wal-backup
    hdfs dfs -cp hdfs://mycluster/hbasewal /hbase-wal-backup
    

Подготовка целевого кластера

  1. На портале Azure настройте новый целевой кластер HDInsight, используя ту же учетную запись хранения, что и для исходного кластера, но укажите другое имя контейнера.

  2. Войдите в Apache Ambari в новом кластере (https://<NEWCLUSTERNAME>.azurehdinsight.net) и остановите работу служб HBase.

  3. В разделе Службы>HDFS>Конфигурации>Дополнительно>Дополнительные свойства core-site измените параметр HDFS fs.defaultFS так, чтобы он указывал на исходное имя контейнера исходного кластера. Например, значение параметра на следующем снимке экрана должно быть изменено на wasbs://hbase-upgrade-old-2021-03-22.

    В Ambari выберите Службы > HDFS > Configs > Advanced > Advanced Core-site и измените имя контейнера.

  4. Если в целевом кластере имеется функция ускоренной записи, измените путь hbase.rootdir так, чтобы он указывал на исходное имя контейнера исходного кластера. Например, следующий путь должен быть изменен на hbase-upgrade-old-2021-03-22. Если в кластере нет функции ускоренной записи, пропустите этот шаг.

    В Ambari измените имя контейнера для корневого каталога HBase.

  5. Очистите данные Zookeeper в целевом кластере, выполнив следующие команды на любом узле Zookeeper или на рабочем узле.

    hbase zkcli
    rmr /hbase-unsecure
    quit
    

Очистка и миграция WAL

Выполните те из следующих команд, которые соответствуют используемой исходной версии HDI и наличию функции ускоренной записи в исходном и целевом кластерах.

  • Целевой кластер всегда имеет версию HDI 4.0, так как HDI версии 3.6 имеет только поддержку Basic и не рекомендуется для новых кластеров.
  • В HDFS для копирования используется команда hdfs dfs <copy properties starting with -D> -cp <source> <destination> # Serial execution.

Примечание

  • Параметр <source-container-fullpath> для типа хранилища WASB имеет значение wasbs://<source-container-name>@<storageaccountname>.blob.core.windows.net.
  • Параметр <source-container-fullpath> для типа хранилища Azure Data Lake Storage 2-го поколения имеет значение abfs://<source-container-name>@<storageaccountname>.dfs.core.windows.net.

Исходный кластер HDI 3.6 или HDI 4.0 с ускоренной записью, в целевом кластере есть ускоренная запись

Очистите данные FS WAL для целевого кластера и скопируйте каталог WAL из исходного кластера в HDFS целевого кластера. Скопируйте каталог, выполнив следующие команды на любом узле Zookeeper или на рабочем узле целевого кластера.

sudo -u hbase hdfs dfs -rm -r hdfs://mycluster/hbasewal
sudo -u hbase hdfs dfs -cp <source-container-fullpath>/hbase-wal-backup/hbasewal hdfs://mycluster/

Исходный кластер HDI 3.6 без ускоренной записи, в целевом кластере есть ускоренная запись

Очистите данные FS WAL для целевого кластера и скопируйте каталог WAL из исходного кластера в HDFS целевого кластера. Скопируйте каталог, выполнив следующие команды на любом узле Zookeeper или на рабочем узле целевого кластера.

sudo -u hbase hdfs dfs -rm -r hdfs://mycluster/hbasewal
sudo -u hbase hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs" -cp <source-container>/hbase/*WALs hdfs://mycluster/hbasewal

Исходный кластер HDI 3.6 без ускоренной записи, в целевом кластере нет ускоренной записи

Очистите данные FS WAL для целевого кластера и скопируйте каталог WAL исходного кластера в HDFS целевого кластера. Скопируйте каталог, выполнив следующие команды на любом узле Zookeeper или на рабочем узле целевого кластера.

sudo -u hbase hdfs dfs -rm -r /hbase-wals/*
sudo -u hbase hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs" -cp <source-container-fullpath>/hbase/*WALs /hbase-wals

Исходный кластер HDI 4.0 без ускоренной записи, в целевом кластере есть ускоренная запись

Очистите данные FS WAL для целевого кластера и скопируйте каталог WAL из исходного кластера в HDFS целевого кластера. Скопируйте каталог, выполнив следующие команды на любом узле Zookeeper или на рабочем узле целевого кластера.

sudo -u hbase hdfs dfs -rm -r hdfs://mycluster/hbasewal
sudo -u hbase hdfs dfs -cp <source-container-fullpath>/hbase-wals/* hdfs://mycluster/hbasewal

Исходный кластер HDI 4.0 без ускоренной записи, в целевом кластере нет ускоренной записи

Очистите данные FS WAL для целевого кластера и скопируйте каталог WAL исходного кластера в HDFS целевого кластера. Скопируйте каталог, выполнив следующие команды на любом узле Zookeeper или на рабочем узле целевого кластера.

sudo -u hbase hdfs dfs -rm -r /hbase-wals/*
sudo -u hbase hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals /

Выполнение миграции

  1. Используя контекст пользователя sudo -u hdfs, скопируйте папку /hdp/apps/<new-version-name> и ее содержимое из <destination-container-fullpath> в папку /hdp/apps в <source-container-fullpath>. Чтобы скопировать папку, можно выполнить следующие команды в целевом кластере.

    sudo -u hdfs hdfs dfs -cp /hdp/apps/<hdi-version> <source-container-fullpath>/hdp/apps
    

    Пример:

    sudo -u hdfs hdfs dfs -cp /hdp/apps/4.1.3.6 wasbs://hbase-upgrade-old-2021-03-22@hbaseupgrade.blob.core.windows.net/hdp/apps
    
  2. В целевом кластере сохраните внесенные изменения и перезапустите все необходимые службы в соответствии с инструкциями Ambari.

  3. Настройте приложение для целевого кластера.

    Примечание

    Статическое DNS-имя приложения изменится после обновления. Вместо жесткого программирования этого DNS-имени можно настроить в параметрах DNS для доменного имени запись CNAME, которая указывает на имя кластера. Другой вариант — использовать файл конфигурации для приложения, которое можно обновить без повторного развертывания.

  4. Начните прием данных.

  5. Проверьте согласованность HBase и работу операций языка описания данных DDL и языка обработки данных DML.

  6. Если в целевом кластере все работает нормально, можно удалить исходный кластер.

Миграция HBase с помощью сценариев

  1. Выполните скрипт migrate-hbase-source.sh в исходном кластере и migrate-hbase-dest.sh в целевом кластере. Чтобы выполнить эти скрипты, используйте следующие инструкции.

    Примечание

    Эти скрипты не копируют старые WAL HBase в рамках миграции. Таким образом, скрипты не следует использовать в кластерах, для которых включена функция резервного копирования или репликации HBase.

  2. В исходном кластере

    sudo bash migrate-hbase-source.sh
    
  3. В целевом кластере

    sudo bash migrate-hbase-dest.sh  -f <src_default_Fs>
    

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

   -f, --src-fs
   The fs.defaultFS of the source cluster
   For example:
   -f wasb://anynamehbase0316encoder-2021-03-17t01-07-55-935z@anynamehbase0hdistorage.blob.core.windows.net

Дальнейшие действия

Дополнительные сведения о Apache HBase и обновлении кластеров HDInsight см. в следующих статьях: