Поделиться через


Миграция Apache HBase на новую версию и новую учетную запись хранения

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

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

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

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

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

Ниже приведен пример матрицы совместимости. Y указывает совместимость и N указывает на потенциальную несовместимость:

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

Заметки о выпуске версии HBase должны описывать любые критические несовместимости. Протестируйте приложение в кластере, запустив целевые версии HDInsight и HBase.

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

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

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

Подготовьте исходный кластер:

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

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

  1. Создайте целевой кластер.
  2. Остановите HBase в Ambari.
  3. Очистите данные Zookeeper.
  4. Переключите пользователя на HBase.

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

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

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

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

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

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

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

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

    Данные можно сбросить, выполнив скрипт memstore из GitHub репозитория hbase-utils.

    Вы также можете очистить данные 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. Очистите данные Zookeeper в целевом кластере, выполнив следующие команды на любом узле Zookeeper или на рабочем узле:

    hbase zkcli
    rmr /hbase-unsecure
    quit
    
  4. Переключите пользователя на HBase, выполнив команду sudo su hbase.

Очистка и перенос файловой системы и WAL

Выполните следующие команды в зависимости от исходной версии HDI и наличия ускоренных операций записи в исходном и целевом кластерах. Целевой кластер всегда является HDI версии 4.0, так как HDI 3.6 находится в базовой поддержке и не рекомендуется для новых кластеров.

Параметр <container-endpoint-url> для учетной записи хранения имеет значение https://<storageaccount>.blob.core.windows.net/<container-name>. Передайте токен SAS для учетной записи хранения в самом конце URL-адреса.

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

Команды копирования

В HDFS для копирования используется команда hdfs dfs <copy properties starting with -D> -cp.

Если копируемые файлы имеют формат, отличный от страничного BLOB-объекта, используйте команду hadoop distcp для повышения производительности: hadoop distcp <copy properties starting with -D>

Чтобы передать ключ учетной записи хранения, используйте:

  • -Dfs.azure.account.key.<storageaccount>.blob.core.windows.net='<storage account key>'
  • -Dfs.azure.account.keyprovider.<storageaccount>.blob.core.windows.net=org.apache.hadoop.fs.azure.SimpleKeyProvider

Вы также можете применить AzCopy для повышения производительности при копировании файлов данных HBase.

  1. Выполните команду AzCopy:

    azcopy cp "<source-container-endpoint-url>/hbase" "<target-container-endpoint-url>" --recursive
    
  2. Если целевая учетная запись хранения является хранилищем BLOB-объектов Azure, выполните этот шаг после копирования. Если в качестве целевой учетной записи хранения используется Data Lake Storage 2-го поколения, пропустите этот шаг.

    Драйвер Hadoop WASB использует специальные блобы нулевого размера, соответствующие каждому каталогу. AzCopy пропускает эти файлы при копировании. Некоторые операции WASB используют эти блоки, поэтому их нужно создать в целевом кластере. Чтобы создать объекты BLOB, выполните следующую команду Hadoop на любом узле в целевом кластере.

    sudo -u hbase hadoop fs -chmod -R 0755 /hbase
    

Вы можете скачать AzCopy по ссылке, предоставленной в статье Начало работы с AzCopy. Дополнительные сведения об использовании AzCopy см. в azcopy copy.

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

  1. Чтобы очистить файловую систему и перенести данные, выполните следующие команды:

    hdfs dfs -rm -r /hbase 
    hadoop distcp <source-container-fullpath>/hbase /
    
  2. Удалите hbase.id, выполнив команду hdfs dfs -rm /hbase/hbase.id

  3. Чтобы очистить и перенести WAL, выполните следующие команды:

    hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal
    hdfs dfs -cp <source-container-fullpath>/hbase-wal-backup/hbasewal hdfs://<destination-cluster>/hbasewal
    

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

  1. Чтобы очистить файловую систему и перенести данные, выполните следующие команды:

    hdfs dfs -rm -r /hbase 
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase /
    hdfs dfs -rm -r /hbase/*WALs
    
  2. Удалите hbase.id, выполнив команду hdfs dfs -rm /hbase/hbase.id

  3. Чтобы очистить и перенести WAL, выполните следующие команды:

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

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

  1. Чтобы очистить файловую систему и перенести данные, выполните следующие команды:

    hdfs dfs -rm -r /hbase 
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase /
    hdfs dfs -rm -r /hbase/*WALs
    
  2. Удалите hbase.id, выполнив команду hdfs dfs -rm /hbase/hbase.id

  3. Чтобы очистить и перенести WAL, выполните следующие команды:

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

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

  1. Чтобы очистить файловую систему и перенести данные, выполните следующие команды:

    hdfs dfs -rm -r /hbase 
    hadoop distcp <source-container-fullpath>/hbase /
    
  2. Удалите hbase.id, выполнив команду hdfs dfs -rm /hbase/hbase.id

  3. Чтобы очистить и перенести WAL, выполните следующие команды:

    hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals hdfs://<destination-cluster>/hbasewal
    

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

  1. Чтобы очистить файловую систему и перенести данные, выполните следующие команды:

    hdfs dfs -rm -r /hbase 
    hadoop distcp <source-container-fullpath>/hbase /
    
  2. Удалите hbase.id, выполнив команду hdfs dfs -rm /hbase/hbase.id

  3. Чтобы очистить и перенести WAL, выполните следующие команды:

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

Завершение миграции

  1. В целевом кластере сохраните внесенные изменения и перезапустите все необходимые службы по инструкциям Ambari.

  2. Укажите в вашем приложении целевой кластер.

    Примечание.

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

  3. Начните поглощение.

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

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

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

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