HDInsight SDK for Python (SDK do HDInsight para Python)
Descrição Geral
O HDInsight SDK para Python fornece aulas e métodos que lhe permitem gerir os seus clusters HDInsight. Inclui operações para criar, eliminar, atualizar, listar, redimensionar, executar ações de script, monitorizar, obter propriedades de clusters do HDInsight, entre outras.
Pré-requisitos
- Uma conta do Azure. Se não tiver um, tenha um julgamento grátis.
- Python
- pip
Instalação SDK
O HDInsight SDK para Python pode ser encontrado no Python Package Index e pode ser instalado em execução:
pip install azure-mgmt-hdinsight
Autenticação
O SDK precisa primeiro de ser autenticado com a sua subscrição Azure. Siga o exemplo abaixo para criar um principal de serviço e usá-lo para autenticar. Depois disso, terá um exemplo de um HDInsightManagementClient
, que contém muitos métodos (descritos em secções abaixo) que podem ser usados para realizar operações de gestão.
Nota
Existem outras formas de autenticar além do exemplo abaixo que poderia potencialmente ser mais adequado para as suas necessidades. Todos os métodos são delineados aqui: Autenticar com as Bibliotecas de Gestão Azure para Python
Exemplo de autenticação Usando um diretor de serviço
Primeiro, faça login no Azure Cloud Shell. Verifique se está a utilizar a subscrição na qual pretende que o titular do serviço seja criado.
az account show
As suas informações de subscrição são apresentadas como 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"
}
}
Se não estiver registado na subscrição correta, selecione a correta executando:
az account set -s <name or ID of subscription>
Importante
Se ainda não registou o Fornecedor de Recursos HDInsight por outro método (como por exemplo, criar um Cluster HDInsight através do Portal Azure), tem de o fazer uma vez antes de poder autenticar. Isto pode ser feito a partir do Azure Cloud Shell executando o seguinte comando:
az provider register --namespace Microsoft.HDInsight
Em seguida, escolha um nome para o seu principal de serviço e crie-o com o seguinte comando:
az ad sp create-for-rbac --name <Service Principal Name> --role Contributor --sdk-auth
A informação principal do serviço é apresentada como 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/"
}
Copie o snippet de Python abaixo e preenchaTENANT_ID
, CLIENT_ID
e CLIENT_SECRET
SUBSCRIPTION_ID
com as cordas do JSON que foi devolvido após executar o comando para criar o principal de serviço.
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)
Gestão de Clusters
Nota
Esta secção pressupõe que já autenticou e construiu um HDInsightManagementClient
caso e guardou-o numa variável chamada client
. As instruções para autenticar e obter uma HDInsightManagementClient
pode ser encontrada na secção de Autenticação acima.
Criar um Cluster
Um novo cluster pode ser criado chamando client.clusters.create()
.
Amostras
Estão disponíveis amostras de código para a criação de vários tipos comuns de clusters HDInsight: Amostras de Python HDInsight.
Exemplo
Este exemplo demonstra como criar um cluster Spark com 2 nós de cabeça e 1 nó de trabalhador.
Nota
Primeiro precisa de criar um Grupo de Recursos e Conta de Armazenamento, como explicado abaixo. Se já os criou, pode saltar estes passos.
Criação de um Grupo de Recursos
Pode criar um grupo de recursos utilizando o Azure Cloud Shell executando
az group create -l <Region Name (i.e. eastus)> --n <Resource Group Name>
Criação de uma conta de armazenamento
Pode criar uma conta de armazenamento utilizando o Azure Cloud Shell executando:
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>
Agora executar o seguinte comando para obter a chave para a sua conta de armazenamento (você precisará deste para criar um cluster):
az storage account keys list -n <Storage Account Name>
O snippet abaixo do Python cria um aglomerado de faíscas com 2 nós de cabeça e 1 nó de trabalhador. Preencha as variáveis em branco como explicado nos comentários e sinta-se livre para alterar outros parâmetros de acordo com as suas necessidades específicas.
# 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
))
Obter Detalhes do Cluster
Para obter propriedades para um determinado cluster:
client.clusters.get("<Resource Group Name>", "<Cluster Name>")
Exemplo
Pode usar get
para confirmar que criou com sucesso o seu cluster.
my_cluster = client.clusters.get("<Resource Group Name>", "<Cluster Name>")
print(my_cluster)
A saída deve parecer:
{'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>}
Agrupamentos de listas
Agrupamentos de listas sob a subscrição
client.clusters.list()
Agrupamentos de listas por grupo de recursos
client.clusters.list_by_resource_group("<Resource Group Name>")
Nota
Ambos list()
e list_by_resource_group()
devolvam um ClusterPaged
objeto. A chamada advance_page()
devolve uma lista de clusters nessa página e avança o ClusterPaged
objeto para a página seguinte. Isto pode ser repetido até que uma StopIteration
exceção seja levantada, indicando que não há mais páginas.
Exemplo
O exemplo a seguir imprime as propriedades de todos os clusters para a subscrição atual:
clusters_paged = client.clusters.list()
while True:
try:
for cluster in clusters_paged.advance_page():
print(cluster)
except StopIteration:
break
Delete a Cluster (Eliminar um Cluster)
Para eliminar um cluster:
client.clusters.delete("<Resource Group Name>", "<Cluster Name>")
Atualizar tags de cluster
Pode atualizar as etiquetas de um determinado cluster assim:
client.clusters.update("<Resource Group Name>", "<Cluster Name>", tags={<Dictionary of Tags>})
Exemplo
client.clusters.update("<Resource Group Name>", "<Cluster Name>", tags={"tag1Name" : "tag1Value", "tag2Name" : "tag2Value"})
Redimensionar Cluster
Pode redimensionar o número de nós de trabalhadores de um determinado cluster especificando um novo tamanho como:
client.clusters.resize("<Resource Group Name>", "<Cluster Name>", target_instance_count=<Num of Worker Nodes>)
Monitorização de Cluster
O HDInsight Management SDK também pode ser usado para gerir a monitorização dos seus clusters através do Suite de Gestão de Operações (OMS).
Permitir a monitorização de OMS
Nota
Para ativar o controlo do OMS, tem de ter um espaço de trabalho log analytics existente. Se ainda não criou um, pode aprender a fazê-lo aqui: Criar um espaço de trabalho Log Analytics no portal do Azure.
Para ativar a monitorização do OMS no seu cluster:
client.extension.enable_monitoring("<Resource Group Name>", "<Cluster Name>", workspace_id="<Workspace Id>")
Ver estado da monitorização de OMS
Para obter o estado da OMS no seu cluster:
client.extension.get_monitoring_status("<Resource Group Name", "Cluster Name")
Desativar a monitorização dos OMS
Para desativar o OMS no seu cluster:
client.extension.disable_monitoring("<Resource Group Name>", "<Cluster Name>")
Ações de script
O HDInsight fornece um método de configuração chamado ações de script que invoca scripts personalizados para personalizar o cluster.
Nota
Mais informações sobre como usar as ações de script podem ser encontradas aqui: Personalize clusters HDInsight baseados em Linux usando ações de script
Executar ações de script
Para executar ações de script num determinado cluster:
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
Eliminar ação do script
Para eliminar uma ação de scripts persistiu especificada num determinado cluster:
client.script_actions.delete("<Resource Group Name>", "<Cluster Name", "<Script Name>")
Lista de ações de script persistidas
Nota
list()
e list_persisted_scripts()
devolver um RuntimeScriptActionDetailPaged
objeto. A chamada advance_page()
devolve uma lista dessa RuntimeScriptActionDetail
página e avança o RuntimeScriptActionDetailPaged
objeto para a página seguinte. Isto pode ser repetido até que uma StopIteration
exceção seja levantada, indicando que não há mais páginas. Veja o exemplo abaixo.
Para listar todas as ações de scripts persistidos para o cluster especificado:
client.script_actions.list_persisted_scripts("<Resource Group Name>", "<Cluster Name>")
Exemplo
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
Listar a história da execução de todos os scripts
Para listar o histórico de execução de todos os scripts para o cluster especificado:
client.script_execution_history.list("<Resource Group Name>", "<Cluster Name>")
Exemplo
Este exemplo imprime todos os detalhes para todas as execuções de scripts anteriores.
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