Перенос 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 и перенести его в новую учетную запись хранения, выполните следующие действия. Подробные инструкции по каждому этапу и конкретные команды приводятся далее.
Подготовьте исходный кластер:
- Остановите прием данных.
- Очистка
memstore
данных. - Остановите HBase в Ambari.
- Для кластеров с ускоренной записью создайте резервную копию каталога журнала упреждающего протоколирования (WAL).
Подготовьте целевой кластер:
- Создайте целевой кластер.
- Остановите HBase в Ambari.
- Очистите данные Zookeeper.
- Переключите пользователя на HBase.
Выполните миграцию:
- Очистите целевую файловую систему, перенесите данные и удалите
/hbase/hbase.id
. - Очистите и перенесите WAL.
- Запустите все службы в целевом кластере Ambari.
- Проверьте HBase.
- Удалите исходный кластер.
Подробные шаги и команды миграции
Эти подробные инструкции и команды позволяют перенести кластер Apache HBase в новую учетную запись хранения.
Подготовка исходного кластера
Остановите прием данных в исходный кластер HBase.
Очистите исходный кластер HBase, который вы обновляете.
HBase записывает входящие данные в хранилище в памяти под названием a
memstore
.memstore
После достижения определенного размера HBase сбрасывает его на диск для долгосрочного хранения в учетной записи хранения кластера. При удалении исходного кластера после обновления также удаляются все данные в исходном кластереmemstores
. Чтобы сохранить данные, перед обновлением вручную вычистите каждую таблицуmemstore
на диск.Данные можно очистить
memstore
, выполнив скрипт flush_all_tables.sh из репозитория GitHub hbase-utils.Вы также можете очистить
memstore
данные, выполнив следующую команду оболочки HBase из кластера HDInsight:hbase shell flush "<table-name>"
Войдите в Apache Ambari в исходном кластере с помощью
https://<OLDCLUSTERNAME>.azurehdinsight.net
и остановите на нем работу служб HBase.При запросе установите флажок, подтверждающий включение режима обслуживания для HBase.
Подробные сведения о подключении к платформе Ambari и ее использовании см. в статье Управление кластерами HDInsight с помощью веб-интерфейса Ambari.
Если в исходном кластере HBase не используются операции ускоренной записи, пропустите этот шаг. Для исходных кластеров HBase с операциями ускоренной записи создайте резервную копию каталога WAL в HDFS, выполнив следующие команды в подключении по протоколу SSH к любому узлу Zookeeper исходного кластера или к рабочему узлу.
hdfs dfs -mkdir /hbase-wal-backup hdfs dfs -cp hdfs://mycluster/hbasewal /hbase-wal-backup
Подготовка целевого кластера
На портале Azure настройте новый целевой кластер HDInsight, у которого учетная запись хранения отличается от той, что используется в исходном кластере.
Войдите в Apache Ambari в новом кластере (
https://<NEWCLUSTERNAME>.azurehdinsight.net
) и остановите работу служб HBase.Очистите данные Zookeeper в целевом кластере, выполнив следующие команды на любом узле Zookeeper или на рабочем узле:
hbase zkcli rmr /hbase-unsecure quit
Переключите пользователя на HBase, выполнив команду
sudo su hbase
.
Очистка и перенос файловой системы и WAL
Выполните следующие команды с учетом используемой версии HDI на источнике и наличия операций ускоренной записи в исходном и целевом кластерах. Целевой кластер всегда имеет версию HDI 4.0, так как HDI версии 3.6 имеет только поддержку Basic и не рекомендуется для новых кластеров.
- Исходный кластер HDI 3.6 с ускоренной записью, в целевом кластере есть ускоренная запись.
- Исходный кластер HDI 3.6 без ускоренной записи, в целевом кластере есть ускоренная запись.
- Исходный кластер HDI 3.6 без ускоренной записи, в целевом кластере нет ускоренной записи.
- Исходный кластер HDI 4.0 с ускоренной записью, в целевом кластере есть ускоренная запись.
- Исходный кластер HDI 4.0 без ускоренной записи, в целевом кластере есть ускоренная запись.
- Исходный кластер HDI 4.0 без ускоренной записи, в целевом кластере нет ускоренной записи.
Параметр <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.
Выполните команду AzCopy:
azcopy cp "<source-container-endpoint-url>/hbase" "<target-container-endpoint-url>" --recursive
Если целевая учетная запись хранения является хранилищем 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 с ускоренной записью, в целевом кластере есть ускоренная запись
Чтобы очистить файловую систему и перенести данные, выполните следующие команды:
hdfs dfs -rm -r /hbase hadoop distcp <source-container-fullpath>/hbase /
Удалите
hbase.id
, выполнив командуhdfs dfs -rm /hbase/hbase.id
Чтобы очистить и перенести 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 без ускоренной записи, в целевом кластере есть ускоренная запись
Чтобы очистить файловую систему и перенести данные, выполните следующие команды:
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
Удалите
hbase.id
, выполнив командуhdfs dfs -rm /hbase/hbase.id
Чтобы очистить и перенести 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 без ускоренной записи, в целевом кластере нет ускоренной записи
Чтобы очистить файловую систему и перенести данные, выполните следующие команды:
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
Удалите
hbase.id
, выполнив командуhdfs dfs -rm /hbase/hbase.id
Чтобы очистить и перенести 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 без ускоренной записи, в целевом кластере есть ускоренная запись
Чтобы очистить файловую систему и перенести данные, выполните следующие команды:
hdfs dfs -rm -r /hbase hadoop distcp <source-container-fullpath>/hbase /
Удалите
hbase.id
, выполнив командуhdfs dfs -rm /hbase/hbase.id
Чтобы очистить и перенести 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 без ускоренной записи, в целевом кластере нет ускоренной записи
Чтобы очистить файловую систему и перенести данные, выполните следующие команды:
hdfs dfs -rm -r /hbase hadoop distcp <source-container-fullpath>/hbase /
Удалите
hbase.id
, выполнив командуhdfs dfs -rm /hbase/hbase.id
Чтобы очистить и перенести WAL, выполните следующие команды:
hdfs dfs -rm -r /hbase-wals/* hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals /
Выполнение переноса
В целевом кластере сохраните внесенные изменения и перезапустите все необходимые службы по инструкциям Ambari.
Настройте целевой кластер в приложении.
Примечание.
Статическое DNS-имя приложения изменится после обновления. Вместо жесткого программирования этого DNS-имени можно настроить в параметрах DNS для доменного имени запись CNAME, которая указывает на имя кластера. Другой вариант — использовать файл конфигурации для приложения, которое можно обновить без повторного развертывания.
Начните прием данных.
Проверьте согласованность HBase и работу операций языка описания данных DDL и языка обработки данных DML.
Если в целевом кластере все работает нормально, можно удалить исходный кластер.
Следующие шаги
Дополнительные сведения о Apache HBase и обновлении кластеров HDInsight см. в следующих статьях: