Share via


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

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_SECRETen SUBSCRIPTION_ID in TENANT_IDmet 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