Megosztás a következőn keresztül:


Pythonhoz készült HDInsight SDK

Áttekintés

A Pythonhoz készült HDInsight SDK olyan osztályokat és metódusokat biztosít, amelyek lehetővé teszik a HDInsight-fürtök kezelését. Az SDK többek között létrehozásra, törlésre, frissítésre, listázásra, átméretezésre, szkriptműveletek végrehajtására, monitorozásra és HDInsight-fürtök tulajdonságainak lekérésére szolgáló műveleteket tartalmaz.

Előfeltételek

SDK telepítése

A Pythonhoz készült HDInsight SDK megtalálható a Python-csomagindexben , és a következő futtatásával telepíthető:

pip install azure-mgmt-hdinsight

Hitelesítés

Az SDK-t először hitelesíteni kell az Azure-előfizetésével. Kövesse az alábbi példát egy szolgáltatásnév létrehozásához és hitelesítéséhez. Ha ez megtörtént, egy példánya HDInsightManagementClientlesz, amely számos (az alábbi szakaszokban ismertetett) metódust tartalmaz, amelyek felügyeleti műveletek végrehajtására használhatók.

Megjegyzés

Az alábbi példán kívül más módszerek is léteznek a hitelesítésre, amelyek esetleg jobban megfelelnek az Igényeinek. Az összes metódust itt ismertetjük: Hitelesítés a Pythonhoz készült Azure Management Libraries használatával

Hitelesítési példa szolgáltatásnév használatával

Először jelentkezzen be az Azure Cloud Shell. Ellenőrizze, hogy jelenleg azt az előfizetést használja-e, amelyben létre szeretné hozni a szolgáltatásnevet.

az account show

Az előfizetés adatai JSON-ként jelennek meg.

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

Ha nincs bejelentkezve a megfelelő előfizetésbe, válassza ki a megfelelőt a következő futtatásával:

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

Fontos

Ha még nem regisztrálta a HDInsight-erőforrás-szolgáltatót egy másik módszerrel (például egy HDInsight-fürt Azure Portalon keresztüli létrehozásával), ezt egyszer kell elvégeznie a hitelesítés előtt. Ezt az Azure Cloud Shell az alábbi parancs futtatásával teheti meg:

az provider register --namespace Microsoft.HDInsight

Ezután válasszon nevet a szolgáltatásnévnek, és hozza létre a következő paranccsal:

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

A szolgáltatásnév adatai JSON-ként jelennek meg.

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

Másolja ki az alábbi Python-kódrészletet, és töltse ki TENANT_IDa , CLIENT_ID, , CLIENT_SECRETés SUBSCRIPTION_ID karakterláncokat a JSON-ból, amelyet a parancs futtatása után visszaadott a szolgáltatásnév létrehozásához.

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)

Fürtkezelés

Megjegyzés

Ez a szakasz feltételezi, hogy már hitelesített és létrehozott egy példányt HDInsightManagementClient , és egy nevű clientváltozóban tárolja. A hitelesítésre és a hitelesítésre HDInsightManagementClient vonatkozó utasítások a fenti Hitelesítés szakaszban találhatók.

Fürt létrehozása

A meghívásával client.clusters.create()új fürt hozható létre.

Példák

A HDInsight-fürtök számos gyakori típusának létrehozására szolgáló kódminták érhetők el: HDInsight Python-minták.

Példa

Ez a példa bemutatja, hogyan hozhat létre Spark-fürtöt 2 átjárócsomóponttal és 1 munkavégző csomóponttal.

Megjegyzés

Először létre kell hoznia egy erőforráscsoportot és egy tárfiókot az alábbiak szerint. Ha már létrehozta ezeket, kihagyhatja ezeket a lépéseket.

Erőforráscsoport létrehozása

Erőforráscsoportot az Azure Cloud Shell használatával hozhat létre a következő futtatásával:

az group create -l <Region Name (i.e. eastus)> --n <Resource Group Name>
Tárfiók létrehozása

A következő futtatásával hozhat létre tárfiókot az Azure Cloud Shell használatával:

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>

Most futtassa a következő parancsot a tárfiók kulcsának lekéréséhez (erre szüksége lesz egy fürt létrehozásához):

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

Az alábbi Python-kódrészlet létrehoz egy Spark-fürtöt 2 átjárócsomóponttal és 1 munkavégző csomóponttal. Töltse ki az üres változókat a megjegyzésekben leírtak szerint, és nyugodtan módosíthatja az egyéb paramétereket az ön igényeinek megfelelően.

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

Fürt részleteinek lekérése

Egy adott fürt tulajdonságainak lekérése:

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

Példa

A használatával get ellenőrizheti, hogy sikeresen létrehozta-e a fürtöt.

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

A kimenetnek a következőképpen kell kinéznie:

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

Fürtök listázása

Az előfizetés alatti fürtök listázása

client.clusters.list()

Fürtök listázása erőforráscsoport szerint

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

Megjegyzés

Mindkettőt list() , és list_by_resource_group() visszaad egy objektumot ClusterPaged . A hívás advance_page() az adott lapon lévő fürtök listáját adja vissza, és az objektumot a ClusterPaged következő oldalra irányítja. Ez mindaddig megismételhető, amíg a rendszer kivételt StopIteration nem emel ki, ami azt jelzi, hogy nincs több oldal.

Példa

Az alábbi példa az aktuális előfizetéshez tartozó összes fürt tulajdonságait nyomtatja ki:

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

Fürt törlése

Fürt törlése:

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

Fürtcímkék frissítése

Az adott fürt címkéi a következőképpen frissíthetők:

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

Példa

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

Fürt átméretezése

Egy adott fürt munkavégző csomópontjainak számát átméretezheti egy ilyen új méret megadásával:

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

Fürtmonitorozás

A HDInsight Management SDK-val az Operations Management Suite (OMS) segítségével is felügyelheti a fürtök monitorozását.

Az OMS monitorozásának engedélyezése

Megjegyzés

Az OMS-figyelés engedélyezéséhez rendelkeznie kell egy meglévő Log Analytics-munkaterületel. Ha még nem hozott létre egyet, itt megtudhatja, hogyan teheti meg ezt: Log Analytics-munkaterület létrehozása a Azure Portal.

Az OMS-figyelés engedélyezése a fürtön:

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

Az OMS-figyelés állapotának megtekintése

Az OMS állapotának lekérése a fürtön:

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

Az OMS monitorozásának letiltása

Az OMS letiltása a fürtön:

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

Szkriptműveletek

A HDInsight egy szkriptműveletek nevű konfigurációs módszert biztosít, amely egyéni szkripteket hív meg a fürt testreszabásához.

Megjegyzés

A szkriptműveletek használatáról itt talál további információt: Linux-alapú HDInsight-fürtök testreszabása szkriptműveletekkel

Szkriptműveletek végrehajtása

Szkriptműveletek végrehajtása egy adott fürtön:

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

Szkript törlése művelet

Egy adott fürtön tárolt, megőrzött szkriptművelet törlése:

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

Megőrzött szkriptműveletek listázása

Megjegyzés

list() és list_persisted_scripts() visszaad egy objektumot RuntimeScriptActionDetailPaged . A hívás advance_page() egy listát RuntimeScriptActionDetail ad vissza az adott oldalon, és az RuntimeScriptActionDetailPaged objektumot a következő oldalra irányítja. Ez mindaddig megismételhető, amíg a rendszer kivételt StopIteration nem emel ki, ami azt jelzi, hogy nincs több oldal. Lásd az alábbi példát.

A megadott fürt összes megőrzött szkriptműveletének listázása:

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

Példa

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

Az összes szkript végrehajtási előzményeinek listázása

A megadott fürt összes szkriptjének végrehajtási előzményeinek listázása:

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

Példa

Ez a példa az összes korábbi szkriptvégrehajtás összes részletét kinyomtatja.

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