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


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

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

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

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

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

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

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

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

Все критические несовместимости должны быть описаны в заметках о выпуске версии 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 , выполнив скрипт flush_all_tables.sh из репозитория 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 имеет только поддержку Basic и не рекомендуется для новых кластеров.

Параметр <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 используют эти большие двоичные объекты, поэтому их придется заново создать в целевом кластере. Чтобы создать эти большие двоичные объекты, выполните следующую команду 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 см. в следующих статьях: