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
- Ett Azure-konto. Om du inte har någon kan du skaffa en kostnadsfri utvärderingsversion.
- Python
- Pip
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_SECRET
och 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
Azure SDK for Python