Freigeben über


HDInsight SDK für Python

Übersicht

Das HDInsight SDK für Python bietet Klassen und Methoden, mit denen Sie Ihre HDInsight-Cluster verwalten können. Es enthält Vorgänge zum Erstellen, Löschen, Aktualisieren, Auflisten, Ändern der Größe, Ausführen von Skriptaktionen, Überwachen, Abrufen der Eigenschaften von HDInsight-Clustern und mehr.

Voraussetzungen

SDK-Installation

Sie finden das HDInsight SDK für Python unter Python Package Index und können es mit folgendem Befehl installieren:

pip install azure-mgmt-hdinsight

Authentifizierung

Das SDK muss zunächst für Ihr Azure-Abonnement authentifiziert werden. Erstellen Sie anhand des Beispiels unten einen Dienstprinzipal, und verwenden Sie ihn für die Authentifizierung. Nachdem dies erfolgt ist, verfügen Sie über eine Instanz von HDInsightManagementClient mit vielen Methoden (in den Abschnitten unten beschrieben), die zum Durchführen von Verwaltungsvorgängen verwendet werden können.

Hinweis

Neben dem Beispiel unten gibt es noch andere Möglichkeiten der Authentifizierung, die für Ihre Anforderungen unter Umständen besser geeignet sind. Eine Beschreibung aller Methoden finden Sie unter Authentifizieren bei den Azure-Verwaltungsbibliotheken für Python.

Beispiel für die Authentifizierung mit einem Dienstprinzipal

Melden Sie sich zuerst bei Azure Cloud Shell an. Vergewissern Sie sich, dass Sie derzeit das Abonnement verwenden, in dem der Dienstprinzipal erstellt werden soll.

az account show

Die Informationen zu Ihrem Abonnement werden im JSON-Format angezeigt.

{
  "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"
  }
}

Wenn Sie nicht am richtigen Abonnement angemeldet sind, können Sie das richtige auswählen, indem Sie Folgendes ausführen:

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

Wichtig

Falls Sie den HDInsight-Ressourcenanbieter nicht bereits mit einer anderen Methode registriert haben (z.B. durch das Erstellen eines HDInsight-Clusters über das Azure-Portal), müssen Sie dies vor dem Authentifizieren durchführen. Dies ist über Azure Cloud Shell möglich, indem Sie den folgenden Befehl ausführen:

az provider register --namespace Microsoft.HDInsight

Wählen Sie als Nächstes einen Namen für Ihren Dienstprinzipal aus, und erstellen Sie ihn mit dem folgenden Befehl:

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

Die Dienstprinzipalinformationen werden im JSON-Format angezeigt.

{
  "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/"
}

Kopieren Sie den unten angegebenen Python-Codeausschnitt, und geben Sie für TENANT_ID, CLIENT_ID, CLIENT_SECRET und SUBSCRIPTION_ID die Zeichenfolgen aus dem JSON-Code ein, der nach dem Ausführen des Befehls zum Erstellen des Dienstprinzipals zurückgegeben wurde.

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)

Clusterverwaltung

Hinweis

In diesem Abschnitt wird davon ausgegangen, dass Sie bereits eine HDInsightManagementClient-Instanz authentifiziert und in einer Variablen mit dem Namen client gespeichert haben. Eine Anleitung zum Authentifizieren und Abrufen eines HDInsightManagementClient-Elements finden Sie oben im Abschnitt „Authentifizierung“.

Erstellen eines Clusters

Sie können einen neuen Cluster erstellen, indem Sie client.clusters.create() aufrufen.

Beispiele

Codebeispiele zum Erstellen mehrerer gängiger TYPEN von HDInsight-Clustern sind verfügbar: HDInsight-Python-Beispiele.

Beispiel

In diesem Beispiel wird gezeigt, wie Sie einen Spark-Cluster mit zwei Hauptknoten und einem Workerknoten erstellen.

Hinweis

Sie müssen zuerst wie unten beschrieben eine Ressourcengruppe und ein Speicherkonto erstellen. Wenn Sie diese Komponenten bereits erstellt haben, können Sie diese Schritte überspringen.

Erstellen einer Ressourcengruppe

Sie können eine Ressourcengruppe erstellen, indem Sie mit Azure Cloud Shell Folgendes ausführen:

az group create -l <Region Name (i.e. eastus)> --n <Resource Group Name>
Erstellen eines Speicherkontos

Sie können ein Speicherkonto erstellen, indem Sie mit Azure Cloud Shell Folgendes ausführen:

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>

Führen Sie jetzt den folgenden Befehl aus, um den Schlüssel für Ihr Speicherkonto abzurufen (Sie benötigen ihn, um einen Cluster zu erstellen):

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

Mit dem unten angegebenen Python-Codeausschnitt wird ein Spark-Cluster mit zwei Hauptknoten und einem Workerknoten erstellt. Geben Sie gemäß den Anweisungen in den Kommentaren Werte in die leeren Variablen ein, und ändern Sie ggf. auch andere Parameter, um diese an Ihre Anforderungen anzupassen.

# 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
    ))

Abrufen von Clusterdetails

Rufen Sie die Eigenschaften für einen Cluster wie folgt ab:

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

Beispiel

Sie können get verwenden, um zu bestätigen, dass die Erstellung des Clusters erfolgreich war.

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

Die Ausgabe sollte wie folgt aussehen:

{'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>}

Auflisten von Clustern

Auflisten von Clustern unter dem Abonnement

client.clusters.list()

Auflisten von Clustern nach Ressourcengruppe

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

Hinweis

Sowohl list() als auch list_by_resource_group() geben ein ClusterPaged-Objekt zurück. Wenn Sie advance_page() aufrufen, wird eine Liste der Cluster auf dieser Seite zurückgegeben und das ClusterPaged-Objekt auf der nächsten Seite fortgesetzt. Dies kann wiederholt werden, bis eine Ausnahme vom Typ StopIteration zurückgegeben wird, die darauf hinweist, dass keine Seiten mehr vorhanden sind.

Beispiel

Im folgenden Beispiel werden die Eigenschaften aller Cluster für das aktuelle Abonnement ausgegeben:

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

Löschen eines Clusters

Löschen Sie einen Cluster wie folgt:

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

Aktualisieren von Clustermarkierungen

Sie können die Markierungen eines Clusters wie folgt aktualisieren:

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

Beispiel

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

Ändern der Clustergröße

Sie können die Anzahl von Workerknoten für einen Cluster ändern, indem Sie wie folgt eine neue Größe angeben:

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

Clusterüberwachung

Das HDInsight Management SDK kann auch verwendet werden, um die Überwachung Ihrer Cluster per Operations Management Suite (OMS) zu verwalten.

Aktivieren der OMS-Überwachung

Hinweis

Sie müssen über einen vorhandenen Log Analytics-Arbeitsbereich verfügen, um die OMS-Überwachung zu ermöglichen. Falls Sie diesen noch nicht erstellt haben, helfen Ihnen die Informationen im folgenden Artikel weiter: Erstellen eines Log Analytics-Arbeitsbereichs im Azure-Portal.

Aktivieren Sie die OMS-Überwachung in Ihrem Cluster wie folgt:

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

Anzeigen des Status der OMS-Überwachung

Rufen Sie den Status von OMS in Ihrem Cluster wie folgt ab:

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

Deaktivieren der OMS-Überwachung

Deaktivieren Sie OMS in Ihrem Cluster wie folgt:

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

Skriptaktionen

HDInsight verfügt über eine Konfigurationsmethode mit der Bezeichnung „Skriptaktionen“, mit der benutzerdefinierte Skripts zum Anpassen des Clusters aufgerufen werden.

Hinweis

Weitere Informationen zur Verwendung von Skriptaktionen finden Sie unter Anpassen Linux-basierter HDInsight-Cluster mithilfe von Skriptaktionen.

Ausführen von Skriptaktionen

So führen Sie Skriptaktionen für einen bestimmten Cluster aus:

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

Löschen der Skriptaktion

Löschen Sie eine angegebene permanente Skriptaktion für einen Cluster wie folgt:

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

Auflisten von permanenten Skriptaktionen

Hinweis

list() und list_persisted_scripts() geben ein RuntimeScriptActionDetailPaged-Objekt zurück. Wenn Sie advance_page() aufrufen, wird die Liste für RuntimeScriptActionDetail auf dieser Seite zurückgegeben und das RuntimeScriptActionDetailPaged-Objekt auf der nächsten Seite fortgesetzt. Dies kann wiederholt werden, bis eine Ausnahme vom Typ StopIteration zurückgegeben wird, die darauf hinweist, dass keine Seiten mehr vorhanden sind. Betrachten Sie das folgende Beispiel.

Listen Sie alle permanenten Skriptaktionen für den angegebenen Cluster wie folgt auf:

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

Beispiel

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

Auflisten des Ausführungsverlaufs aller Skripts

Listen Sie den Ausführungsverlauf aller Skripts für den angegebenen Cluster wie folgt auf:

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

Beispiel

In diesem Beispiel werden alle Details zu allen erfolgten Skriptausführungen ausgegeben.

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