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

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

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

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

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

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

  • Возможные места хранения:

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

      • Большой двоичный объект в учетной записи хранения Azure, которая служит основной или дополнительной учетной записью хранения для кластера HDInsight. При создании кластера HDInsight получает доступ к обоим типам учетных записей хранения.

        Внимание

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

      • Data Lake Storage 1-го поколения. Кластер HDInsight субъекта-службы с доступом к Data Lake Storage должен иметь доступ к скрипту с правами на чтение. Формат URI скрипта Bash — adl://DATALAKESTOREACCOUNTNAME.azuredatalakestore.net/path_to_file.

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

      • Общедоступная служба совместного использования файлов, доступна по пути https://. Примерами являются служба больших двоичных объектов, 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, ваша учетная запись должна иметь доступ к группе ресурсов, содержащей кластер HDInsight, по крайней мере с правами Contributor.

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

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

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

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

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

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

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

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

Stages during cluster creation.

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

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

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

Примечание.

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

Внимание

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

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

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

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

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

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

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
  • Пакет SDK для HDInsight .NET

В 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 portal cluster script action.

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

    Add a script in the select script form.

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

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

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

  3. Чтобы сохранить скрипт, нажмите кнопку Создать. Чтобы добавить еще один сценарий, вы можете использовать элемент + Submit new (+ Отправить новый).

    HDInsight multiple script actions.

    По завершении добавления скриптов вы вернетесь на вкладку Настройка и цены.

  4. Выполните остальные шаги по созданию кластера как обычно.

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

Действия сценария можно использовать с шаблонами Azure Resource Manager. С примером ознакомьтесь в статье Create HDInsight Linux Cluster and run a script action (Создание кластера 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

Создание кластера может занять несколько минут.

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

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

Запуск скрипта в работающем кластере

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

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

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

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

  3. В верхней части страницы Действия скрипта выберите + Отправить новое.

    Add a script to a running cluster.

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

    Add a script in the select script form.

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

    Свойство Значение
    Выберите скрипт Чтобы использовать собственный скрипт, выберите Настраиваемый. В противном случае выберите предоставленный скрипт.
    Имя. Укажите имя для действия сценария.
    URI bash-скрипта Укажите URI сценария.
    Головной, рабочий или 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, zookeepernode, edgenode. Если скрипт нужно применить к нескольким типам узлов, разделите роли с помощью пробела. Например, --roles headnode workernode.

    Чтобы сохранить сценарий, добавьте --persist-on-success. Чтобы сохранить скрипт позднее, используйте az hdinsight script-action promote.

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

Ознакомьтесь со статьей Cluster REST API in Azure HDInsight (REST API кластера в Azure HDInsight).

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

Пример использования пакета SDK для .NET для применения сценариев к кластеру см. в статье Apply a Script Action against a running Linux-based HDInsight cluster (Применение действия сценариев к работающему кластеру HDInsight на основе Linux).

Представление журнала, повышение уровня и изменение типа действий сценариев

Портал Azure

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

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

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

    Portal script actions submit history.

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

    Script actions properties promote.

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

    Persisted script actions delete.

Azure PowerShell

командлет Function
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

Команда Description
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 Предоставляет сведения о выполнении скрипта для заданного ИД выполнения скрипта.

Пакет SDK для HDInsight .NET

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

Примечание.

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

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