Kit SDK HDInsight pour Python
Vue d’ensemble
Le kit SDK HDInsight pour Python fournit des classes et des méthodes qui vous permettent de gérer vos clusters HDInsight. Il inclut des opérations permettant de créer, supprimer, mettre à jour, répertorier, mettre à l’échelle, exécuter des actions de script, surveiller, obtenir des propriétés des clusters HDInsight, et bien plus encore.
Prérequis
- Un compte Azure. Si vous n’en avez pas, inscrivez-vous pour un essai gratuit.
- Python
- pip
Installation du Kit de développement logiciel (SDK)
Le kit SDK HDInsight pour Python se trouve dans l’index du package Python et peut être installé en exécutant :
pip install azure-mgmt-hdinsight
Authentification
Le kit de développement logiciel (SDK) doit d’abord être authentifié avec votre abonnement Azure. Suivez l’exemple ci-dessous pour créer un principal de service et l’utiliser pour s’authentifier. Une fois cette opération terminée, vous avez une instance de HDInsightManagementClient
, qui contient de nombreuses méthodes (décrites dans les sections suivantes) pouvant être utilisées pour effectuer des opérations de gestion.
Notes
Il existe d’autres façons de s’authentifier, en plus de l’exemple suivant, peut-être mieux adaptées à vos besoins. Toutes les méthodes sont décrites ici : S’authentifier avec les bibliothèques de gestion Azure pour Python
Exemple d’authentification à l’aide d’un principal de service
Tout d’abord, connectez-vous à Azure Cloud Shell. Vérifiez que vous utilisez actuellement l’abonnement dans lequel vous souhaitez que le principal de service soit créé.
az account show
Les informations relatives à votre abonnement sont affichées au format 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"
}
}
Si vous n’êtes pas connecté au bon abonnement, sélectionnez le bon en exécutant :
az account set -s <name or ID of subscription>
Important
Si vous n’avez pas déjà enregistré le fournisseur de ressources HDInsight avec une autre méthode (par exemple, en créant un cluster HDInsight via le portail Azure), vous devez le faire une fois avant de pouvoir vous authentifier. Vous pouvez le faire à partir d’Azure Cloud Shell en exécutant la commande suivante :
az provider register --namespace Microsoft.HDInsight
Ensuite, choisissez un nom pour votre principal de service et créez-le avec la commande suivante :
az ad sp create-for-rbac --name <Service Principal Name> --role Contributor --sdk-auth
Les informations relatives au principal de service sont affichées en tant que 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/"
}
Copiez l’extrait de code Python ci-dessous et remplissez TENANT_ID
, CLIENT_ID
, CLIENT_SECRET
et SUBSCRIPTION_ID
avec les chaînes du code JSON qui a été renvoyé après l’exécution de la commande pour créer le principal de service.
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)
Gestion du cluster
Notes
Cette section suppose que vous avez déjà authentifié et construit une instance HDInsightManagementClient
que vous avez conservée dans une variable appelée client
. Les instructions relatives à l’authentification et à l’obtention d’un HDInsightManagementClient
se trouvent dans la section Authentification ci-dessus.
Créer un cluster
Un nouveau cluster peut être créé en appelant client.clusters.create()
.
Exemples
Des exemples de code pour la création de plusieurs types courants de clusters HDInsight sont disponibles : Exemples Python HDInsight.
Exemple
Cet exemple montre comment créer un cluster Spark avec 2 nœuds principaux et un nœud de travail.
Notes
Vous devez d’abord créer un groupe de ressources et un compte de stockage, comme expliqué ci-dessous. Si vous les avez déjà créés, vous pouvez ignorer ces étapes.
Création d’un groupe de ressources
Vous pouvez créer un groupe de ressources à l’aide d’Azure Cloud Shell en exécutant
az group create -l <Region Name (i.e. eastus)> --n <Resource Group Name>
Création d’un compte de stockage
Vous pouvez créer un compte de stockage à l’aide d’Azure Cloud Shell en exécutant :
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>
Ensuite, exécutez la commande suivante pour obtenir la clé de votre compte de stockage (vous en aurez besoin pour créer un cluster) :
az storage account keys list -n <Storage Account Name>
L’extrait de code Python ci-dessous crée un cluster Spark avec 2 nœuds principaux et 1 nœud Worker. Remplissez les variables vides comme expliqué dans les commentaires et n’hésitez pas à modifier d’autres paramètres en fonction de vos besoins.
# 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
))
Obtenir les détails du cluster
Pour obtenir les propriétés d’un cluster donné :
client.clusters.get("<Resource Group Name>", "<Cluster Name>")
Exemple
Vous pouvez utiliser get
pour confirmer que vous avez créé votre cluster avec succès.
my_cluster = client.clusters.get("<Resource Group Name>", "<Cluster Name>")
print(my_cluster)
La sortie doit ressembler à :
{'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>}
Répertorier les clusters
Répertorier les clusters dans l’abonnement
client.clusters.list()
Répertorier les clusters par groupe de ressources
client.clusters.list_by_resource_group("<Resource Group Name>")
Notes
list()
et list_by_resource_group()
retournent un objet ClusterPaged
. Appeler advance_page()
renvoie une liste de clusters sur cette page et avance l’objet ClusterPaged
à la page suivante. Cette opération peut être répétée jusqu’à ce qu’une exception StopIteration
soit générée, indiquant qu’il n’y a plus d’autres pages.
Exemple
L’exemple suivant imprime les propriétés de tous les clusters pour l’abonnement actuel :
clusters_paged = client.clusters.list()
while True:
try:
for cluster in clusters_paged.advance_page():
print(cluster)
except StopIteration:
break
Supprimer un cluster
Pour supprimer un cluster :
client.clusters.delete("<Resource Group Name>", "<Cluster Name>")
Mettre à jour les balises de cluster
Vous pouvez mettre à jour les balises d’un cluster donné comme suit :
client.clusters.update("<Resource Group Name>", "<Cluster Name>", tags={<Dictionary of Tags>})
Exemple
client.clusters.update("<Resource Group Name>", "<Cluster Name>", tags={"tag1Name" : "tag1Value", "tag2Name" : "tag2Value"})
Redimensionner le cluster
Vous pouvez mettre à l’échelle le nombre de nœuds Worker d’un cluster en spécifiant une nouvelle taille comme suit :
client.clusters.resize("<Resource Group Name>", "<Cluster Name>", target_instance_count=<Num of Worker Nodes>)
Cluster Monitoring (Surveillance des clusters)
Le kit de développement logiciel (SDK) HDInsight Management peut également être utilisé pour gérer la surveillance de vos clusters via Operations Management Suite (OMS).
Activer la surveillance OMS
Notes
Pour activer la supervision OMS, vous devez disposer d’un espace de travail Log Analytics existant. Si vous n’en avez pas déjà créé un, vous pouvez apprendre à le faire ici : Créer un espace de travail Log Analytics dans le portail Azure.
Pour activer la surveillance OMS sur votre cluster :
client.extension.enable_monitoring("<Resource Group Name>", "<Cluster Name>", workspace_id="<Workspace Id>")
Afficher l’état de surveillance OMS
Pour obtenir l’état d’OMS sur votre cluster :
client.extension.get_monitoring_status("<Resource Group Name", "Cluster Name")
Désactiver la surveillance OMS
Pour désactiver OMS sur votre cluster :
client.extension.disable_monitoring("<Resource Group Name>", "<Cluster Name>")
Actions de script
HDInsight fournit une méthode de configuration intitulée actions de script, qui appelle des scripts personnalisés pour personnaliser le cluster.
Notes
Vous pouvez trouver plus d’informations sur l’utilisation des actions de script ici : Personnaliser des clusters HDInsight Linux à l’aide d’actions de script
Exécuter des actions de script
Pour exécuter des actions de script sur un cluster donné :
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
Supprimer une action de script
Pour supprimer une action de script persistante spécifiée sur un cluster donné :
client.script_actions.delete("<Resource Group Name>", "<Cluster Name", "<Script Name>")
Répertorier les actions de script persistantes
Notes
list()
et list_persisted_scripts()
renvoient un objet RuntimeScriptActionDetailPaged
. Appeler advance_page()
retourne une liste de RuntimeScriptActionDetail
sur cette page et avance l’objet RuntimeScriptActionDetailPaged
à la page suivante. Cette opération peut être répétée jusqu’à ce qu’une exception StopIteration
soit générée, indiquant qu’il n’y a plus d’autres pages. Reportez-vous à l’exemple ci-dessous.
Pour répertorier toutes les actions de script persistantes pour le cluster spécifié :
client.script_actions.list_persisted_scripts("<Resource Group Name>", "<Cluster Name>")
Exemple
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
Répertorier tout l’historique d’exécution des scripts
Pour répertorier tout l’historique d’exécution des scripts pour le cluster spécifié :
client.script_execution_history.list("<Resource Group Name>", "<Cluster Name>")
Exemple
Cet exemple imprime tous les détails de toutes les exécutions de script passées.
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