Creare i cluster Hadoop tramite l'API REST di AzureCreate Hadoop clusters using the Azure REST API

Informazioni su come creare un cluster HDInsight tramite un modello di Azure Resource Manager e l'API REST di Azure.Learn how to create an HDInsight cluster using an Azure Resource Manager template and the Azure REST API.

L'API REST di Azure consente di eseguire operazioni di gestione su servizi ospitati nella piattaforma Azure, inclusa la creazione di nuove risorse, ad esempio cluster HDInsight.The Azure REST API allows you to perform management operations on services hosted in the Azure platform, including the creation of new resources such as HDInsight clusters.

Importante

Linux è l'unico sistema operativo usato in HDInsight versione 3.4 o successiva.Linux is the only operating system used on HDInsight version 3.4 or greater. Per altre informazioni, vedere la sezione relativa al ritiro di HDInsight in Windows.For more information, see HDInsight retirement on Windows.

Nota

La procedura descritta in questo documento usa l'utilità curl (https://curl.haxx.se/) per comunicare con l'API REST di Azure.The steps in this document use the curl (https://curl.haxx.se/) utility to communicate with the Azure REST API.

Creare un modelloCreate a template

I modelli di Azure Resource Manager sono documenti JSON che descrivono un gruppo di risorse e tutte le risorse in esso contenute, ad esempio HDInsight. Questo approccio basato su modelli consente di definire le risorse necessarie per HDInsight in un singolo modello.Azure Resource Manager templates are JSON documents that describe a resource group and all resources in it (such as HDInsight.) This template-based approach allows you to define the resources that you need for HDInsight in one template.

Il documento JSON seguente è una fusione dei file di modello e di parametri ricavati da https://github.com/Azure/azure-quickstart-templates/tree/master/101-hdinsight-linux-ssh-password, che consente di creare un cluster basato su Linux usando una password per proteggere l'account utente SSH.The following JSON document is a merger of the template and parameters files from https://github.com/Azure/azure-quickstart-templates/tree/master/101-hdinsight-linux-ssh-password, which creates a Linux-based cluster using a password to secure the SSH user account.

{
    "properties": {
        "template": {
            "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
            "contentVersion": "1.0.0.0",
            "parameters": {
                "clusterType": {
                    "type": "string",
                    "allowedValues": ["hadoop",
                    "hbase",
                    "storm",
                    "spark"],
                    "metadata": {
                        "description": "The type of the HDInsight cluster to create."
                    }
                },
                "clusterName": {
                    "type": "string",
                    "metadata": {
                        "description": "The name of the HDInsight cluster to create."
                    }
                },
                "clusterLoginUserName": {
                    "type": "string",
                    "metadata": {
                        "description": "These credentials can be used to submit jobs to the cluster and to log into cluster dashboards."
                    }
                },
                "clusterLoginPassword": {
                    "type": "securestring",
                    "metadata": {
                        "description": "The password must be at least 10 characters in length and must contain at least one digit, one non-alphanumeric character, and one upper or lower case letter."
                    }
                },
                "sshUserName": {
                    "type": "string",
                    "metadata": {
                        "description": "These credentials can be used to remotely access the cluster."
                    }
                },
                "sshPassword": {
                    "type": "securestring",
                    "metadata": {
                        "description": "The password must be at least 10 characters in length and must contain at least one digit, one non-alphanumeric character, and one upper or lower case letter."
                    }
                },
                "clusterStorageAccountName": {
                    "type": "string",
                    "metadata": {
                        "description": "The name of the storage account to be created and be used as the cluster's storage."
                    }
                },
                "clusterWorkerNodeCount": {
                    "type": "int",
                    "defaultValue": 4,
                    "metadata": {
                        "description": "The number of nodes in the HDInsight cluster."
                    }
                }
            },
            "variables": {
                "defaultApiVersion": "2015-05-01-preview",
                "clusterApiVersion": "2015-03-01-preview"
            },
            "resources": [{
                "name": "[parameters('clusterStorageAccountName')]",
                "type": "Microsoft.Storage/storageAccounts",
                "location": "[resourceGroup().location]",
                "apiVersion": "[variables('defaultApiVersion')]",
                "dependsOn": [],
                "tags": {

                },
                "properties": {
                    "accountType": "Standard_LRS"
                }
            },
            {
                "name": "[parameters('clusterName')]",
                "type": "Microsoft.HDInsight/clusters",
                "location": "[resourceGroup().location]",
                "apiVersion": "[variables('clusterApiVersion')]",
                "dependsOn": ["[concat('Microsoft.Storage/storageAccounts/',parameters('clusterStorageAccountName'))]"],
                "tags": {

                },
                "properties": {
                    "clusterVersion": "3.6",
                    "osType": "Linux",
                    "clusterDefinition": {
                        "kind": "[parameters('clusterType')]",
                        "configurations": {
                            "gateway": {
                                "restAuthCredential.isEnabled": true,
                                "restAuthCredential.username": "[parameters('clusterLoginUserName')]",
                                "restAuthCredential.password": "[parameters('clusterLoginPassword')]"
                            }
                        }
                    },
                    "storageProfile": {
                        "storageaccounts": [{
                            "name": "[concat(parameters('clusterStorageAccountName'),'.blob.core.windows.net')]",
                            "isDefault": true,
                            "container": "[parameters('clusterName')]",
                            "key": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('clusterStorageAccountName')), variables('defaultApiVersion')).key1]"
                        }]
                    },
                    "computeProfile": {
                        "roles": [{
                            "name": "headnode",
                            "targetInstanceCount": "2",
                            "hardwareProfile": {
                                "vmSize": "Standard_D3"
                            },
                            "osProfile": {
                                "linuxOperatingSystemProfile": {
                                    "username": "[parameters('sshUserName')]",
                                    "password": "[parameters('sshPassword')]"
                                }
                            }
                        },
                        {
                            "name": "workernode",
                            "targetInstanceCount": "[parameters('clusterWorkerNodeCount')]",
                            "hardwareProfile": {
                                "vmSize": "Standard_D3"
                            },
                            "osProfile": {
                                "linuxOperatingSystemProfile": {
                                    "username": "[parameters('sshUserName')]",
                                    "password": "[parameters('sshPassword')]"
                                }
                            }
                        }]
                    }
                }
            }],
            "outputs": {
                "cluster": {
                    "type": "object",
                    "value": "[reference(resourceId('Microsoft.HDInsight/clusters',parameters('clusterName')))]"
                }
            }
        },
        "mode": "incremental",
        "Parameters": {
            "clusterName": {
                "value": "newclustername"
            },
            "clusterType": {
                "value": "hadoop"
            },
            "clusterStorageAccountName": {
                "value": "newstoragename"
            },
            "clusterLoginUserName": {
                "value": "admin"
            },
            "clusterLoginPassword": {
                "value": "changeme"
            },
            "sshUserName": {
                "value": "sshuser"
            },
            "sshPassword": {
                "value": "changeme"
            }
        }
    }
}

Questo esempio viene usato nei passaggi di questo documento.This example is used in the steps in this document. Sostituire i valori di esempio nella sezione Parametri con i valori relativi al cluster in uso.Replace the example values in the Parameters section with the values for your cluster.

Importante

Il modello usa il numero di nodi di lavoro predefinito (4) per un cluster HDInsight.The template uses the default number of worker nodes (4) for an HDInsight cluster. Se si prevedono più di 32 nodi di lavoro, è necessario selezionare una dimensione del nodo head con almeno 8 core e 14 GB di RAM.If you plan on more than 32 worker nodes, then you must select a head node size with at least 8 cores and 14-GB ram.

Per altre informazioni sulle dimensioni di nodo e i costi associati, vedere Prezzi di HDInsight.For more information on node sizes and associated costs, see HDInsight pricing.

Accedere alla sottoscrizione di AzureLog in to your Azure subscription

Seguire i passaggi illustrati Introduzione all'interfaccia della riga di comando di Azure 2.0 e connettersi alla sottoscrizione tramite il comando az login.Follow the steps documented in Get started with Azure CLI 2.0 and connect to your subscription using the az login command.

Creare un'entità servizioCreate a service principal

Nota

Questa procedura costituisce una sintesi della sezione Creare un'entità servizio con password dell'articolo Usare l'interfaccia della riga di comando di Azure per creare un'entità servizio per accedere alle risorse.These steps are an abridged version of the Create service principal with password section of the Use Azure CLI to create a service principal to access resources document. Con questi passaggi viene creata un'entità servizio usata per autenticare l'API REST di Azure.These steps create a service principal that is used to authenticate to the Azure REST API.

  1. Dalla riga di comando, usare il comando seguente per elencare le sottoscrizioni di Azure.From a command line, use the following command to list your Azure subscriptions.

    az account list --query '[].{Subscription_ID:id,Tenant_ID:tenantId,Name:name}'  --output table
    

    Nell'elenco selezionare la sottoscrizione che si vuole usare e annotare i valori nelle colonne Subscription_ID e Tenant_ID.In the list, select the subscription that you want to use and note the Subscription_ID and Tenant_ID columns. Salvare questi valori.Save these values.

  2. Eseguire i comandi seguenti per creare un'applicazione in Azure Active Directory.Use the following command to create an application in Azure Active Directory.

    az ad app create --display-name "exampleapp" --homepage "https://www.contoso.org" --identifier-uris "https://www.contoso.org/example" --password <Your password> --query 'appId'
    

    Sostituire i valori di --display-name, --homepage e --identifier-uris con valori personalizzati.Replace the values for the --display-name, --homepage, and --identifier-uris with your own values. Specificare una password per la nuova voce di Active Directory.Provide a password for the new Active Directory entry.

    Nota

    I valori --home-page e --identifier-uris non devono fare riferimento a una pagina Web reale ospitata in Internet.The --home-page and --identifier-uris values don't need to reference an actual web page hosted on the internet. Devono essere URI univoci.They must be unique URIs.

    Il valore restituito da questo comando è l'ID app per la nuova applicazione.The value returned from this command is the App ID for the new application. Salvare il valore.Save this value.

  3. Eseguire il comando seguente per creare un'entità servizio mediante l'ID app.Use the following command to create a service principal using the App ID.

    az ad sp create --id <App ID> --query 'objectId'
    

    Il valore restituito da questo comando è l'ID oggetto.The value returned from this command is the Object ID. Salvare il valore.Save this value.

  4. Assegnare il ruolo Owner all'entità servizio usando il valore ID oggetto precedentemente restituito.Assign the Owner role to the service principal using the Object ID value. Usare anche l'ID sottoscrizione ottenuto in precedenza.Use the subscription ID you obtained earlier.

    az role assignment create --assignee <Object ID> --role Owner --scope /subscriptions/<Subscription ID>/
    

Ottenere un token di autenticazioneGet an authentication token

Usare il comando seguente per recuperare un token di autenticazione:Use the following command to retrieve an authentication token:

curl -X "POST" "https://login.microsoftonline.com/$TENANTID/oauth2/token" \
-H "Cookie: flight-uxoptin=true; stsservicecookie=ests; x-ms-gateway-slice=productionb; stsservicecookie=ests" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "client_id=$APPID" \
--data-urlencode "grant_type=client_credentials" \
--data-urlencode "client_secret=$PASSWORD" \
--data-urlencode "resource=https://management.azure.com/"

Impostare $TENANTID, $APPID e $PASSWORD per i valori ottenuti o usati in precedenza.Set $TENANTID, $APPID, and $PASSWORD to the values obtained or used previously.

Se la richiesta ha esito positivo, si riceve una risposta serie 200 e il corpo della risposta contiene un documento JSON.If this request is successful, you receive a 200 series response and the response body contains a JSON document.

Il documento JSON restituito da questa richiesta contiene un elemento denominato access_token.The JSON document returned by this request contains an element named access_token. Il valore di access_token viene usato per le richieste di autenticazione all'API REST.The value of access_token is used to authentication requests to the REST API.

{
    "token_type":"Bearer",
    "expires_in":"3599",
    "expires_on":"1463409994",
    "not_before":"1463406094",
    "resource":"https://management.azure.com/","access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWoNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuYXp1cmUuY29tLyIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzcyZjk4OGJmLTg2ZjEtNDFhZi05MWFiLTJkN2NkMDExZGI2Ny8iLCJpYXQiOjE0NjM0MDYwOTQsIm5iZiI6MTQ2MzQwNjA5NCwiZXhwIjoxNDYzNDA5OTk5LCJhcHBpZCI6IjBlYzcyMzM0LTZkMDMtNDhmYi04OWU1LTU2NTJiODBiZDliYiIsImFwcGlkYWNyIjoiMSIsImlkcCI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzcyZjk4OGJmLTg2ZjEtNDFhZi05MWFiLTJkN2NkMDExZGI0Ny8iLCJvaWQiOiJlNjgxZTZiMi1mZThkLTRkZGUtYjZiMS0xNjAyZDQyNWQzOWYiLCJzdWIiOiJlNjgxZTZiMi1mZThkLTRkZGUtYjZiMS0xNjAyZDQyNWQzOWYiLCJ0aWQiOiI3MmY5ODhiZi04NmYxLTQxYWYtOTFhYi0yZDdjZDAxMWRiNDciLCJ2ZXIiOiIxLjAifQ.nJVERbeDHLGHn7ZsbVGBJyHOu2PYhG5dji6F63gu8XN2Cvol3J1HO1uB4H3nCSt9DTu_jMHqAur_NNyobgNM21GojbEZAvd0I9NY0UDumBEvDZfMKneqp7a_cgAU7IYRcTPneSxbD6wo-8gIgfN9KDql98b0uEzixIVIWra2Q1bUUYETYqyaJNdS4RUmlJKNNpENllAyHQLv7hXnap1IuzP-f5CNIbbj9UgXxLiOtW5JhUAwWLZ3-WMhNRpUO2SIB7W7tQ0AbjXw3aUYr7el066J51z5tC1AK9UC-mD_fO_HUP6ZmPzu5gLA6DxkIIYP3grPnRVoUDltHQvwgONDOw"
}

Creare un gruppo di risorseCreate a resource group

Per creare un gruppo di risorse, seguire questa procedura.Use the following to create a resource group.

  • Impostare $SUBSCRIPTIONID sull'ID sottoscrizione ricevuto durante la creazione dell'entità servizio.Set $SUBSCRIPTIONID to the subscription ID received while creating the service principal.
  • Impostare $ACCESSTOKEN sul token di accesso ricevuto nel passaggio precedente.Set $ACCESSTOKEN to the access token received in the previous step.
  • Sostituire DATACENTERLOCATION con il data center in cui si vuole creare il gruppo di risorse e le risorse.Replace DATACENTERLOCATION with the data center you wish to create the resource group, and resources, in. Ad esempio "Stati Uniti centrali del sud".For example, 'South Central US'.
  • Impostare $RESOURCEGROUPNAME sul nome che si vuole usare per questo gruppo:Set $RESOURCEGROUPNAME to the name you wish to use for this group:
curl -X "PUT" "https://management.azure.com/subscriptions/$SUBSCRIPTIONID/resourcegroups/$RESOURCEGROUPNAME?api-version=2015-01-01" \
    -H "Authorization: Bearer $ACCESSTOKEN" \
    -H "Content-Type: application/json" \
    -d $'{
"location": "DATACENTERLOCATION"
}'

Se la richiesta ha esito positivo, si riceve una risposta serie 200 e il corpo della risposta contiene un documento JSON che include le informazioni del gruppo.If this request is successful, you receive a 200 series response and the response body contains a JSON document containing information about the group. L'elemento "provisioningState" contiene un valore di "Succeeded".The "provisioningState" element contains a value of "Succeeded".

Creare una distribuzioneCreate a deployment

Usare il comando seguente per distribuire il modello nel gruppo di risorse.Use the following command to deploy the template to the resource group.

  • Impostare $DEPLOYMENTNAME sul nome che si vuole usare per questa distribuzione.Set $DEPLOYMENTNAME to the name you wish to use for this deployment.
curl -X "PUT" "https://management.azure.com/subscriptions/$SUBSCRIPTIONID/resourcegroups/$RESOURCEGROUPNAME/providers/microsoft.resources/deployments/$DEPLOYMENTNAME?api-version=2015-01-01" \
-H "Authorization: Bearer $ACCESSTOKEN" \
-H "Content-Type: application/json" \
-d "{set your body string to the template and parameters}"

Nota

Se il modello è stato salvato in un file, è possibile usare il comando seguente invece di -d "{ template and parameters}":If you saved the template to a file, you can use the following command instead of -d "{ template and parameters}":

--data-binary "@/path/to/file.json"

Se la richiesta ha esito positivo, si riceve una risposta serie 200 e il corpo della risposta contiene un documento JSON che include le informazioni dell'operazione di distribuzione.If this request is successful, you receive a 200 series response and the response body contains a JSON document containing information about the deployment operation.

Importante

La distribuzione è stata inviata, ma non è stata completata.The deployment has been submitted, but has not completed. Possono essere necessari diversi minuti, in genere circa 15, per completare la distribuzione.It can take several minutes, usually around 15, for the deployment to complete.

Controllare lo stato di una distribuzioneCheck the status of a deployment

Per verificare lo stato della distribuzione, usare il comando seguente:To check the status of the deployment, use the following command:

curl -X "GET" "https://management.azure.com/subscriptions/$SUBSCRIPTIONID/resourcegroups/$RESOURCEGROUPNAME/providers/microsoft.resources/deployments/$DEPLOYMENTNAME?api-version=2015-01-01" \
-H "Authorization: Bearer $ACCESSTOKEN" \
-H "Content-Type: application/json"

Questo comando restituisce un documento JSON che contiene informazioni sull'operazione di distribuzione.This command returns a JSON document containing information about the deployment operation. L'elemento "provisioningState" contiene lo stato della distribuzione.The "provisioningState" element contains the status of the deployment. Se questo elemento contiene un valore di "Succeeded", la distribuzione è stata completata.If this element contains a value of "Succeeded", then the deployment has completed successfully.

Risoluzione dei problemiTroubleshoot

Se si verificano problemi di creazione dei cluster HDInsight, vedere i requisiti dei controlli di accesso.If you run into issues with creating HDInsight clusters, see access control requirements.

Passaggi successiviNext steps

Dopo aver creato un cluster HDInsight, usare le informazioni seguenti per acquisire familiarità con il cluster.Now that you have successfully created an HDInsight cluster, use the following to learn how to work with your cluster.

Cluster HadoopHadoop clusters

Cluster HBaseHBase clusters

Cluster StormStorm clusters