Zestaw SDK usługi HDInsight dla języka Python
Omówienie
Zestaw SDK usługi HDInsight dla języka Python udostępnia klasy i metody, które umożliwiają zarządzanie klastrami usługi HDInsight. Obejmuje to operacje tworzenia, usuwania, aktualizowania, wyświetlania listy, zmieniania rozmiaru, wykonywania akcji skryptu, monitorowania, pobierania właściwości klastrów usługi HDInsight i nie tylko.
Wymagania wstępne
- Konto platformy Azure. Jeśli go nie masz, uzyskaj bezpłatną wersję próbną.
- Python
- Pip
Instalacja zestawu SDK
Zestaw SDK usługi HDInsight dla języka Python można znaleźć w indeksie pakietów języka Python i można go zainstalować, uruchamiając polecenie:
pip install azure-mgmt-hdinsight
Authentication
Najpierw należy uwierzytelnić zestaw SDK w ramach subskrypcji platformy Azure. Postępuj zgodnie z poniższym przykładem, aby utworzyć jednostkę usługi i użyć jej do uwierzytelnienia. Po wykonaniu tej czynności będziesz mieć wystąpienie obiektu HDInsightManagementClient
, które zawiera wiele metod (opisanych w poniższych sekcjach), których można użyć do wykonywania operacji zarządzania.
Uwaga
Istnieją inne sposoby uwierzytelniania oprócz poniższego przykładu, które potencjalnie mogą być lepiej dostosowane do Twoich potrzeb. Wszystkie metody zostały opisane tutaj: Uwierzytelnianie przy użyciu bibliotek zarządzania platformy Azure dla języka Python
Przykład uwierzytelniania przy użyciu jednostki usługi
Najpierw zaloguj się do usługi Azure Cloud Shell. Sprawdź, czy obecnie używasz subskrypcji, w której ma zostać utworzona jednostka usługi.
az account show
Informacje o subskrypcji są wyświetlane jako dane 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"
}
}
Jeśli nie zalogowano się do odpowiedniej subskrypcji, wybierz poprawną, uruchamiając polecenie:
az account set -s <name or ID of subscription>
Ważne
Jeśli dostawca zasobów usługi HDInsight nie został jeszcze zarejestrowany przez inną metodę (na przykład przez utworzenie klastra usługi HDInsight za pośrednictwem witryny Azure Portal), należy to zrobić raz, zanim będzie można uwierzytelnić. Można to zrobić z poziomu usługi Azure Cloud Shell, uruchamiając następujące polecenie:
az provider register --namespace Microsoft.HDInsight
Następnie wybierz nazwę jednostki usługi i utwórz ją za pomocą następującego polecenia:
az ad sp create-for-rbac --name <Service Principal Name> --role Contributor --sdk-auth
Informacje o jednostce usługi są wyświetlane jako dane 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/"
}
Skopiuj poniższy fragment kodu języka Python i wypełnij TENANT_ID
ciągi , CLIENT_ID
, CLIENT_SECRET
i SUBSCRIPTION_ID
ciągami z kodu JSON zwróconego po uruchomieniu polecenia w celu utworzenia jednostki usługi.
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)
Zarządzanie klastrami
Uwaga
W tej sekcji założono, że wystąpienie zostało już uwierzytelnione i utworzone HDInsightManagementClient
i przechowywane w zmiennej o nazwie client
. Instrukcje dotyczące uwierzytelniania i uzyskiwania elementu HDInsightManagementClient
można znaleźć w sekcji Uwierzytelnianie powyżej.
Tworzenie klastra
Nowy klaster można utworzyć, wywołując polecenie client.clusters.create()
.
Samples
Przykłady kodu do tworzenia kilku typowych typów klastrów usługi HDInsight są dostępne: przykłady języka Python w usłudze HDInsight.
Przykład
W tym przykładzie pokazano, jak utworzyć klaster Spark z 2 węzłami głównymi i 1 węzłem roboczym.
Uwaga
Najpierw musisz utworzyć grupę zasobów i konto magazynu, jak wyjaśniono poniżej. Jeśli zostały one już utworzone, możesz pominąć te kroki.
Tworzenie grupy zasobów
Grupę zasobów można utworzyć przy użyciu usługi Azure Cloud Shell, uruchamiając polecenie
az group create -l <Region Name (i.e. eastus)> --n <Resource Group Name>
Tworzenie konta magazynu
Konto magazynu można utworzyć przy użyciu usługi Azure Cloud Shell, uruchamiając polecenie:
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>
Teraz uruchom następujące polecenie, aby uzyskać klucz dla konta magazynu (będzie to konieczne do utworzenia klastra):
az storage account keys list -n <Storage Account Name>
Poniższy fragment kodu języka Python tworzy klaster Spark z 2 węzłami głównymi i 1 węzłem roboczym. Wypełnij puste zmienne, jak wyjaśniono w komentarzach i możesz zmienić inne parametry zgodnie z twoimi potrzebami.
# 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
))
Pobieranie szczegółów klastra
Aby uzyskać właściwości dla danego klastra:
client.clusters.get("<Resource Group Name>", "<Cluster Name>")
Przykład
Możesz użyć polecenia get
, aby potwierdzić, że klaster został pomyślnie utworzony.
my_cluster = client.clusters.get("<Resource Group Name>", "<Cluster Name>")
print(my_cluster)
Dane wyjściowe powinny wyglądać następująco:
{'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>}
Wyświetlanie listy klastrów
Wyświetlanie listy klastrów w ramach subskrypcji
client.clusters.list()
Wyświetlanie listy klastrów według grupy zasobów
client.clusters.list_by_resource_group("<Resource Group Name>")
Uwaga
Zarówno list()
, jak i list_by_resource_group()
zwraca ClusterPaged
obiekt. Wywołanie advance_page()
zwraca listę klastrów na tej stronie i powoduje przejście ClusterPaged
obiektu do następnej strony. Można to powtórzyć do momentu zgłoszenia wyjątku StopIteration
, co oznacza, że nie ma więcej stron.
Przykład
Poniższy przykład wyświetla właściwości wszystkich klastrów dla bieżącej subskrypcji:
clusters_paged = client.clusters.list()
while True:
try:
for cluster in clusters_paged.advance_page():
print(cluster)
except StopIteration:
break
Usuwanie klastra
Aby usunąć klaster:
client.clusters.delete("<Resource Group Name>", "<Cluster Name>")
Aktualizowanie tagów klastra
Tagi danego klastra można zaktualizować w następujący sposób:
client.clusters.update("<Resource Group Name>", "<Cluster Name>", tags={<Dictionary of Tags>})
Przykład
client.clusters.update("<Resource Group Name>", "<Cluster Name>", tags={"tag1Name" : "tag1Value", "tag2Name" : "tag2Value"})
Zmienianie rozmiaru klastra
Możesz zmienić rozmiar danego klastra na liczbę węzłów roboczych, określając nowy rozmiar w następujący sposób:
client.clusters.resize("<Resource Group Name>", "<Cluster Name>", target_instance_count=<Num of Worker Nodes>)
Monitorowanie klastrów
Zestaw SDK zarządzania usługi HDInsight może również służyć do zarządzania monitorowaniem w klastrach za pośrednictwem pakietu Operations Management Suite (OMS).
Włączanie monitorowania pakietu OMS
Uwaga
Aby włączyć monitorowanie pakietu OMS, musisz mieć istniejący obszar roboczy usługi Log Analytics. Jeśli jeszcze go nie utworzono, możesz dowiedzieć się, jak to zrobić w tym miejscu: Tworzenie obszaru roboczego usługi Log Analytics w Azure Portal.
Aby włączyć monitorowanie pakietu OMS w klastrze:
client.extension.enable_monitoring("<Resource Group Name>", "<Cluster Name>", workspace_id="<Workspace Id>")
Wyświetlanie stanu monitorowania pakietu OMS
Aby uzyskać stan pakietu OMS w klastrze:
client.extension.get_monitoring_status("<Resource Group Name", "Cluster Name")
Wyłączanie monitorowania pakietu OMS
Aby wyłączyć usługę OMS w klastrze:
client.extension.disable_monitoring("<Resource Group Name>", "<Cluster Name>")
Akcje skryptu
Usługa HDInsight udostępnia metodę konfiguracji o nazwie akcje skryptu, które wywołują niestandardowe skrypty w celu dostosowania klastra.
Uwaga
Więcej informacji na temat używania akcji skryptu można znaleźć tutaj: Dostosowywanie klastrów usługi HDInsight opartych na systemie Linux przy użyciu akcji skryptu
Wykonywanie akcji skryptu
Aby wykonać akcje skryptu w danym klastrze:
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
Usuń akcję skryptu
Aby usunąć określoną akcję utrwalonego skryptu w danym klastrze:
client.script_actions.delete("<Resource Group Name>", "<Cluster Name", "<Script Name>")
Lista akcji utrwalonego skryptu
Uwaga
list()
i list_persisted_scripts()
zwraca RuntimeScriptActionDetailPaged
obiekt. Wywołanie advance_page()
zwraca listę na RuntimeScriptActionDetail
tej stronie i powoduje przejście RuntimeScriptActionDetailPaged
obiektu do następnej strony. Można to powtórzyć do momentu zgłoszenia wyjątku StopIteration
, co oznacza, że nie ma więcej stron. Zobacz przykład poniżej.
Aby wyświetlić listę wszystkich akcji utrwalonego skryptu dla określonego klastra:
client.script_actions.list_persisted_scripts("<Resource Group Name>", "<Cluster Name>")
Przykład
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
Wyświetl listę historii wykonywania wszystkich skryptów
Aby wyświetlić listę historii wykonywania wszystkich skryptów dla określonego klastra:
client.script_execution_history.list("<Resource Group Name>", "<Cluster Name>")
Przykład
W tym przykładzie zostaną wydrukowane wszystkie szczegóły wszystkich poprzednich wykonań skryptów.
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