Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Panoramica
HDInsight SDK per Go offre classi e funzioni che consentono di gestire i cluster HDInsight. Include operazioni per creare, eliminare, aggiornare, elencare, ridimensionare, eseguire azioni di script, monitorare, ottenere le proprietà dei cluster di HDInsight e altro ancora.
Nota
Il materiale di riferimenti GoDoc per questo SDK è disponibile anche qui.
Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Prerequisiti
- Uno strumento
go get
. - Vai.
Installazione dell'SDK
Dal percorso dell'ambiente GOPATH eseguire go get github.com/Azure/azure-sdk-for-go/tree/master/services/preview/hdinsight/mgmt/2018-06-01-preview/hdinsight
Autenticazione
L'SDK deve essere prima autenticato con la sottoscrizione di Azure. Seguire questo esempio per creare un'entità servizio e usarla per l'autenticazione. Al termine si avrà un'istanza di un ClustersClient
che contiene molte funzioni, descritte nelle sezioni seguenti, che possono essere usate per operazioni di gestione.
Nota
Oltre all'esempio seguente esistono altre modalità di autenticazione che possono essere più adatte alle proprie esigenze. Tutte le funzioni sono descritte nell'articolo Funzioni di autenticazione in Azure SDK per Go
Esempio di autenticazione con un'entità servizio
Per prima cosa, accedere ad Azure Cloud Shell. Verificare che si stia attualmente usando la sottoscrizione in cui si vuole creare l'entità servizio.
az account show
Le informazioni sulla sottoscrizione vengono visualizzate in formato 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 non si è eseguito l'accesso alla sottoscrizione corretta, selezionare quella corretta eseguendo:
az account set -s <name or ID of subscription>
Importante
Se il provider di risorse HDInsight non è già stato registrato con un'altra funzione, ad esempio creando un cluster HDInsight tramite il portale di Azure, è necessario eseguire questa operazione una volta prima di poter eseguire l'autenticazione. La registrazione può essere eseguita da Azure Cloud Shell eseguendo questo comando:
az provider register --namespace Microsoft.HDInsight
Scegliere quindi un nome per l'entità servizio e crearla con il comando seguente:
az ad sp create-for-rbac --name <Service Principal Name> --sdk-auth --role Contributor --scopes /subscriptions/<subscription id>
Verranno visualizzate le informazioni relative all'entità servizio in formato 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/",
"sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
"galleryEndpointUrl": "https://gallery.azure.com/",
"managementEndpointUrl": "https://management.core.windows.net/"
}
Copiare il frammento di codice seguente e compilare TENANT_ID
, CLIENT_ID
, CLIENT_SECRET
e SUBSCRIPTION_ID
con le stringhe JSON restituite dopo aver eseguito il comando per creare l'entità servizio.
package main
import (
"context"
"github.com/Azure/go-autorest/autorest/azure/auth"
hdi "github.com/Azure/azure-sdk-for-go/services/preview/hdinsight/mgmt/2018-06-01-preview/hdinsight"
"github.com/Azure/go-autorest/autorest/to"
)
func main() {
var err error
// Tenant ID for your Azure Subscription
var TENANT_ID = ""
// Your Service Principal App Client ID
var CLIENT_ID = ""
// Your Service Principal Client Secret
var CLIENT_SECRET = ""
// Azure Subscription ID
var SUBSCRIPTION_ID = ""
var credentials = auth.NewClientCredentialsConfig(CLIENT_ID, CLIENT_SECRET, TENANT_ID)
var client = hdi.NewClustersClient(SUBSCRIPTION_ID)
client.Authorizer, err = credentials.Authorizer()
if (err != nil) {
fmt.Println("Error: ", err)
}
Gestione dei cluster
Nota
Questa sezione presuppone che l'utente abbia già eseguito l'autenticazione e abbia creato un'istanza ClusterClient
che ha poi archiviato in una variabile chiamata client
. Le istruzioni per l'autenticazione e l'ottenimento di un ClusterClient
sono disponibili nella sezione Autenticazione precedente.
Creare un cluster
Un nuovo cluster può essere creato chiamando client.Create()
.
Esempio
Questo esempio illustra come creare un cluster Apache Spark con due nodi head e un nodo di lavoro.
Nota
È prima necessario creare un gruppo di risorse e un account di archiviazione, come spiegato di seguito. Se sono già stati creati, è possibile ignorare questi passaggi.
Creazione di un gruppo di risorse
È possibile creare un gruppo di risorse con Azure Cloud Shell eseguendo
az group create -l <Region Name (i.e. eastus)> --n <Resource Group Name>
Creazione di un account di archiviazione
È possibile creare un account di archiviazione con Azure Cloud Shell eseguendo:
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>
Eseguire ora questo comando per ottenere la chiave per l'account di archiviazione. Questa chiave sarà necessaria per creare un cluster:
az storage account keys list -n <Storage Account Name>
Il frammento di codice Go seguente crea un cluster Spark con due nodi head e un nodo di lavoro. Inserire le variabili vuote come spiegato nei commenti. È possibile modificare altri parametri in base alle proprie esigenze.
// The name for the cluster you are creating
var clusterName = "";
// The name of your existing Resource Group
var resourceGroupName = "";
// Choose a username
var username = "";
// Choose a password
var password = "";
// Replace <> with the name of your storage account
var storageAccount = "<>.blob.core.windows.net";
// Storage account key you obtained above
var storageAccountKey = "";
// Choose a region
var location = "";
var container = "default";
var parameters = hdi.ClusterCreateParametersExtended {
Location: to.StringPtr(location),
Tags: make(map[string]*string),
Properties: &hdi.ClusterCreateProperties {
ClusterVersion: to.StringPtr("3.6"),
OsType: hdi.Linux,
ClusterDefinition: &hdi.ClusterDefinition {
Kind: to.StringPtr("spark"),
Configurations: map[string]map[string]interface{}{
"gateway": {
"restAuthCredential.isEnabled": "True",
"restAuthCredential.username": username,
"restAuthCredential.password": password,
},
},
},
Tier: hdi.Standard,
ComputeProfile: &hdi.ComputeProfile {
Roles: &[]hdi.Role {
hdi.Role {
Name: to.StringPtr("headnode"),
TargetInstanceCount: to.Int32Ptr(2),
HardwareProfile: &hdi.HardwareProfile {
VMSize: to.StringPtr("Large"),
},
OsProfile: &hdi.OsProfile {
LinuxOperatingSystemProfile: &hdi.LinuxOperatingSystemProfile {
Username: to.StringPtr(username),
Password: to.StringPtr(password),
},
},
},
hdi.Role {
Name: to.StringPtr("workernode"),
TargetInstanceCount: to.Int32Ptr(1),
HardwareProfile: &hdi.HardwareProfile {
VMSize: to.StringPtr("Large"),
},
OsProfile: &hdi.OsProfile {
LinuxOperatingSystemProfile: &hdi.LinuxOperatingSystemProfile {
Username: to.StringPtr(username),
Password: to.StringPtr(password),
},
},
},
},
},
StorageProfile: &hdi.StorageProfile {
Storageaccounts: &[]hdi.StorageAccount {
hdi.StorageAccount {
Name: to.StringPtr(storageAccount),
Key: to.StringPtr(storageAccountKey),
Container: to.StringPtr(container),
IsDefault: to.BoolPtr(true),
},
},
},
},
}
client.Create(context.Background(), resourceGroupName, clusterName, parameters)
Ottenere i dettagli del cluster
Per ottenere le proprietà di un dato cluster:
client.Get(context.Background(), "<Resource Group Name>", "<Cluster Name>")
Esempio
È possibile usare get
per verificare che il cluster sia stato creato correttamente.
cluster, err := client.Get(context.Background(), resourceGroupName, clusterName)
if (err != nil) {
fmt.Println("Error: ", err)
}
fmt.Println(*cluster.Name)
fmt.Println(*cluster.ID
L'output sarà simile al seguente:
<Cluster Name>
/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/<Resource Group Name>/providers/Microsoft.HDInsight/clusters/<Cluster Name>
Elencare i cluster
Elencare i cluster nella sottoscrizione
client.List()
Elencare i cluster per gruppo di risorse
client.ListByResourceGroup("<Resource Group Name>")
Nota
Sia List()
che ListByResourceGroup()
restituiscono una struct ClusterListResultPage
. Per ottenere la pagina successiva è possibile chiamare Next()
. Questa operazione può essere ripetuta fino a quando ClusterListResultPage.NotDone()
non restituisce false
, come illustrato nell'esempio seguente.
Esempio
L'esempio seguente mostra le proprietà di tutti i cluster per la sottoscrizione corrente:
page, err := client.List(context.Background())
if (err != nil) {
fmt.Println("Error: ", err)
}
for (page.NotDone()) {
for _, cluster := range page.Values() {
fmt.Println(*cluster.Name)
}
err = page.Next();
if (err != nil) {
fmt.Println("Error: ", err)
}
}
Eliminare un cluster
Per eliminare un cluster:
client.Delete(context.Background(), "<Resource Group Name>", "<Cluster Name>")
Aggiornare i tag del cluster
È possibile aggiornare i tag di un dato cluster nel modo seguente:
client.Update(context.Background(), "<Resource Group Name>", "<Cluster Name>", hdi.ClusterPatchParameters{<map[string]*string} of Tags>)
Esempio
client.Update(context.Background(), "SDKTestRG", "SDKTest", hdi.ClusterPatchParameters{map[string]*string{"tag1Name" : to.StringPtr("tag1Value"), "tag2Name" : to.StringPtr("tag2Value")}})
Ridimensionare un cluster
È possibile ridimensionare il numero di nodi di ruolo di lavoro di un dato cluster specificando una nuova dimensione nel modo seguente:
client.Resize(context.Background(), "<Resource Group Name>", "<Cluster Name>", hdi.ClusterResizeParameters{<Num of Worker Nodes (int)>})
Monitoraggio del cluster
HDInsight Management SDK può essere usato anche per gestire il monitoraggio dei cluster tramite Operations Management Suite (OMS).
Così come è stato creato un ClusterClient
per le operazioni di gestione, è necessario ora creare un ExtensionClient
da usare per le operazioni di monitoraggio. Dopo aver completato la sezione Autenticazione precedente, è possibile creare un oggetto ExtensionClient
come descritto di seguito:
extClient := hdi.NewExtensionsClient(SUBSCRIPTION_ID)
extClient.Authorizer, _ = credentials.Authorizer()
Nota
Gli esempi di monitoraggio seguenti presuppongono che sia già stato inizializzato un ExtensionClient
denominato extClient
e impostato il relativo Authorizer
, come illustrato in precedenza.
Abilitare il monitoraggio di OMS
Nota
Per abilitare il monitoraggio di OMS è necessaria un'area di lavoro Log Analytics esistente. Se l'area non è stata ancora creata, vedere Creare un'area di lavoro Log Analytics nel portale di Azure per informazioni su come crearla.
Per abilitare il monitoraggio di OMS nel cluster:
extClient.EnableMonitoring(context.Background(), "<Resource Group Name", "Cluster Name", hdi.ClusterMonitoringRequest {WorkspaceID: to.StringPtr("<Workspace Id>")})
Visualizzare lo stato del monitoraggio di OMS
Per ottenere lo stato di OMS nel cluster:
extClient.GetMonitoringStatus(context.Background(), "<Resource Group Name", "Cluster Name")
Disabilitare il monitoraggio di OMS
Per disabilitare OMS nel cluster:
extClient.DisableMonitoring(context.Background(), "<Resource Group Name", "Cluster Name")
Azioni script
HDInsight offre una funzione di configurazione denominata "azioni script" che richiama script personalizzati per il cluster.
Nota
Per altre informazioni sulle azioni script, vedere Personalizzare i cluster HDInsight basati su Linux tramite azioni script
Eseguire azioni script
È possibile eseguire azioni script in un dato cluster nel modo seguente:
var scriptAction1 = hdi.RuntimeScriptAction{Name: to.StringPtr("<Script Name>"), URI: to.StringPtr("<URL To Script>"), Roles: <&[]string of roles>} //valid roles are "headnode", "workernode", "zookeepernode", and "edgenode"
client.ExecuteScriptActions(context.Background(), "<Resource Group Name>", "<Cluster Name>", hdi.ExecuteScriptActionParameters{PersistOnSuccess: to.BoolPtr(true), ScriptActions: &[]hdi.RuntimeScriptAction{scriptAction1}}) //add more RuntimeScriptActions to the list to execute multiple scripts
Per le operazioni "Eliminare un'azione script" ed "Elencare le azioni script persistenti" è necessario creare un ScriptActionsClient
, analogamente al modo in cui è stato creato un ClusterClient
per le operazioni di gestione. Dopo aver completato la sezione Autenticazione precedente, è possibile creare un oggetto ScriptActionsClient
come descritto di seguito:
scriptActionsClient := hdi.NewScriptActionsClient(SUBSCRIPTION_ID)
scriptActionsClient.Authorizer, _ = credentials.Authorizer()
Nota
Gli esempi di azioni script seguenti presuppongono che sia già stato inizializzato un ScriptActionsClient
denominato scriptActionsClient
e impostato il relativo Authorizer
, come illustrato in precedenza.
Eliminare un'azione script
Per eliminare una determinata azione script persistente in un dato cluster:
scriptActionsClient.Delete(context.Background(), "<Resource Group Name>", "<Cluster Name>", "<Script Name>")
Elencare le azioni script persistenti
Nota
ListByCluster()
restituisce una struct ScriptActionsListPage
. Per ottenere la pagina successiva è possibile chiamare Next()
. Questa operazione può essere ripetuta fino a quando ClusterListResultPage.NotDone()
non restituisce false
, come illustrato nell'esempio seguente.
Per elencare tutte le azioni script persistenti per il cluster specificato:
scriptActionsClient.ListByCluster(context.Background(), "<Resource Group Name>", "<Cluster Name>")
Esempio
page, err := scriptActionsClient.ListByCluster(context.Background(), resourceGroupName, clusterName)
if (err != nil) {
fmt.Println("Error: ", err)
}
for (page.NotDone()) {
for _, script := range page.Values() {
fmt.Println(*script.Name) //There are functions to get other properties of RuntimeScriptActionDetail besides Name, such as Status, Operation, StartTime, EndTime, etc. See reference documentation.
}
err = page.Next();
if (err != nil) {
fmt.Println("Error: ", err)
}
}
Elencare la cronologia di esecuzione di tutti gli script
Per eseguire questa operazione è necessario creare un ScriptExecutionHistoryClient
, analogamente al modo in cui è stato creato un ClusterClient
per le operazioni di monitoraggio. Dopo aver completato la sezione Autenticazione precedente, è possibile creare un oggetto ScriptActionsClient
come descritto di seguito:
scriptExecutionHistoryClient := hdi.NewScriptExecutionHistoryClient(SUBSCRIPTION_ID)
scriptExecutionHistoryClient.Authorizer, _ = credentials.Authorizer()
Nota
Gli esempi seguenti presuppongono che sia già stato inizializzato un ScriptExecutionHistoryClient
denominato scriptExecutionHistoryClient
e impostato il relativo Authorizer
, come illustrato in precedenza.
Per elencare la cronologia di esecuzione di tutti gli script per il cluster specificato:
scriptExecutionHistoryClient.ListByCluster(context.Background(), "<Resource Group Name>", "<Cluster Name>")
Esempio
Questo esempio visualizza tutti i dettagli di tutte le precedenti esecuzioni di script.
page, err := scriptExecutionHistoryClient.ListByCluster(context.Background(), resourceGroupName, clusterName)
if (err != nil) {
fmt.Println("Error: ", err)
}
for (page.NotDone()) {
for _, script := range page.Values() {
fmt.Println(*script.Name) //There are functions to get other properties of RuntimeScriptActionDetail besides Name, such as Status, Operation, StartTime, EndTime, etc. See reference documentation.
}
err = page.Next();
if (err != nil) {
fmt.Println("Error: ", err)
}
}
Passaggi successivi
Esplorare il materiale di riferimento GoDoc. I GoDoc forniscono documentazione di riferimento per tutte le funzioni dell'SDK.