Sdílet prostřednictvím


Sada HDInsight SDK pro Python

Přehled

Sada HDInsight SDK pro Python poskytuje třídy a metody, které umožňují spravovat clustery HDInsight. Obsahuje operace pro vytváření, odstraňování, aktualizaci, výpis, změnu velikosti, provádění akcí skriptů, monitorování, získání vlastností clusterů HDInsight atd.

Požadavky

Instalace sady SDK

Sadu HDInsight SDK pro Python najdete v indexu balíčků Pythonu a můžete ji nainstalovat spuštěním následujícího příkazu:

pip install azure-mgmt-hdinsight

Authentication

Nejprve je potřeba ověřit sadu SDK s vaším předplatným Azure. Podle následujícího příkladu vytvořte instanční objekt a použijte ho k ověření. Po dokončení budete mít instanci , která obsahuje mnoho metod (popsaných HDInsightManagementClientv následujících částech), které lze použít k provádění operací správy.

Poznámka

Kromě následujícího příkladu existují i další způsoby ověření, které by mohly být pro vaše potřeby vhodnější. Všechny metody jsou popsané tady: Ověřování pomocí knihoven pro správu Azure pro Python

Příklad ověřování pomocí instančního objektu

Nejprve se přihlaste k Azure Cloud Shell. Ověřte, že aktuálně používáte předplatné, ve kterém chcete instanční objekt vytvořit.

az account show

Informace o vašem předplatném se zobrazí ve formátu 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"
  }
}

Pokud nejste přihlášeni ke správnému předplatnému, vyberte správné předplatné spuštěním příkazu:

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

Důležité

Pokud jste ještě nezaregistrovali poskytovatele prostředků HDInsight jinou metodou (například vytvořením clusteru HDInsight prostřednictvím webu Azure Portal), musíte to před ověřením provést jednou. Můžete to provést z Azure Cloud Shell spuštěním následujícího příkazu:

az provider register --namespace Microsoft.HDInsight

Pak zvolte název instančního objektu a vytvořte ho následujícím příkazem:

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

Informace o instančním objektu se zobrazí ve formátu 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/"
}

Zkopírujte níže uvedený fragment kódu Pythonu a vyplňte TENANT_IDhodnoty , CLIENT_IDCLIENT_SECRET, a SUBSCRIPTION_ID s řetězci z kódu JSON, který se vrátil po spuštění příkazu k vytvoření instančního objektu.

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)

Správa clusteru

Poznámka

V této části se předpokládá, že jste již ověřili a vytvořili HDInsightManagementClient instanci a uložili ji do proměnné s názvem client. Pokyny k ověření a získání HDInsightManagementClient najdete v části Ověřování výše.

Vytvoření clusteru

Nový cluster je možné vytvořit voláním client.clusters.create()příkazu .

ukázky

K dispozici jsou ukázky kódu pro vytváření několika běžných typů clusterů HDInsight: Ukázky HDInsight v Pythonu.

Příklad

Tento příklad ukazuje, jak vytvořit cluster Spark se 2 hlavními a 1 pracovními uzly.

Poznámka

Nejprve musíte vytvořit skupinu prostředků a účet úložiště, jak je vysvětleno níže. Pokud jste je už vytvořili, můžete tyto kroky přeskočit.

Vytvoření skupiny prostředků

Pomocí azure Cloud Shell můžete vytvořit skupinu prostředků spuštěním příkazu .

az group create -l <Region Name (i.e. eastus)> --n <Resource Group Name>
Vytvoření účtu úložiště

Účet úložiště můžete vytvořit pomocí azure Cloud Shell spuštěním následujícího příkazu:

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>

Teď spuštěním následujícího příkazu získejte klíč pro váš účet úložiště (budete ho potřebovat k vytvoření clusteru):

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

Následující fragment kódu Pythonu vytvoří cluster Spark se 2 hlavními a 1 pracovními uzly. Vyplňte prázdné proměnné, jak je vysvětleno v komentářích, a nebojte se změnit další parametry tak, aby vyhovovaly vašim konkrétním potřebám.

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

Získání podrobností o clusteru

Získání vlastností pro daný cluster:

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

Příklad

Pomocí příkazu get můžete potvrdit, že jste cluster úspěšně vytvořili.

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

Výstup by měl vypadat takto:

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

Výpis clusterů

Výpis clusterů v rámci předplatného

client.clusters.list()

Výpis clusterů podle skupiny prostředků

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

Poznámka

Oba list() objekty a list_by_resource_group() vrátí ClusterPaged objekt. Volání advance_page() vrátí seznam clusterů na této stránce a posune ClusterPaged objekt na další stránku. To se může opakovat, dokud StopIteration se nevyvolá výjimka, která značí, že neexistují žádné další stránky.

Příklad

Následující příklad vytiskne vlastnosti všech clusterů pro aktuální předplatné:

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

Odstranění clusteru

Odstranění clusteru:

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

Aktualizace značek clusteru

Značky daného clusteru můžete aktualizovat takto:

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

Příklad

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

Změna velikosti clusteru

Velikost počtu pracovních uzlů daného clusteru můžete změnit zadáním nové velikosti, například takto:

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

Monitorování clusteru

Sadu HDInsight Management SDK můžete použít také ke správě monitorování v clusterech prostřednictvím sady Operations Management Suite (OMS).

Povolení monitorování OMS

Poznámka

Pokud chcete povolit monitorování OMS, musíte mít existující pracovní prostor služby Log Analytics. Pokud jste ho ještě nevytvořili, můžete se dozvědět, jak to udělat, tady: Vytvoření pracovního prostoru služby Log Analytics v Azure Portal.

Povolení monitorování OMS v clusteru:

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

Zobrazení stavu monitorování OMS

Zjištění stavu OMS v clusteru:

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

Zakázání monitorování OMS

Zakázání OMS v clusteru:

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

Akce skriptu

HDInsight poskytuje metodu konfigurace označovanou jako akce skriptů, která vyvolává vlastní skripty pro přizpůsobení clusteru.

Poznámka

Další informace o používání akcí skriptů najdete tady: Přizpůsobení clusterů HDInsight se systémem Linux pomocí akcí skriptů

Spuštění akcí skriptu

Spuštění akcí skriptu v daném clusteru:

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

Akce odstranit skript

Odstranění zadané trvalé akce skriptu v daném clusteru:

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

Výpis trvalých akcí skriptu

Poznámka

list() a list_persisted_scripts() vrátit RuntimeScriptActionDetailPaged objekt. Volání advance_page() vrátí seznam RuntimeScriptActionDetail na této stránce a přejde RuntimeScriptActionDetailPaged objekt na další stránku. To se může opakovat, dokud StopIteration se nevyvolá výjimka, která značí, že neexistují žádné další stránky. Viz následující příklad.

Výpis všech trvalých akcí skriptu pro zadaný cluster:

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

Příklad

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

Vypsat historii provádění všech skriptů

Výpis historie provádění všech skriptů pro zadaný cluster:

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

Příklad

Tento příklad vytiskne všechny podrobnosti o všech předchozích spuštěních skriptů.

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