HDInsight-SDK voor Python
Overzicht
De HDInsight SDK voor Python biedt klassen en methoden waarmee u uw HDInsight-clusters kunt beheren. Het bevat bewerkingen voor maken, verwijderen, bijwerken, weergeven, vergroten of verkleinen, uitvoeren van scriptacties, bewaken, eigenschappen van HDInsight-clusters ophalen, en meer.
Vereisten
- Een Azure-account. Als u geen account hebt, kunt u een gratis proefversie krijgen.
- Python
- Pip
SDK-installatie
De HDInsight SDK voor Python vindt u in de Python-pakketindex en kan worden geïnstalleerd door het volgende uit te voeren:
pip install azure-mgmt-hdinsight
Verificatie
De SDK moet eerst worden geverifieerd met uw Azure-abonnement. Volg het onderstaande voorbeeld om een service-principal te maken en deze te gebruiken om te verifiëren. Nadat dit is gedaan, hebt u een exemplaar van een HDInsightManagementClient
, dat veel methoden bevat (beschreven in de onderstaande secties) die kunnen worden gebruikt om beheerbewerkingen uit te voeren.
Notitie
Naast het onderstaande voorbeeld zijn er andere manieren om te verifiëren die mogelijk beter geschikt zijn voor uw behoeften. Alle methoden worden hier beschreven: Verifiëren met de Azure-beheerbibliotheken voor Python
Verificatievoorbeeld met behulp van een service-principal
Meld u eerst aan bij Azure Cloud Shell. Controleer of u momenteel het abonnement gebruikt waarin u de service-principal wilt maken.
az account show
Uw abonnementsgegevens worden weergegeven als 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"
}
}
Als u niet bent aangemeld bij het juiste abonnement, selecteert u het juiste abonnement door het volgende uit te voeren:
az account set -s <name or ID of subscription>
Belangrijk
Als u de HDInsight-resourceprovider nog niet hebt geregistreerd via een andere methode (bijvoorbeeld door een HDInsight-cluster te maken via Azure Portal), moet u dit eenmaal doen voordat u zich kunt verifiëren. U kunt dit doen vanuit de Azure Cloud Shell door de volgende opdracht uit te voeren:
az provider register --namespace Microsoft.HDInsight
Kies vervolgens een naam voor uw service-principal en maak deze met de volgende opdracht:
az ad sp create-for-rbac --name <Service Principal Name> --role Contributor --sdk-auth
De informatie over de service-principal wordt weergegeven als 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/"
}
Kopieer het onderstaande Python-fragment en vul , CLIENT_ID
, CLIENT_SECRET
en SUBSCRIPTION_ID
in TENANT_ID
met de tekenreeksen van de JSON die zijn geretourneerd na het uitvoeren van de opdracht om de service-principal te maken.
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)
Clusterbeheer
Notitie
In deze sectie wordt ervan uitgegaan dat u al een HDInsightManagementClient
exemplaar hebt geverifieerd en gemaakt en dat u deze opslaat in een variabele met de naam client
. Instructies voor verificatie en het verkrijgen van een HDInsightManagementClient
vindt u in de sectie Verificatie hierboven.
Een cluster maken
Een nieuw cluster kan worden gemaakt door aan te roepen client.clusters.create()
.
Voorbeelden
Er zijn codevoorbeelden beschikbaar voor het maken van verschillende algemene typen HDInsight-clusters: HDInsight Python-voorbeelden.
Voorbeeld
In dit voorbeeld ziet u hoe u een Spark-cluster maakt met 2 hoofdknooppunten en 1 werkknooppunt.
Notitie
U moet eerst een resourcegroep en opslagaccount maken, zoals hieronder wordt uitgelegd. Als u deze al hebt gemaakt, kunt u deze stappen overslaan.
Een resourcegroep maken
U kunt een resourcegroep maken met behulp van de Azure Cloud Shell door uit te voeren
az group create -l <Region Name (i.e. eastus)> --n <Resource Group Name>
Een opslagaccount maken
U kunt een opslagaccount maken met behulp van de Azure Cloud Shell door het volgende uit te voeren:
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>
Voer nu de volgende opdracht uit om de sleutel voor uw opslagaccount op te halen (u hebt deze nodig om een cluster te maken):
az storage account keys list -n <Storage Account Name>
Met het onderstaande Python-fragment maakt u een Spark-cluster met 2 hoofdknooppunten en 1 werkknooppunt. Vul de lege variabelen in zoals uitgelegd in de opmerkingen en u kunt desgewenst andere parameters aanpassen aan uw specifieke behoeften.
# 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
))
Clusterdetails ophalen
Eigenschappen voor een bepaald cluster ophalen:
client.clusters.get("<Resource Group Name>", "<Cluster Name>")
Voorbeeld
U kunt gebruiken get
om te bevestigen dat het cluster is gemaakt.
my_cluster = client.clusters.get("<Resource Group Name>", "<Cluster Name>")
print(my_cluster)
De uitvoer moet er als volgt uitzien:
{'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>}
Clusters weergeven
Clusters weergeven onder het abonnement
client.clusters.list()
Clusters weergeven op resourcegroep
client.clusters.list_by_resource_group("<Resource Group Name>")
Notitie
Beide list()
en list_by_resource_group()
retourneren een ClusterPaged
-object. Als u aanroept advance_page()
, wordt een lijst met clusters op die pagina geretourneerd en wordt het ClusterPaged
object naar de volgende pagina geleid. Dit kan worden herhaald totdat er een StopIteration
uitzondering wordt gegenereerd, wat aangeeft dat er geen pagina's meer zijn.
Voorbeeld
In het volgende voorbeeld worden de eigenschappen van alle clusters voor het huidige abonnement afgedrukt:
clusters_paged = client.clusters.list()
while True:
try:
for cluster in clusters_paged.advance_page():
print(cluster)
except StopIteration:
break
Een cluster verwijderen
Een cluster verwijderen:
client.clusters.delete("<Resource Group Name>", "<Cluster Name>")
Clustertags bijwerken
U kunt de tags van een bepaald cluster als volgt bijwerken:
client.clusters.update("<Resource Group Name>", "<Cluster Name>", tags={<Dictionary of Tags>})
Voorbeeld
client.clusters.update("<Resource Group Name>", "<Cluster Name>", tags={"tag1Name" : "tag1Value", "tag2Name" : "tag2Value"})
Grootte van cluster wijzigen
U kunt het formaat van het aantal werkknooppunten van een bepaald cluster wijzigen door als volgt een nieuwe grootte op te geven:
client.clusters.resize("<Resource Group Name>", "<Cluster Name>", target_instance_count=<Num of Worker Nodes>)
Clusterbewaking
De HDInsight Management SDK kan ook worden gebruikt voor het beheren van bewaking op uw clusters via de Operations Management Suite (OMS).
OMS-bewaking inschakelen
Notitie
Als u OMS-bewaking wilt inschakelen, moet u een bestaande Log Analytics-werkruimte hebben. Als u er nog geen hebt gemaakt, kunt u hier lezen hoe u dit doet: Een Log Analytics-werkruimte maken in de Azure Portal.
OMS-bewaking inschakelen op uw cluster:
client.extension.enable_monitoring("<Resource Group Name>", "<Cluster Name>", workspace_id="<Workspace Id>")
Status van OMS-bewaking weergeven
De status van OMS in uw cluster ophalen:
client.extension.get_monitoring_status("<Resource Group Name", "Cluster Name")
OMS-bewaking uitschakelen
OMS uitschakelen in uw cluster:
client.extension.disable_monitoring("<Resource Group Name>", "<Cluster Name>")
Scriptacties
HDInsight biedt een configuratiemethode met de naam scriptacties waarmee aangepaste scripts worden aangeroepen om het cluster aan te passen.
Notitie
Meer informatie over het gebruik van scriptacties vindt u hier: HDInsight-clusters op basis van Linux aanpassen met behulp van scriptacties
Scriptacties uitvoeren
Scriptacties uitvoeren op een bepaald 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
Scriptactie verwijderen
Een opgegeven persistente scriptactie verwijderen op een bepaald cluster:
client.script_actions.delete("<Resource Group Name>", "<Cluster Name", "<Script Name>")
Persistente scriptacties weergeven
Notitie
list()
en list_persisted_scripts()
retourneert u een RuntimeScriptActionDetailPaged
-object. Als u aanroept advance_page()
, wordt een lijst met RuntimeScriptActionDetail
op die pagina geretourneerd en wordt het RuntimeScriptActionDetailPaged
object naar de volgende pagina geleid. Dit kan worden herhaald totdat er een StopIteration
uitzondering wordt gegenereerd, wat aangeeft dat er geen pagina's meer zijn. Zie het voorbeeld hieronder.
Alle persistente scriptacties voor het opgegeven cluster weergeven:
client.script_actions.list_persisted_scripts("<Resource Group Name>", "<Cluster Name>")
Voorbeeld
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
De uitvoeringsgeschiedenis van alle scripts weergeven
Ga als volgt te werk om de uitvoeringsgeschiedenis van alle scripts voor het opgegeven cluster weer te geven:
client.script_execution_history.list("<Resource Group Name>", "<Cluster Name>")
Voorbeeld
In dit voorbeeld worden alle details voor alle eerdere scriptuitvoeringen afgedrukt.
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
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor