Бөлісу құралы:


Перенос стандартного хранилища базы метаданных 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 хранилища метаданных по умолчанию.

  1. Установите sqlpackage в кластер.

  2. Экспортируйте базу данных хранилища метаданных по умолчанию в 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
    
  3. Сохраните BACPAC-файл.

    hdfs dfs -mkdir -p /bacpacs
    hdfs dfs -put $TARGET_FILE /bacpacs/
    
  4. Импортируйте BACPAC-файл в новую базу данных с помощью шагов, перечисленных здесь.

  5. Новая база данных готова к настройке в качестве базы данных внешнего хранилища в новом кластере HDInsight.

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

Кластеры, созданные до 2020-10-15, не поддерживают экспорт и импорт базы данных хранилища метаданных по умолчанию.

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

Вариант с "неполной" копией

Потребление хранилища удвоится при копировании таблиц с помощью руководства. Вам нужно будет вручную очистить данные в исходном контейнере хранилища. Вместо этого можно скопировать таблицы, если они нетрансактируются. Все таблицы Hive в HDInsight 3.6 являются нетрансактными по умолчанию, но только внешние таблицы являются нетрансактными в HDInsight 4.0. Транзакционные таблицы следует копировать "глубоким" методом. Выполните следующие действия, чтобы скопировать непрозрачные таблицы:

  1. Выполните сценарий hive-ddls.sh на основном головном узле исходного кластера, чтобы создать DDL для каждой таблицы Hive.
  2. 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

Дополнительные материалы