Добавление дополнительных учетных записей хранения в HDInsight

Узнайте, как использовать действия скрипта для добавления дополнительных учетных записей служба хранилища Azure в HDInsight. В этом документе описаны действия по добавлению учетной записи хранения в существующий кластер HDInsight. Эта статья относится к учетным записям хранения (не к учетной записи хранения кластера по умолчанию), а не к дополнительным хранилищам, таким как Azure Data Lake Storage Gen1 и Azure Data Lake Storage Gen2.

Внимание

В этом документе описано, как добавить дополнительные учетные записи хранения в кластер после его создания. Сведения о добавлении учетных записей хранения во время создания кластера см. в статье о настройке кластеров HDInsight с использованием Apache Hadoop, Apache Spark, Apache Kafka и других платформ.

Необходимые компоненты

Как это работает

При обработке скрипт выполняет следующие действия.

  • Если учетная запись хранения уже существует в конфигурации core-site.xml для кластера, скрипт завершает работу и дальнейшие действия не выполняются.

  • Проверяет существование учетной записи хранения и ее доступность с помощью ключа.

  • Шифрует ключ с использованием учетных данных кластера.

  • Добавляет учетную запись хранилища в файл core-site.xml.

  • Останавливает и перезапускает службы Apache Oozie, Apache Hadoop YARN, Apache Hadoop MapReduce2 и Apache Hadoop HDFS. Остановка и запуск этих служб позволяет им использовать новую учетную запись хранения.

Предупреждение

Использование учетной записи хранения, расположение которой отличается от расположения кластера HDInsight, не поддерживается.

Добавление учетной записи хранения

Используйте действие скрипта, чтобы применить изменения, приняв во внимание следующие соображения.

Свойство Значение
URI bash-скрипта https://hdiconfigactions.blob.core.windows.net/linuxaddstorageaccountv01/add-storage-account-v01.sh
Типы узлов Head
Параметры ACCOUNTNAMEACCOUNTKEY-p (необязательно)
  • ACCOUNTNAME — имя учетной записи хранения, добавляемой в кластер HDInsight.
  • ACCOUNTKEY — ключ доступа для ACCOUNTNAME.
  • -p является необязательным. Если этот параметр указан, ключ не шифруется и хранится в файле core-site.xml как обычный текст.

Проверка

При просмотре кластера HDInsight в портал Azure выберите запись "Учетные записи служба хранилища" в разделе "Свойства" не отображает учетные записи хранения, добавленные с помощью этого действия скрипта. Azure PowerShell и Azure CLI также не отображают дополнительные учетные записи хранения. Информация о хранилище не отображается, так как сценарий изменяет только конфигурацию core-site.xml для кластера. Эта информация не используется при получении сведений о кластере с помощью интерфейсов API управления Azure.

Чтобы проверить использование дополнительного хранилища, воспользуйтесь одним из указанных методов:

PowerShell

Скрипт возвращает имена служба хранилища учетной записи, связанные с заданным кластером. Замените CLUSTERNAME фактическим именем кластера, а затем запустите скрипт.

# Update values
$clusterName = "CLUSTERNAME"

$creds = Get-Credential -UserName "admin" -Message "Enter the cluster login credentials"

$clusterName = $clusterName.ToLower();

# getting service_config_version
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName`?fields=Clusters/desired_service_config_versions/HDFS" `
    -Credential $creds -UseBasicParsing
$respObj = ConvertFrom-Json $resp.Content

$configVersion=$respObj.Clusters.desired_service_config_versions.HDFS.service_config_version

$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations/service_config_versions?service_name=HDFS&service_config_version=$configVersion" `
    -Credential $creds
$respObj = ConvertFrom-Json $resp.Content

# extract account names
$value = ($respObj.items.configurations | Where type -EQ "core-site").properties | Get-Member -membertype properties | Where Name -Like "fs.azure.account.key.*"
foreach ($name in $value ) { $name.Name.Split(".")[4]}

Apache Ambari

  1. В веб-браузере перейдите на страницу https://CLUSTERNAME.azurehdinsight.net, где CLUSTERNAME — это имя вашего кластера.

  2. Перейдите в раздел HDFS >Конфигурации >Расширенные >Пользовательский основной сайт.

  3. Обратите внимание на ключи, которые начинаются с fs.azure.account.key. Имя учетной записи является частью ключа, как показано на этом примере изображения:

    verification through Apache Ambari.

Удаление учетной записи хранения

  1. В веб-браузере перейдите на страницу https://CLUSTERNAME.azurehdinsight.net, где CLUSTERNAME — это имя вашего кластера.

  2. Перейдите в раздел HDFS >Конфигурации >Расширенные >Пользовательский основной сайт.

  3. Удалите следующие ключи:

    • fs.azure.account.key.<STORAGE_ACCOUNT_NAME>.blob.core.windows.net
    • fs.azure.account.keyprovider.<STORAGE_ACCOUNT_NAME>.blob.core.windows.net

После удаления этих ключей и сохранения конфигурации необходимо по очереди перезапустить Oozie, Yarn, MapReduce2, HDFS и Hive.

Известные проблемы

Брандмауэр хранилища

Если вы решили защитить учетную запись хранения с помощью брандмауэров и ограничений виртуальных сетей в выбранных сетях, обязательно включите исключение Allow trusted службы Майкрософт, чтобы HDInsight мог получить доступ к учетной записи хранения.

Не удается получить доступ к хранилищу после изменения ключа

Если вы измените ключ для учетной записи хранения, HDInsight больше не сможет обращаться к этой учетной записи. HDInsight использует кэшированную копию ключа в core-site.xml для кластера. Эту копию нужно обновить в соответствии с новым ключом.

При повторном запуске действия сценария ключ не обновляется, так как сценарий проверяет наличие записи для учетной записи хранения. Если запись уже существует, он не вносит какие-либо изменения.

Действия по решению этой проблемы:

Следующие шаги

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