Перенос стандартного хранилища базы метаданных Hive во внешнее хранилище базы метаданных
В этой статье показано, как перенести метаданные из хранилища базы метаданных по умолчанию для Hive во внешнюю базу данных SQL в HDInsight.
Зачем выполнять миграцию во внешнюю базу данных хранилища метаданных
База данных хранилища метаданных по умолчанию ограничена базовым номером SKU и не может обрабатывать рабочие нагрузки в рабочей среде.
Внешняя база данных хранилища метаданных позволяет клиенту горизонтально масштабировать вычислительные ресурсы Hive, добавляя новые кластеры HDInsight, совместно использующие одну и ту же базу данных хранилища метаданных.
Для миграции HDInsight 3.6 до версии 4.0 необходимо перенести метаданные во внешнюю базу данных хранилища метаданных перед обновлением версии схемы Hive. См. статью Миграция рабочих нагрузок с HDInsight 3.6 на HDInsight 4.0.
База данных хранилища метаданных по умолчанию с ограниченной вычислительной емкостью, поэтому рекомендуется низкое использование других заданий в кластере при переносе метаданных.
Исходная и целевая базы данных должны использовать одну и ту же версию HDInsight и одни и те же учетные записи хранения. При обновлении версий HDInsight с 3.6 до 4.0 сначала выполните действия, описанные в этой статье. Затем выполните официальные действия по обновлению, приведенные здесь.
Необходимые компоненты
Выполните следующий сценарий, чтобы обеспечить перенос этих расположений в другие кластеры. См. статью Запуск сценария в работающем кластере.
Действие аналогично замене символических ссылок своими полными путями.
Свойство | Значение |
---|---|
URI bash-скрипта | https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/hive-adl-expand-location-v01.sh |
Типы узлов | Head |
Параметры | "" |
Миграция с использованием экспорта и импорта с помощью sqlpackage
Только кластер HDInsight, созданный после 2020-10-15, может выполнить с помощью sqlpackage
экспорт/импорт SQL в базе данных Hive хранилища метаданных по умолчанию.
Установите sqlpackage в кластер.
Экспортируйте базу данных хранилища метаданных по умолчанию в BACPAC-файл, выполнив следующую команду.
wget "https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/hive_metastore_tool.py" SQLPACKAGE_FILE='/home/sshuser/sqlpackage/sqlpackage' # replace with sqlpackage location TARGET_FILE='hive.bacpac' sudo python hive_metastore_tool.py --sqlpackagefile $SQLPACKAGE_FILE --targetfile $TARGET_FILE
Сохраните BACPAC-файл.
hdfs dfs -mkdir -p /bacpacs hdfs dfs -put $TARGET_FILE /bacpacs/
Импортируйте BACPAC-файл в новую базу данных с помощью шагов, перечисленных здесь.
Новая база данных готова к настройке в качестве базы данных внешнего хранилища в новом кластере HDInsight.
Миграция с помощью сценария Hive
Кластеры, созданные до 2020-10-15, не поддерживают экспорт и импорт базы данных хранилища метаданных по умолчанию.
Для таких кластеров следуйте инструкциям по копированию таблиц Hive в учетных записях хранения, используя второй кластер с внешней базой данных хранилища метаданных Hive. Второй кластер может использовать ту же учетную запись хранения, но должен использовать новую файловую систему по умолчанию.
Вариант с "неполной" копией
Потребление хранилища удвоится при копировании таблиц с помощью руководства. Вам нужно будет вручную очистить данные в исходном контейнере хранилища. Вместо этого можно скопировать таблицы, если они нетрансактируются. Все таблицы Hive в HDInsight 3.6 являются нетрансактными по умолчанию, но только внешние таблицы являются нетрансактными в HDInsight 4.0. Транзакционные таблицы следует копировать "глубоким" методом. Выполните следующие действия, чтобы скопировать непрозрачные таблицы:
- Выполните сценарий hive-ddls.sh на основном головном узле исходного кластера, чтобы создать DDL для каждой таблицы Hive.
- DDL записывается в локальный сценарий Hive с именем
/tmp/hdi_hive_ddls.hql
. Выполните его в целевом кластере, который использует внешнюю базу данных хранилища метаданных Hive.
Убедитесь, что импортированы все таблицы Hive.
Следующая команда использует SQL-запрос в базе данных хранилища метаданных для вывода всех таблиц Hive и расположения их данных. Сравните выходные данные новых и старых кластеров и убедитесь, что таблиц в новой базе данных хранилища метаданных нет.
SCRIPT_FNAME='hive_metastore_tool.py'
SCRIPT="/tmp/$SCRIPT_FNAME"
wget -O "$SCRIPT" "https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/$SCRIPT_FNAME"
OUTPUT_FILE='/tmp/hivetables.csv'
QUERY="SELECT DBS.NAME, TBLS.TBL_NAME, SDS.LOCATION FROM SDS, TBLS, DBS WHERE TBLS.SD_ID = SDS.SD_ID AND TBLS.DB_ID = DBS.DB_ID ORDER BY DBS.NAME, TBLS.TBL_NAME ASC;"
sudo python "$SCRIPT" --query "$QUERY" > $OUTPUT_FILE