Настройка кластеров Azure HDInsight с помощью действий скрипта

Azure HDInsight предоставляет метод конфигурации, называемый действиями скриптов , которые вызывают пользовательские скрипты для настройки кластера. Эти скрипты используются для установки дополнительных компонентов и изменения параметров конфигурации. Действия скрипта можно использовать во время или после создания кластера.

Действия скрипта также можно опубликовать в Azure Marketplace в качестве приложения HDInsight. Дополнительные сведения о приложениях HDInsight см. в статье "Публикация приложения HDInsight в Azure Marketplace".

Общие сведения о действиях скрипта

Действие скрипта — это скрипт Bash, который выполняется на узлах в кластере HDInsight. Характеристики и функции действий скрипта приведены следующим образом:

  • URI скрипта Bash (расположение для доступа к файлу) должен быть доступен от поставщика ресурсов HDInsight и кластера.

  • Ниже приведены возможные расположения хранилища:

    • Для обычных (не ESP) кластеров:

      • BLOB в учетной записи хранения Azure, которая служит основным или дополнительным хранилищем для кластера HDInsight. HDInsight предоставляется доступ к обоим из этих типов учетных записей хранения во время создания кластера.

        Это важно

        Не поворачивайте ключ хранилища в этой учетной записи хранения Azure, так как это приведет к сбою последующих действий скриптов с скриптами, хранящимися там.

      • Хранилище Data Lake Storage Gen1: Принципал сервиса HDInsight, используемый для доступа к Data Lake Storage, должен иметь права на чтение скрипта. Формат URI скрипта Bash adl://DATALAKESTOREACCOUNTNAME.azuredatalakestore.net/path_to_file.

      • Data Lake Storage Gen2 не рекомендуется использовать для скриптовых действий. abfs:// не поддерживается для URI скрипта Bash. https:// URI возможны, но они работают для контейнеров с общедоступным доступом, а брандмауэр открыт для поставщика ресурсов HDInsight и поэтому не рекомендуется.

      • Общедоступная служба общего доступа к файлам, доступная через https:// пути. Примерами являются BLOB-объекты Azure, GitHub или OneDrive. Примеры URI см. в примерах сценариев действий.

    • Для кластеров с ESP поддерживаются URI wasb://, wasbs:// или http[s]://.

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

  • Действия скрипта можно сохранять или выполнять на лету.

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

  • Действия скрипта выполняются с привилегиями корневого уровня на узлах кластера.

  • Действия скрипта можно использовать с помощью портала Azure, Azure PowerShell, Azure CLI или пакета SDK HDInsight для .NET.

  • Действия скрипта, которые удаляют или изменяют файлы служб на виртуальной машине, могут повлиять на работоспособность и доступность службы.

Кластер сохраняет журнал всех выполняемых скриптов. История помогает, когда нужно найти идентификатор скрипта для операций повышения или понижения.

Это важно

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

Разрешения

Для присоединенного к домену кластера HDInsight существует два разрешения Apache Ambari, необходимые при использовании действий скрипта с кластером:

  • AMBARI.RUN_CUSTOM_COMMAND. Роль администратора Ambari имеет это разрешение по умолчанию.
  • CLUSTER.RUN_CUSTOM_COMMAND. Администратор кластера HDInsight и администратор Ambari имеют это разрешение по умолчанию.

Дополнительные сведения о работе с разрешениями с присоединенным к домену HDInsight см. в статье "Управление кластерами HDInsight с помощью корпоративного пакета безопасности".

Управление доступом

Если вы не являетесь администратором или владельцем подписки Azure, ваша учетная запись должна иметь по крайней мере Contributor доступ к группе ресурсов, содержащей кластер HDInsight.

Пользователь с по крайней мере доступом участника к подписке Azure должен ранее зарегистрировать поставщика. Регистрация поставщика происходит, когда пользователь с доступом участника к подписке создает ресурс. Чтобы не создавать ресурс, см. статью о регистрации поставщика с помощью REST.

Дополнительные сведения о работе с управлением доступом:

Методы использования действий скрипта

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

Действие скрипта в процессе создания кластера

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

  • Скрипт сохраняется автоматически.
  • Сбой в скрипте может привести к сбою процесса создания кластера.

На следующей схеме показано, когда действие скрипта выполняется во время процесса создания:

Этапы во время создания кластера.

Скрипт выполняется во время настройки HDInsight. Скрипт выполняется параллельно со всеми указанными узлами в кластере. Он выполняется с правами root на узлах.

Вы можете выполнять такие операции, как остановка и запуск служб, включая службы, связанные с Apache Hadoop. Если вы останавливаете службы, убедитесь, что Ambari и другие службы, связанные с Hadoop, выполняются до завершения скрипта. Эти необходимые службы определяют работоспособность и состояние кластера во время его создания.

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

Примечание.

Если скрипт присутствует в любой другой учетной записи хранения, отличной от того, что указано в качестве хранилища кластера (во время создания кластера), для этого потребуется общедоступный доступ.

Это важно

Действия скрипта должны завершиться в течение 60 минут или истекает время ожидания. Во время подготовки кластера скрипт выполняется параллельно с другими процессами настройки и конфигурации. Конкуренция за ресурсы, такие как время ЦП или пропускная способность сети, может привести к тому, что сценарий займет больше времени, чем в вашей среде разработки.

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

Действие скрипта в работающем кластере

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

Действия скриптов выполняются с правами root. Прежде чем применять сценарий к кластеру, убедитесь, что вы понимаете, что именно он делает.

При применении скрипта к кластеру состояние кластера изменяется с "Выполнение" на "Принято". Затем он изменится на конфигурацию HDInsight и, наконец, вернется к состоянию Выполняется для успешных сценариев. Состояние скрипта регистрируется в журнале действий скрипта. Эта информация указывает, выполнен ли скрипт успешно или завершился сбоем. Например, Get-AzHDInsightScriptActionHistory командлет PowerShell показывает состояние скрипта. Он возвращает сведения, аналогичные следующему тексту:

ScriptExecutionId : 635918532516474303
StartTime         : 8/14/2017 7:40:55 PM
EndTime           : 8/14/2017 7:41:05 PM
Status            : Succeeded

Это важно

Если вы измените пользователя кластера, администратора или пароль после создания кластера, действия скрипта, выполняемые в этом кластере, могут завершиться ошибкой. Если у вас есть какие-либо сохраненные скриптовые действия, предназначенные для рабочих узлов, эти скрипты могут завершиться ошибкой при масштабировании кластера.

Примеры сценариев действий

Сценарии действий можно использовать при помощи следующих утилит:

  • Портал Azure
  • Azure PowerShell
  • Azure CLI (интерфейс командной строки Azure)
  • HDInsight .NET SDK

HDInsight предоставляет скрипты для установки следующих компонентов в кластерах HDInsight:

Имя Сценарий
Добавление учетной записи хранения Azure https://hdiconfigactions.blob.core.windows.net/linuxaddstorageaccountv01/add-storage-account-v01.sh. См. Добавление дополнительных учетных записей хранения в HDInsight.
Установка Hue https://hdiconfigactions.blob.core.windows.net/linuxhueconfigactionv02/install-hue-uber-v02.sh. См. статью "Установка и использование Hue" в кластерах HDInsight Hadoop.
Предварительная загрузка библиотек Hive https://hdiconfigactions.blob.core.windows.net/linuxsetupcustomhivelibsv01/setup-customhivelibs-v01.sh. См. статью "Добавление пользовательских библиотек Apache Hive" при создании кластера HDInsight.

Действие скрипта во время создания кластера

В этом разделе описаны различные способы использования действий скриптов при создании кластера HDInsight.

Использование действия скрипта во время создания кластера на портале Azure

  1. Начните создавать кластер, как описано в статье "Создание кластеров под управлением Linux в HDInsight" с помощью портала Azure. На вкладке "Конфигурация + цены" выберите +Добавить действие скрипта.

    Действие скрипта кластера портала Azure.

  2. Используйте запись "Выбор скрипта" для выбора предварительно созданного скрипта. Чтобы использовать настраиваемый скрипт, выберите "Настраиваемый". Затем укажите Имя и URI скрипта Bash для вашего скрипта.

    Добавьте скрипт в форму выбора скрипта.

    В следующей таблице описываются элементы формы:

    Недвижимость Ценность
    Выбор скрипта Чтобы использовать собственный скрипт, выберите "Настраиваемый". В противном случае выберите один из предоставленных скриптов.
    Имя Укажите имя действия скрипта.
    URI bash-скрипта Укажите URI скрипта.
    Head/Worker/ZooKeeper Укажите узлы, на которых выполняется скрипт: Head, Worker или ZooKeeper.
    Параметры Укажите параметры, если это необходимо для скрипта.

    Используйте команду "Сохранить это действие скрипта", чтобы гарантировать, что скрипт применяется во время операций масштабирования.

  3. Нажмите кнопку "Создать", чтобы сохранить скрипт. Затем можно использовать +Отправить новое для добавления другого скрипта.

    Несколько скриптовых действий HDInsight.

    После добавления скриптов вы вернитесь на вкладку "Конфигурация и цены ".

  4. Выполните остальные действия по созданию кластера обычным образом.

Используйте действие скрипта из шаблонов Azure Resource Manager

Действия скрипта можно использовать с шаблонами Azure Resource Manager. Пример см. в статье "Создание кластера HDInsight Linux" и выполнение действия скрипта.

В этом примере действие скрипта добавляется с помощью следующего кода:

"scriptActions": [
    {
        "name": "setenvironmentvariable",
        "uri": "[parameters('scriptActionUri')]",
        "parameters": "headnode"
    }
]

Чтобы получить дополнительные сведения о том, как развернуть шаблон:

Использование действия скрипта во время создания кластера из Azure PowerShell

В этом разделе вы используете командлет Add-AzHDInsightScriptAction для вызова скриптов для настройки кластера. Прежде чем начать, установите и настройте Azure PowerShell. Чтобы использовать эти команды PowerShell, вам потребуется модуль AZ.

В следующем сценарии показано, как применить действие скрипта при создании кластера с помощью PowerShell:

# Login to your Azure subscription
$context = Get-AzContext
if ($context -eq $null) 
{
    Connect-AzAccount
}
$context

# If you have multiple subscriptions, set the one to use
# $subscriptionID = "<subscription ID to use>"
# Select-AzSubscription -SubscriptionId $subscriptionID

# Get user input/default values
$resourceGroupName = Read-Host -Prompt "Enter the resource group name"
$location = Read-Host -Prompt "Enter the Azure region to create resources in"

# Create the resource group
New-AzResourceGroup -Name $resourceGroupName -Location $location

$defaultStorageAccountName = Read-Host -Prompt "Enter the name of the storage account"

# Create an Azure storae account and container
New-AzStorageAccount `
    -ResourceGroupName $resourceGroupName `
    -Name $defaultStorageAccountName `
    -Type Standard_LRS `
    -Location $location
$defaultStorageAccountKey = (Get-AzStorageAccountKey `
                                -ResourceGroupName $resourceGroupName `
                                -Name $defaultStorageAccountName)[0].Value
$defaultStorageContext = New-AzStorageContext `
                                -StorageAccountName $defaultStorageAccountName `
                                -StorageAccountKey $defaultStorageAccountKey

# Get information for the HDInsight cluster
$clusterName = Read-Host -Prompt "Enter the name of the HDInsight cluster"
# Cluster login is used to secure HTTPS services hosted on the cluster
$httpCredential = Get-Credential -Message "Enter Cluster login credentials" -UserName "admin"
# SSH user is used to remotely connect to the cluster using SSH clients
$sshCredential = Get-Credential -Message "Enter SSH user credentials"

# Default cluster size (# of worker nodes), version, type, and OS
$clusterSizeInNodes = "4"
$clusterVersion = "3.5"
$clusterType = "Hadoop"
$clusterOS = "Linux"
# Set the storage container name to the cluster name
$defaultBlobContainerName = $clusterName

# Create a blob container. This holds the default data store for the cluster.
New-AzStorageContainer `
    -Name $clusterName -Context $defaultStorageContext

# Create an HDInsight configuration object
$config = New-AzHDInsightClusterConfig
# Add the script action
$scriptActionUri="https://hdiconfigactions.blob.core.windows.net/linuxgiraphconfigactionv01/giraph-installer-v01.sh"
# Add for the head nodes
$config = Add-AzHDInsightScriptAction `
    -Config $config `
    -Name "Install Giraph" `
    -NodeType HeadNode `
    -Uri $scriptActionUri
# Continue adding the script action for any other node types
# that it must run on.
$config = Add-AzHDInsightScriptAction `
    -Config $config `
    -Name "Install Giraph" `
    -NodeType WorkerNode `
    -Uri $scriptActionUri

# Create the cluster using the configuration object
New-AzHDInsightCluster `
    -Config $config `
    -ResourceGroupName $resourceGroupName `
    -ClusterName $clusterName `
    -Location $location `
    -ClusterSizeInNodes $clusterSizeInNodes `
    -ClusterType $clusterType `
    -OSType $clusterOS `
    -Version $clusterVersion `
    -HttpCredential $httpCredential `
    -DefaultStorageAccountName "$defaultStorageAccountName.blob.core.windows.net" `
    -DefaultStorageAccountKey $defaultStorageAccountKey `
    -DefaultStorageContainer $containerName `
    -SshCredential $sshCredential

До создания кластера может потребоваться несколько минут.

Выполнение скрипта при создании кластера с использованием .NET SDK для HDInsight

Пакет SDK для HDInsight для .NET предоставляет клиентские библиотеки, упрощающие работу с HDInsight из приложения .NET. Пример кода см. в разделе "Действия скрипта".

Действие скрипта в запущенном кластере

В этом разделе объясняется, как применять действия скрипта в работающем кластере.

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

  1. Войдите на портал Azure и найдите кластер.

  2. В представлении по умолчанию в разделе "Параметры" выберите "Действия скрипта".

  3. В верхней части страницы действий скрипта нажмите кнопку +Отправить новое.

    Добавьте сценарий в запущенный кластер.

  4. Используйте запись "Выбор скрипта" для выбора предварительно созданного скрипта. Чтобы использовать настраиваемый скрипт, выберите "Настраиваемый". Затем укажите Name и URI скрипта Bash для вашего скрипта.

    Добавьте скрипт в форму выбора скрипта.

    В следующей таблице описываются элементы формы:

    Недвижимость Ценность
    Выбор скрипта Чтобы использовать собственный скрипт, выберите настраиваемый. В противном случае выберите предоставленный скрипт.
    Имя Укажите имя действия скрипта.
    URI bash-скрипта Укажите универсальный код ресурса (URI) скрипта.
    Head/Worker/Zookeeper Укажите узлы, на которых выполняется скрипт: Head, Worker или ZooKeeper.
    Параметры Укажите параметры, если это необходимо для скрипта.

    Используйте пункт "Сохранить этот скрипт", чтобы убедиться, что скрипт применяется во время операций масштабирования.

  5. Наконец, нажмите кнопку "Создать ", чтобы применить скрипт к кластеру.

Применение действия скрипта к работающему кластеру из Azure PowerShell

Чтобы использовать эти команды PowerShell, вам потребуется модуль AZ. В следующем примере показано, как применить действие скрипта к работающему кластеру:

# Get information for the HDInsight cluster
$clusterName = Read-Host -Prompt "Enter the name of the HDInsight cluster"
$scriptActionName = Read-Host -Prompt "Enter the name of the script action"
$scriptActionUri = Read-Host -Prompt "Enter the URI of the script action"
# The node types that the script action is applied to
$nodeTypes = "headnode", "workernode"

# Apply the script and mark as persistent
Submit-AzHDInsightScriptAction -ClusterName $clusterName `
    -Name $scriptActionName `
    -Uri $scriptActionUri `
    -NodeTypes $nodeTypes `
    -PersistOnSuccess

После завершения операции вы получите сведения, аналогичные следующему тексту:

OperationState  : Succeeded
ErrorMessage    :
Name            : Giraph
Uri             : https://hdiconfigactions.blob.core.windows.net/linuxgiraphconfigactionv01/giraph-installer-v01.sh
Parameters      :
NodeTypes       : {HeadNode, WorkerNode}

Применение действия скрипта к работающему кластеру из Azure CLI

Прежде чем начать, установите и настройте Azure CLI. Убедитесь, что у вас установлена последняя версия. Дополнительные сведения см. в статье Установка Azure CLI.

  1. Пройдите аутентификацию в подписке Azure.

    az login
    
  2. Примените действие скрипта к работающему кластеру:

    az hdinsight script-action execute --cluster-name CLUSTERNAME --name SCRIPTNAME --resource-group RESOURCEGROUP --roles ROLES
    

    Допустимые роли: headnode, workernode, zookeepernodeedgenode. Если скрипт должен применяться к нескольким типам узлов, разделите роли по пробелу. Например: --roles headnode workernode.

    Чтобы сохранить скрипт, добавьте --persist-on-success. Вы также можете сохранить скрипт позже с помощью az hdinsight script-action promote.

Применение действия скрипта к работающему кластеру с помощью REST API

См. Cluster REST API в Azure HDInsight.

Применить действие скрипта к работающему кластеру из пакета SDK для HDInsight .NET

Пример использования пакета SDK для .NET для применения скриптов к кластеру см. в статье "Применение действия скрипта" к работающему кластеру HDInsight под управлением Linux.

Просмотр истории и повышение и понижение скриптовых действий

Портал Azure

  1. Войдите на портал Azure и найдите кластер.

  2. В представлении по умолчанию в разделе "Параметры" выберите "Действия скрипта".

  3. Журнал сценариев для этого кластера отображается в разделе действий скрипта. Эти сведения содержат список сохраненных скриптов. На следующем снимку экрана показано, что сценарий Solr запущен в этом кластере. Снимок экрана не отображает сохраненные скрипты.

    Действия скрипта портала по отправке журнала.

  4. Выберите сценарий из журнала, чтобы отобразить раздел "Свойства " для этого скрипта. В верхней части экрана можно повторно запустить скрипт или повысить его.

    Продвигайте свойства действия скрипта.

  5. Вы также можете выбрать многоточие, ..., справа от записей в разделе действий скрипта для выполнения действий.

    Сохраненные действия скрипта удаляются.

Azure PowerShell

cmdlet Функция
Get-AzHDInsightPersistedScriptAction Получение сведений о сохраненных действиях скрипта. Этот командлет не отменяет действия, выполненные скриптом, он удаляет только сохраненный флаг.
Get-AzHDInsightScriptActionHistory Извлеките журнал действий скриптов, применяемых к кластеру, или подробности для конкретного скрипта.
Set-AzHDInsightPersistedScriptAction Превратите действие скрипта ad hoc в сохраняемое действие скрипта.
Remove-AzHDInsightPersistedScriptAction Понизить сохраняемое действие скрипта ad hoc до обычного действия.

В следующем примере скрипта показано использование командлетов для повышения и понижения уровня скрипта.

# Get a history of scripts
Get-AzHDInsightScriptActionHistory -ClusterName mycluster

# From the list, we want to get information on a specific script
Get-AzHDInsightScriptActionHistory -ClusterName mycluster `
    -ScriptExecutionId 635920937765978529

# Promote this to a persisted script
# Note: the script must have a unique name to be promoted
# if the name is not unique, you receive an error
Set-AzHDInsightPersistedScriptAction -ClusterName mycluster `
    -ScriptExecutionId 635920937765978529

# Demote the script back to ad hoc
# Note that demotion uses the unique script name instead of
# execution ID.
Remove-AzHDInsightPersistedScriptAction -ClusterName mycluster `
    -Name "Install Giraph"

Azure CLI (интерфейс командной строки Azure)

командование Описание
az hdinsight script-action delete Удаляет указанное действие сохраненного скрипта кластера. Эта команда не отменяет действия, выполненные скриптом, она удаляет только сохраненный флаг.
az hdinsight script-action execute Выполнение действий скрипта в указанном кластере HDInsight.
az hdinsight script-action list Перечисляет все сохраненные действия скрипта для указанного кластера.
az hdinsight script-action list-execution-history Перечисляет журнал выполнения всех скриптов для указанного кластера.
az hdinsight script-action promote Повышает статус заданного разового выполнения скрипта в постоянный скрипт.
az hdinsight script-action show-execution-details Возвращает сведения о выполнении скрипта для заданного идентификатора выполнения скрипта.

HDInsight .NET SDK

Пример использования пакета SDK для .NET для получения журнала сценариев из кластера, повышения или понижения скриптов см. в разделе "Применение действия скрипта" к работающему кластеру HDInsight под управлением Linux.

Примечание.

В этом примере также показано, как установить приложение HDInsight с помощью пакета SDK для .NET.

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