Добавление дополнительных учетных записей хранения в 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.

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

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

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

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

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

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

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

Дальнейшие действия

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