HDInsight SDK för Python

Översikt

HDInsight SDK för Python innehåller klasser och metoder som gör att du kan hantera dina HDInsight-kluster. Den innehåller åtgärder för att skapa, ta bort, uppdatera, lista, ändra storlek, köra skriptåtgärder, övervaka, hämta egenskaper för HDInsight-kluster med mera.

Förutsättningar

SDK-installation

HDInsight SDK för Python finns i Python Package Index och kan installeras genom att köra:

pip install azure-mgmt-hdinsight

Autentisering

SDK:et måste först autentiseras med din Azure-prenumeration. Följ exemplet nedan för att skapa ett huvudnamn för tjänsten och använd det för att autentisera. När detta är klart har du en instans av en HDInsightManagementClient, som innehåller många metoder (beskrivs i avsnitten nedan) som kan användas för att utföra hanteringsåtgärder.

Anteckning

Det finns andra sätt att autentisera förutom exemplet nedan som potentiellt kan vara bättre lämpade för dina behov. Alla metoder beskrivs här: Autentisera med Azure-hanteringsbiblioteken för Python

Autentiseringsexempel med tjänstens huvudnamn

Logga först in på Azure Cloud Shell. Kontrollera att du för närvarande använder den prenumeration där du vill att tjänstens huvudnamn ska skapas.

az account show

Din prenumerationsinformation visas som 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"
  }
}

Om du inte är inloggad på rätt prenumeration väljer du rätt prenumeration genom att köra:

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

Viktigt

Om du inte redan har registrerat HDInsight-resursprovidern med en annan metod (till exempel genom att skapa ett HDInsight-kluster via Azure-portalen) måste du göra detta en gång innan du kan autentisera. Du kan göra detta från Azure Cloud Shell genom att köra följande kommando:

az provider register --namespace Microsoft.HDInsight

Välj sedan ett namn för tjänstens huvudnamn och skapa det med följande kommando:

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

Informationen om tjänstens huvudnamn visas som 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/"
}

Kopiera Python-kodfragmentet nedan och fyll i TENANT_ID, CLIENT_ID, CLIENT_SECREToch SUBSCRIPTION_ID med strängarna från JSON som returnerades efter att kommandot har körts för att skapa tjänstens huvudnamn.

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)

Klusterhantering

Anteckning

Det här avsnittet förutsätter att du redan har autentiserat och konstruerat en HDInsightManagementClient instans och lagrat den i en variabel med namnet client. Instruktioner för att autentisera och hämta en HDInsightManagementClient finns i avsnittet Autentisering ovan.

Skapa ett kluster

Ett nytt kluster kan skapas genom att anropa client.clusters.create().

Exempel

Kodexempel för att skapa flera vanliga typer av HDInsight-kluster är tillgängliga: HDInsight Python-exempel.

Exempel

Det här exemplet visar hur du skapar ett Spark-kluster med 2 huvudnoder och 1 arbetsnod.

Anteckning

Du måste först skapa en resursgrupp och ett lagringskonto enligt beskrivningen nedan. Om du redan har skapat dessa kan du hoppa över de här stegen.

Skapa en resursgrupp

Du kan skapa en resursgrupp med hjälp av Azure Cloud Shell genom att köra

az group create -l <Region Name (i.e. eastus)> --n <Resource Group Name>
Skapa ett lagringskonto

Du kan skapa ett lagringskonto med hjälp av Azure Cloud Shell genom att köra:

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>

Kör nu följande kommando för att hämta nyckeln för ditt lagringskonto (du behöver det här för att skapa ett kluster):

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

Python-kodfragmentet nedan skapar ett Spark-kluster med 2 huvudnoder och 1 arbetsnod. Fyll i de tomma variablerna enligt beskrivningen i kommentarerna och ändra gärna andra parametrar så att de passar dina specifika behov.

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

Hämta klusterinformation

Så här hämtar du egenskaper för ett visst kluster:

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

Exempel

Du kan använda get för att bekräfta att du har skapat klustret.

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

Utdata bör se ut så här:

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

Lista kluster

Lista kluster under prenumerationen

client.clusters.list()

Lista kluster efter resursgrupp

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

Anteckning

Både list() och list_by_resource_group() returnerar ett ClusterPaged -objekt. Anrop advance_page() returnerar en lista över kluster på den sidan och flyttar fram objektet ClusterPaged till nästa sida. Detta kan upprepas tills ett StopIteration undantag utlöses, vilket indikerar att det inte finns fler sidor.

Exempel

I följande exempel skrivs egenskaperna för alla kluster ut för den aktuella prenumerationen:

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

Ta bort ett kluster

Så här tar du bort ett kluster:

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

Uppdatera klustertaggar

Du kan uppdatera taggarna för ett visst kluster så här:

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

Exempel

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

Ändra storlek på kluster

Du kan ändra storlek på ett visst klusters antal arbetsnoder genom att ange en ny storlek så här:

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

Klusterövervakning

HDInsight Management SDK kan också användas för att hantera övervakning på dina kluster via Operations Management Suite (OMS).

Aktivera OMS-övervakning

Anteckning

Om du vill aktivera OMS-övervakning måste du ha en befintlig Log Analytics-arbetsyta. Om du inte redan har skapat en sådan kan du lära dig hur du gör det här: Skapa en Log Analytics-arbetsyta i Azure Portal.

Så här aktiverar du OMS-övervakning i klustret:

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

Visa status för OMS-övervakning

Så här hämtar du status för OMS i klustret:

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

Inaktivera OMS-övervakning

Så här inaktiverar du OMS i klustret:

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

Skriptåtgärder

HDInsight tillhandahåller en konfigurationsmetod som kallas skriptåtgärder som anropar anpassade skript för att anpassa klustret.

Anteckning

Mer information om hur du använder skriptåtgärder finns här: Anpassa Linux-baserade HDInsight-kluster med hjälp av skriptåtgärder

Köra skriptåtgärder

Så här kör du skriptåtgärder på ett visst kluster:

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

Ta bort skriptåtgärd

Så här tar du bort en angiven beständig skriptåtgärd i ett visst kluster:

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

Lista beständiga skriptåtgärder

Anteckning

list() och list_persisted_scripts() returnerar ett RuntimeScriptActionDetailPaged -objekt. Anropet advance_page() returnerar en lista över RuntimeScriptActionDetail på den sidan och flyttar fram objektet RuntimeScriptActionDetailPaged till nästa sida. Detta kan upprepas tills ett StopIteration undantag utlöses, vilket indikerar att det inte finns fler sidor. Se exemplet nedan.

Så här visar du en lista över alla bestående skriptåtgärder för det angivna klustret:

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

Exempel

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

Visa en lista över alla skripts körningshistorik

Så här listar du alla skripts körningshistorik för det angivna klustret:

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

Exempel

I det här exemplet skrivs all information ut för alla tidigare skriptkörningar.

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