Пакет SDK HDInsight для Python
Обзор
Пакет SDK HDInsight для Python предоставляет классы и методы для управления кластерами HDInsight. Пакет также поддерживает операции создания, удаления, обновления, получения списков, масштабирования, выполнения скриптов, мониторинга, получения свойства кластеров HDInsight и т. д.
Предварительные требования
- Учетная запись Azure. Если у вас ее нет, получите бесплатную пробную версию.
- Python
- pip
Установка пакета SDK
Пакет SDK HDInsight для Python можно найти на сайте Python Package Index и установить с помощью команды:
pip install azure-mgmt-hdinsight
Аутентификация
Для использования пакета SDK нужно выполнить аутентификацию с помощью подписки Azure. Ниже описано, как создать субъект-службу и использовать его для аутентификации. После этого вы получите экземпляр HDInsightManagementClient
, в котором доступны различные методы (описанные далее) для операций управления.
Примечание
Кроме описанного выше, есть и другие методы аутентификации, которые могут оказаться удобнее для вас. Все методы аутентификации см. в руководстве по аутентификации с использованием библиотек управления Azure для Python.
Пример аутентификации с помощью субъекта-службы
Сначала войдите в Azure Cloud Shell. Убедитесь, что вы используете подписку, в которой будет создан субъект-служба.
az account show
Сведения о подписке отображаются в формате 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"
}
}
Если вы вошли не в ту подписку, выполните такую команду, чтобы выбрать правильную подписку:
az account set -s <name or ID of subscription>
Важно!
Если вы еще не зарегистрировали поставщик ресурсов HDInsight с помощью другого метода (например, создав кластер HDInsight на портале Azure), вам необходимо это сделать, прежде чем выполнять аутентификацию. Это можно сделать с помощью Azure Cloud Shell, выполнив такую команду:
az provider register --namespace Microsoft.HDInsight
Создайте субъект-службу, выбрав имя и выполнив такую команду:
az ad sp create-for-rbac --name <Service Principal Name> --role Contributor --sdk-auth
Сведения о субъекте-службе отображаются в виде 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-файла, возвращенного после выполнения команды для создания субъекта-службы.
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)
Управление кластерами
Примечание
В этом разделе предполагается, что вы уже выполнили аутентификацию, создали экземпляр HDInsightManagementClient
и сохранили его в переменной с именем client
. Инструкции по выполнению аутентификации и получению HDInsightManagementClient
см. в предыдущем разделе.
Создание кластера
Кластер можно создать, вызвав client.clusters.create()
.
Примеры
Доступны примеры кода для создания нескольких распространенных типов кластеров HDInsight: примеры python в HDInsight.
Пример
В этом примере показано, как создать кластер Spark с двумя головными узлами и одним рабочим.
Примечание
Сначала необходимо создать группу ресурсов и учетную запись хранения, как описано далее. Если они уже созданы, следующие шаги можно пропустить.
Создание группы ресурсов
Группу ресурсов можно создать с помощью Azure Cloud Shell, выполнив такую команду:
az group create -l <Region Name (i.e. eastus)> --n <Resource Group Name>
Создание учетной записи хранения
Учетную запись хранения можно создать с помощью Azure Cloud Shell, выполнив такую команду:
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>
Теперь выполните такую команду, чтобы получить ключ для учетной записи хранения (он потребуется для создания кластера):
az storage account keys list -n <Storage Account Name>
Показанный ниже фрагмент кода Python создает кластер Spark с двумя головными узлами и одним рабочим. Задайте переменные, как описано в комментариях, и при необходимости измените другие параметры.
# 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
))
Получение сведений о кластере
Чтобы получить сведения о свойствах кластера, выполните такую команду:
client.clusters.get("<Resource Group Name>", "<Cluster Name>")
Пример
Чтобы убедиться в том, что вы создали кластер, можно использовать get
.
my_cluster = client.clusters.get("<Resource Group Name>", "<Cluster Name>")
print(my_cluster)
Выходные данные должны выглядеть так:
{'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>}
Получение списка кластеров
Получение списка кластеров в пределах подписки
client.clusters.list()
Получение списка кластеров в пределах в группы ресурсов
client.clusters.list_by_resource_group("<Resource Group Name>")
Примечание
Вызов list()
и list_by_resource_group()
возвращает объект ClusterPaged
. Вызов advance_page()
возвращает список кластеров на этой странице и перемещает объект ClusterPaged
на следующую страницу. Этот вызов можно повторять до тех пор, пока не будет получено исключение StopIteration
, означающее отсутствие дальнейших страниц.
Пример
В следующем примере выводятся свойства всех кластеров в пределах текущей подписки:
clusters_paged = client.clusters.list()
while True:
try:
for cluster in clusters_paged.advance_page():
print(cluster)
except StopIteration:
break
Удаление кластера
Чтобы удалить кластер, выполните такую команду:
client.clusters.delete("<Resource Group Name>", "<Cluster Name>")
Обновление тегов кластера
Вы можете обновить теги кластера так:
client.clusters.update("<Resource Group Name>", "<Cluster Name>", tags={<Dictionary of Tags>})
Пример
client.clusters.update("<Resource Group Name>", "<Cluster Name>", tags={"tag1Name" : "tag1Value", "tag2Name" : "tag2Value"})
Изменение размера кластера
Вы можете изменить размер кластера, изменяя количество его рабочих узлов. Укажите новый размер, как показано ниже:
client.clusters.resize("<Resource Group Name>", "<Cluster Name>", target_instance_count=<Num of Worker Nodes>)
Мониторинг кластера
Пакет Azure Management SDK для HDInsight также позволяет управлять мониторингом кластеров с помощью Operations Management Suite (OMS).
Включение мониторинга OMS
Примечание
Чтобы включить мониторинг OMS, требуется рабочая область Log Analytics. Если вы не создавали такую рабочую область, см. статью Создание рабочей области Log Analytics на портале Azure.
Чтобы включить мониторинг OMS в кластере, выполните такую команду:
client.extension.enable_monitoring("<Resource Group Name>", "<Cluster Name>", workspace_id="<Workspace Id>")
Просмотр состояния мониторинга OMS
Чтобы узнать состояние мониторинга OMS в кластере, выполните такую команду:
client.extension.get_monitoring_status("<Resource Group Name", "Cluster Name")
Отключение мониторинга OMS
Чтобы отключить мониторинг OMS в кластере, выполните такую команду:
client.extension.disable_monitoring("<Resource Group Name>", "<Cluster Name>")
Элемент "Действия скрипта"
В кластерах HDInsight поддерживается метод конфигурации с использованием, действий скриптов, который вызывает пользовательские скрипты для настройки кластера.
Примечание
Дополнительные сведения о действиях скриптов см. в статье Настройка кластеров HDInsight под управлением Linux с помощью действий сценариев.
Выполнение действий скриптов
Для выполнения действий скриптов в указанном кластере:
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
Удаление действий скриптов
Чтобы удалить сохраненные действия скриптов в кластере, выполните такую команду:
client.script_actions.delete("<Resource Group Name>", "<Cluster Name", "<Script Name>")
Получение списка сохраненных действий скриптов
Примечание
Методы list()
и list_persisted_scripts()
возвращают объект RuntimeScriptActionDetailPaged
. Вызов advance_page()
возвращает список объектов RuntimeScriptActionDetail
на соответствующей странице и перемещает объект RuntimeScriptActionDetailPaged
на следующую страницу. Этот вызов можно повторять до тех пор, пока не будет получено исключение StopIteration
, означающее отсутствие дальнейших страниц. См. пример ниже.
Чтобы получить список всех сохраненных действий скриптов в кластере, выполните такую команду:
client.script_actions.list_persisted_scripts("<Resource Group Name>", "<Cluster Name>")
Пример
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
Просмотр журнала выполнения всех скриптов
Чтобы получить журнал выполнения всех скриптов в кластере, выполните такую команду:
client.script_execution_history.list("<Resource Group Name>", "<Cluster Name>")
Пример
В этом примере выводятся сведения обо всех выполнявшихся скриптах.
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
Azure SDK for Python
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по