Пакет SDK HDInsight для PythonHDInsight SDK for Python

ОбзорOverview

Пакет SDK HDInsight для Python предоставляет классы и методы для управления кластерами HDInsight.The HDInsight SDK for Python provides classes and methods that allow you to manage your HDInsight clusters. Пакет также поддерживает операции создания, удаления, обновления, получения списков, масштабирования, выполнения скриптов, мониторинга, получения свойства кластеров HDInsight и т. д.It includes operations to create, delete, update, list, resize, execute script actions, monitor, get properties of HDInsight clusters, and more.

Предварительные требованияPrerequisites

Установка пакета SDKSDK Installation

Пакет SDK HDInsight для Python можно найти на сайте Python Package Index и установить с помощью команды:The HDInsight SDK for Python can be found in the Python Package Index and can be installed by running:

pip install azure-mgmt-hdinsight

АутентификацияAuthentication

Для использования пакета SDK нужно выполнить аутентификацию с помощью подписки Azure.The SDK first needs to be authenticated with your Azure subscription. Ниже описано, как создать субъект-службу и использовать его для аутентификации.Follow the example below to create a service principal and use it to authenticate. После этого вы получите экземпляр HDInsightManagementClient, в котором доступны различные методы (описанные далее) для операций управления.After this is done, you will have an instance of an HDInsightManagementClient, which contains many methods (outlined in below sections) that can be used to perform management operations.

Примечание

Кроме описанного выше, есть и другие методы аутентификации, которые могут оказаться удобнее для вас.There are other ways to authenticate besides the below example that could potentially be better suited for your needs. Все способы описаны в статье Проверка подлинности с помощью библиотек управления Azure для PythonAll methods are outlined here: Authenticate with the Azure Management Libraries for Python

Пример аутентификации с помощью субъекта-службыAuthentication Example Using a Service Principal

Сначала войдите в Azure Cloud Shell.First, login to Azure Cloud Shell. Убедитесь, что вы используете подписку, в которой будет создан субъект-служба.Verify you are currently using the subscription in which you want the service principal created.

az account show

Сведения о подписке отображаются в формате JSON.Your subscription information is displayed as JSON.

{
  "environmentName": "AzureCloud",
  "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "isDefault": true,
  "name": "XXXXXXX",
  "state": "Enabled",
  "tenantId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "user": {
    "cloudShellID": true,
    "name": "XXX@XXX.XXX",
    "type": "user"
  }
}

Если вы вошли не в ту подписку, выполните такую команду, чтобы выбрать правильную подписку:If you're not logged into the correct subscription, select the correct one by running:

az account set -s <name or ID of subscription>

Важно!

Если вы еще не зарегистрировали поставщик ресурсов HDInsight с помощью другого метода (например, создав кластер HDInsight на портале Azure), вам необходимо это сделать, прежде чем выполнять аутентификацию.If you have not already registered the HDInsight Resource Provider by another method (such as by creating an HDInsight Cluster through the Azure Portal), you need to do this once before you can authenticate. Это можно сделать с помощью Azure Cloud Shell, выполнив такую команду:This can be done from the Azure Cloud Shell by running the following command:

az provider register --namespace Microsoft.HDInsight

Создайте субъект-службу, выбрав имя и выполнив такую команду:Next, choose a name for your service principal and create it with the following command:

az ad sp create-for-rbac --name <Service Principal Name> --sdk-auth

Сведения о субъекте-службе отображаются в виде JSON.The service principal information is displayed as JSON.

{
  "clientId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "clientSecret": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "subscriptionId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "tenantId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
  "resourceManagerEndpointUrl": "https://management.azure.com/",
  "activeDirectoryGraphResourceId": "https://graph.windows.net/",
  "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
  "galleryEndpointUrl": "https://gallery.azure.com/",
  "managementEndpointUrl": "https://management.core.windows.net/"
}

Скопируйте фрагмент кода Python ниже и задайте в качестве значений TENANT_ID, CLIENT_ID, CLIENT_SECRET и SUBSCRIPTION_ID строки из JSON-файла, возвращенного после выполнения команды для создания субъекта-службы.Copy the below Python snippet and fill in TENANT_ID, CLIENT_ID, CLIENT_SECRET, and SUBSCRIPTION_ID with the strings from the JSON that was returned after running the command to create the service principal.

from azure.mgmt.hdinsight import HDInsightManagementClient
from azure.common.credentials import ServicePrincipalCredentials
from azure.mgmt.hdinsight.models import *

# Tenant ID for your Azure Subscription
TENANT_ID = ''
# Your Service Principal App Client ID
CLIENT_ID = ''
# Your Service Principal Client Secret
CLIENT_SECRET = ''
# Your Azure Subscription ID
SUBSCRIPTION_ID = ''

credentials = ServicePrincipalCredentials(
    client_id = CLIENT_ID,
    secret = CLIENT_SECRET,
    tenant = TENANT_ID
)

client = HDInsightManagementClient(credentials, SUBSCRIPTION_ID)

Управление кластерамиCluster Management

Примечание

В этом разделе предполагается, что вы уже выполнили аутентификацию, создали экземпляр HDInsightManagementClient и сохранили его в переменной с именем client.This section assumes you have already authenticated and constructed an HDInsightManagementClient instance and store it in a variable called client. Инструкции по выполнению аутентификации и получению HDInsightManagementClient см. в предыдущем разделе.Instructions for authenticating and obtaining an HDInsightManagementClient can be found in the Authentication section above.

Создание кластераCreate a Cluster

Кластер можно создать, вызвав client.clusters.create().A new cluster can be created by calling client.clusters.create().

ПримерыSamples

Для создания нескольких распространенных типов кластеров HDInsight доступны примеры кода: доступны примеры кода Python.Code samples for creating several common types of HDInsight clusters are available: HDInsight Python Samples.

ПримерExample

В этом примере показано, как создать кластер Spark с двумя головными узлами и одним рабочим.This example demonstrates how to create a Spark cluster with 2 head nodes and 1 worker node.

Примечание

Сначала необходимо создать группу ресурсов и учетную запись хранения, как описано далее.You first need to create a Resource Group and Storage Account, as explained below. Если они уже созданы, следующие шаги можно пропустить.If you have already created these, you can skip these steps.

Создание группы ресурсовCreating a Resource Group

Группу ресурсов можно создать с помощью Azure Cloud Shell, выполнив такую команду:You can create a resource group using the Azure Cloud Shell by running

az group create -l <Region Name (i.e. eastus)> --n <Resource Group Name>
Создание учетной записи храненияCreating a Storage Account

Учетную запись хранения можно создать с помощью Azure Cloud Shell, выполнив такую команду:You can create a storage account using the Azure Cloud Shell by running:

az storage account create -n <Storage Account Name> -g <Existing Resource Group Name> -l <Region Name (i.e. eastus)> --sku <SKU i.e. Standard_LRS>

Теперь выполните такую команду, чтобы получить ключ для учетной записи хранения (он потребуется для создания кластера):Now run the following command to get the key for your storage account (you will need this to create a cluster):

az storage account keys list -n <Storage Account Name>

Показанный ниже фрагмент кода Python создает кластер Spark с двумя головными узлами и одним рабочим.The below Python snippet creates a Spark cluster with 2 head nodes and 1 worker node. Задайте переменные, как описано в комментариях, и при необходимости измените другие параметры.Fill in the blank variables as explained in the comments and feel free to change other parameters to suit your specific needs.

# The name for the cluster you are creating
cluster_name = ""
# The name of your existing Resource Group
resource_group_name = ""
# Choose a username
username = ""
# Choose a password
password = ""
# Replace <> with the name of your storage account
storage_account = "<>.blob.core.windows.net"
# Storage account key you obtained above
storage_account_key = ""
# Choose a region
location = ""
container = "default"

params = ClusterCreateProperties(
    cluster_version="3.6",
    os_type=OSType.linux,
    tier=Tier.standard,
    cluster_definition=ClusterDefinition(
        kind="spark",
        configurations={
            "gateway": {
                "restAuthCredential.enabled_credential": "True",
                "restAuthCredential.username": username,
                "restAuthCredential.password": password
            }
        }
    ),
    compute_profile=ComputeProfile(
        roles=[
            Role(
                name="headnode",
                target_instance_count=2,
                hardware_profile=HardwareProfile(vm_size="Large"),
                os_profile=OsProfile(
                    linux_operating_system_profile=LinuxOperatingSystemProfile(
                        username=username,
                        password=password
                    )
                )
            ),
            Role(
                name="workernode",
                target_instance_count=1,
                hardware_profile=HardwareProfile(vm_size="Large"),
                os_profile=OsProfile(
                    linux_operating_system_profile=LinuxOperatingSystemProfile(
                        username=username,
                        password=password
                    )
                )
            )
        ]
    ),
    storage_profile=StorageProfile(
        storageaccounts=[StorageAccount(
            name=storage_account,
            key=storage_account_key,
            container=container,
            is_default=True
        )]
    )
)

client.clusters.create(
    cluster_name=cluster_name,
    resource_group_name=resource_group_name,
    parameters=ClusterCreateParametersExtended(
        location=location,
        tags={},
        properties=params
    ))

Получение сведений о кластереGet Cluster Details

Чтобы получить сведения о свойствах кластера, выполните такую команду:To get properties for a given cluster:

client.clusters.get("<Resource Group Name>", "<Cluster Name>")

ПримерExample

Чтобы убедиться в том, что вы создали кластер, можно использовать get.You can use get to confirm that you have successfully created your cluster.

my_cluster = client.clusters.get("<Resource Group Name>", "<Cluster Name>")
print(my_cluster)

Выходные данные должны выглядеть так:The output should look like:

{'additional_properties': {}, 'id': '/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/<Resource Group Name>/providers/Microsoft.HDInsight/clusters/<Cluster Name>', 'name': '<Cluster Name>', 'type': 'Microsoft.HDInsight/clusters', 'location': '<Location>', 'tags': {}, 'etag': 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', 'properties': <azure.mgmt.hdinsight.models.cluster_get_properties_py3.ClusterGetProperties object at 0x0000013766D68048>}

Получение списка кластеровList Clusters

Получение списка кластеров в пределах подпискиList Clusters Under The Subscription

client.clusters.list()

Получение списка кластеров в пределах в группы ресурсовList Clusters By Resource Group

client.clusters.list_by_resource_group("<Resource Group Name>")

Примечание

Вызов list() и list_by_resource_group() возвращает объект ClusterPaged.Both list() and list_by_resource_group() return a ClusterPaged object. Вызов advance_page() возвращает список кластеров на этой странице и перемещает объект ClusterPaged на следующую страницу.Calling advance_page() returns a list of clusters on that page and advances the ClusterPaged object to the next page. Этот вызов можно повторять до тех пор, пока не будет получено исключение StopIteration, означающее отсутствие дальнейших страниц.This can be repeated until a StopIteration exception is raised, indicating that there are no more pages.

ПримерExample

В следующем примере выводятся свойства всех кластеров в пределах текущей подписки:The following example prints the properties of all clusters for the current subscription:

clusters_paged = client.clusters.list()
while True:
  try:
    for cluster in clusters_paged.advance_page():
      print(cluster)
  except StopIteration: 
    break

Удаление кластераDelete a Cluster

Чтобы удалить кластер, выполните такую команду:To delete a cluster:

client.clusters.delete("<Resource Group Name>", "<Cluster Name>")

Обновление тегов кластераUpdate Cluster Tags

Вы можете обновить теги кластера так:You can update the tags of a given cluster like so:

client.clusters.update("<Resource Group Name>", "<Cluster Name>", tags={<Dictionary of Tags>})

ПримерExample

client.clusters.update("<Resource Group Name>", "<Cluster Name>", tags={"tag1Name" : "tag1Value", "tag2Name" : "tag2Value"})

Изменение размера кластераResize Cluster

Вы можете изменить размер кластера, изменяя количество его рабочих узлов. Укажите новый размер, как показано ниже:You can resize a given cluster's number of worker nodes by specifying a new size like so:

client.clusters.resize("<Resource Group Name>", "<Cluster Name>", target_instance_count=<Num of Worker Nodes>)

Мониторинг кластераCluster Monitoring

Пакет Azure Management SDK для HDInsight также позволяет управлять мониторингом кластеров с помощью Operations Management Suite (OMS).The HDInsight Management SDK can also be used to manage monitoring on your clusters via the Operations Management Suite (OMS).

Включение мониторинга OMSEnable OMS Monitoring

Примечание

Чтобы включить мониторинг OMS, требуется рабочая область Log Analytics.To enable OMS Monitoring, you must have an existing Log Analytics workspace. Если вы не создавали такую рабочую область, см. статью Создание рабочей области Log Analytics на портале Azure.If you have not already created one, you can learn how to do that here: Create a Log Analytics workspace in the Azure portal.

Чтобы включить мониторинг OMS в кластере, выполните такую команду:To enable OMS Monitoring on your cluster:

client.extension.enable_monitoring("<Resource Group Name>", "<Cluster Name>", workspace_id="<Workspace Id>")

Просмотр состояния мониторинга OMSView Status Of OMS Monitoring

Чтобы узнать состояние мониторинга OMS в кластере, выполните такую команду:To get the status of OMS on your cluster:

client.extension.get_monitoring_status("<Resource Group Name", "Cluster Name")

Отключение мониторинга OMSDisable OMS Monitoring

Чтобы отключить мониторинг OMS в кластере, выполните такую команду:To disable OMS on your cluster:

client.extension.disable_monitoring("<Resource Group Name>", "<Cluster Name>")

Элемент "Действия скрипта"Script Actions

В кластерах HDInsight поддерживается метод конфигурации с использованием, действий скриптов, который вызывает пользовательские скрипты для настройки кластера.HDInsight provides a configuration method called script actions that invokes custom scripts to customize the cluster.

Примечание

Дополнительные сведения о действиях скриптов см. в статье Настройка кластеров HDInsight под управлением Linux с помощью действий сценариев.More information on how to use script actions can be found here: Customize Linux-based HDInsight clusters using script actions

Выполнение действий скриптовExecute Script Actions

Для выполнения действий скриптов в указанном кластере:To execute script actions on a given cluster:

script_action1 = RuntimeScriptAction(name="<Script Name>", uri="<URL To Script>", roles=[<List of Roles>]) #valid roles are "headnode", "workernode", "zookeepernode", and "edgenode"

client.clusters.execute_script_actions("<Resource Group Name>", "<Cluster Name>", <persist_on_success (bool)>, script_actions=[script_action1]) #add more RuntimeScriptActions to the list to execute multiple scripts

Удаление действий скриптовDelete Script Action

Чтобы удалить сохраненные действия скриптов в кластере, выполните такую команду:To delete a specified persisted script action on a given cluster:

client.script_actions.delete("<Resource Group Name>", "<Cluster Name", "<Script Name>")

Получение списка сохраненных действий скриптовList Persisted Script Actions

Примечание

Методы list() и list_persisted_scripts() возвращают объект RuntimeScriptActionDetailPaged.list() and list_persisted_scripts() return a RuntimeScriptActionDetailPaged object. Вызов advance_page() возвращает список объектов RuntimeScriptActionDetail на соответствующей странице и перемещает объект RuntimeScriptActionDetailPaged на следующую страницу.Calling advance_page() returns a list of RuntimeScriptActionDetail on that page and advances the RuntimeScriptActionDetailPaged object to the next page. Этот вызов можно повторять до тех пор, пока не будет получено исключение StopIteration, означающее отсутствие дальнейших страниц.This can be repeated until a StopIteration exception is raised, indicating that there are no more pages. См. пример ниже.See the example below.

Чтобы получить список всех сохраненных действий скриптов в кластере, выполните такую команду:To list all persisted script actions for the specified cluster:

client.script_actions.list_persisted_scripts("<Resource Group Name>", "<Cluster Name>")

ПримерExample

scripts_paged = client.script_actions.list_persisted_scripts(resource_group_name, cluster_name)
while True:
  try:
    for script in scripts_paged.advance_page():
      print(script)
  except StopIteration:
    break

Просмотр журнала выполнения всех скриптовList All Scripts' Execution History

Чтобы получить журнал выполнения всех скриптов в кластере, выполните такую команду:To list all scripts' execution history for the specified cluster:

client.script_execution_history.list("<Resource Group Name>", "<Cluster Name>")

ПримерExample

В этом примере выводятся сведения обо всех выполнявшихся скриптах.This example prints all the details for all past script executions.

script_executions_paged = client.script_execution_history.list("<Resource Group Name>", "<Cluster Name>")
while True:
  try:
    for script in script_executions_paged.advance_page():            
      print(script)
    except StopIteration:       
      break