Erstellen von Apache Hadoop-Clustern mithilfe der Azure-REST-APICreate Apache Hadoop clusters using the Azure REST API

Erfahren Sie, wie Sie einen HDInsight-Cluster mit einer Azure Resource Manager-Vorlage und der Azure-REST-API erstellen.Learn how to create an HDInsight cluster using an Azure Resource Manager template and the Azure REST API.

Mit der Azure-REST-API können Sie Verwaltungsvorgänge für Dienste durchführen, die auf der Azure-Plattform gehostet werden. Beispielsweise können Sie neue Ressourcen wie etwa HDInsight-Cluster erstellen.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.

Hinweis

Bei den Schritten in diesem Dokument wird das Hilfsprogramm curl (https://curl.haxx.se/)) für die Kommunikation mit der Azure-REST-API verwendet.The steps in this document use the curl (https://curl.haxx.se/) utility to communicate with the Azure REST API.

Erstellen einer VorlageCreate a template

Bei Azure Resource Manager-Vorlagen handelt es sich um JSON-Dokumente, mit denen eine Ressourcengruppe und alle darin enthaltenen Ressourcen (z.B. HDInsight) beschrieben werden. Diese vorlagenbasierte Vorgehensweise ermöglicht Ihnen, die Ressourcen zu definieren, die Sie für HDInsight in einer Vorlage benötigen.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.

Das folgende JSON-Dokument ist eine Kombination aus den Vorlagen- und Parameterdateien von https://github.com/Azure/azure-quickstart-templates/tree/master/101-hdinsight-linux-ssh-password. Damit wird ein Linux-basierter Cluster erstellt, bei dem das SSH-Benutzerkonto durch ein Kennwort geschützt ist.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": "{}" 
                            },
                            "osProfile": {
                                "linuxOperatingSystemProfile": {
                                    "username": "[parameters('sshUserName')]",
                                    "password": "[parameters('sshPassword')]"
                                }
                            }
                        },
                        {
                            "name": "workernode",
                            "targetInstanceCount": "[parameters('clusterWorkerNodeCount')]",
                            "hardwareProfile": {
                                "vmSize": "{}"
                            },
                            "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"
            }
        }
    }
}

Dieses Beispiel wird in den Schritten im vorliegenden Dokument verwendet.This example is used in the steps in this document. Ersetzen Sie die value-Beispiele im Abschnitt Parameters mit den Werten für Ihren Cluster.Replace the example values in the Parameters section with the values for your cluster.

Wichtig

Bei dieser Vorlage wird die Standardanzahl von Workerknoten (4) für einen HDInsight-Cluster verwendet.The template uses the default number of worker nodes (4) for an HDInsight cluster. Wenn Sie mehr als 32 Workerknoten planen, müssen Sie eine Hauptknotengröße von mindestens 8 Kernen und 14 GB Arbeitsspeicher (RAM) auswählen.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.

Weitere Informationen zu Knotengrößen und den damit verbundenen Kosten finden Sie unter HDInsight – Preise.For more information on node sizes and associated costs, see HDInsight pricing.

Melden Sie sich bei Ihrem Azure-Abonnement an.Sign in to your Azure subscription

Führen Sie die in Erste Schritte mit der Azure CLI dokumentierten Schritte aus, und stellen Sie mithilfe des Befehls az login eine Verbindung mit Ihrem Abonnement her.Follow the steps documented in Get started with Azure CLI and connect to your subscription using the az login command.

Erstellen eines DienstprinzipalsCreate a service principal

Hinweis

Diese Schritte stellen eine verkürzte Version des Abschnitts Erstellen eines Dienstprinzipals mit Kennwort des Dokuments Erstellen eines Dienstprinzipals für den Zugriff auf Ressourcen mithilfe von Azure PowerShell dar.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. Mit diesen Schritten wird ein Dienstprinzipal erstellt, der verwendet wird, um die Azure-REST-API zu authentifizieren.These steps create a service principal that is used to authenticate to the Azure REST API.

  1. Führen Sie an einer Befehlszeile den folgenden Befehl aus, um Ihre Azure-Abonnements aufzulisten.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
    

    Wählen Sie in der Liste das Abonnement aus, das Sie verwenden möchten, und notieren Sie sich die Werte in den Spalten Subscription_ID und Tenant_ID.In the list, select the subscription that you want to use and note the Subscription_ID and Tenant_ID columns. Speichern Sie diese Werte.Save these values.

  2. Führen Sie den folgenden Befehl zum Erstellen einer Anwendung in Azure Active Directory aus.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'
    

    Ersetzen Sie die Werte für --display-name, --homepage und --identifier-uris durch Ihre eigenen Werte.Replace the values for the --display-name, --homepage, and --identifier-uris with your own values. Geben Sie ein Kennwort für den neuen Active Directory-Eintrag an.Provide a password for the new Active Directory entry.

    Hinweis

    Die Werte --home-page und --identifier-uris müssen nicht auf eine tatsächlich im Internet gehostete Webseite verweisen.The --home-page and --identifier-uris values don't need to reference an actual web page hosted on the internet. Sie müssen eindeutige URIs sein.They must be unique URIs.

    Der von diesem Befehl zurückgegebene Wert ist die App-ID für die neue Anwendung.The value returned from this command is the App ID for the new application. Speichern Sie diesen Wert.Save this value.

  3. Führen Sie den folgenden Befehl aus, um mithilfe der App-ID einen Dienstprinzipal zu erstellen.Use the following command to create a service principal using the App ID.

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

    Der von diesem Befehl zurückgegebene Wert ist die Objekt-ID.The value returned from this command is the Object ID. Speichern Sie diesen Wert.Save this value.

  4. Weisen Sie dem Dienstprinzipal mit dem Objekt-ID-Wert die Rolle Besitzer zu.Assign the Owner role to the service principal using the Object ID value. Verwenden Sie die Abonnement-ID, die Sie zuvor erhalten haben.Use the subscription ID you obtained earlier.

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

Abrufen eines AuthentifizierungstokensGet an authentication token

Führen Sie den folgenden Befehl aus, um ein Authentifizierungstoken abzurufen: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/"

Legen Sie $TENANTID, $APPID und $PASSWORD auf die zuvor abgerufenen oder verwendeten Werte fest.Set $TENANTID, $APPID, and $PASSWORD to the values obtained or used previously.

Wenn die Anforderung erfolgreich ist, erhalten Sie eine 2xx-Antwort, deren Text ein JSON-Dokument enthält.If this request is successful, you receive a 200 series response and the response body contains a JSON document.

Das von dieser Anforderung zurückgegebene JSON-Dokument enthält ein Element mit dem Namen access_token.The JSON document returned by this request contains an element named access_token. Der Wert von access_token wird verwendet, um Anforderungen an die REST-API zu authentifizieren.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"
}

Erstellen einer RessourcengruppeCreate a resource group

Gehen Sie wie folgt vor, um eine Ressourcengruppe zu erstellen.Use the following to create a resource group.

  • Legen Sie $SUBSCRIPTIONID auf die Abonnement-ID fest, die Sie während der Erstellung des Dienstprinzipals erhalten haben.Set $SUBSCRIPTIONID to the subscription ID received while creating the service principal.
  • Legen Sie$ACCESSTOKEN auf das Zugriffstoken fest, das Sie im vorherigen Schritt erhalten haben.Set $ACCESSTOKEN to the access token received in the previous step.
  • Ersetzen Sie DATACENTERLOCATION durch das Rechenzentrum, in dem Sie die Ressourcengruppe und die Ressourcen erstellen möchten.Replace DATACENTERLOCATION with the data center you wish to create the resource group, and resources, in. Beispiel: "USA, Mitte/Süden".For example, 'South Central US'.
  • Legen Sie $RESOURCEGROUPNAME auf den Namen fest, den Sie für diese Gruppe verwenden möchten: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"
}'

Wenn die Anforderung erfolgreich ist, erhalten Sie eine 2xx-Antwort, deren Text ein JSON-Dokument mit Informationen zur Gruppe enthält.If this request is successful, you receive a 200 series response and the response body contains a JSON document containing information about the group. Das Element "provisioningState" enthält den Wert "Succeeded".The "provisioningState" element contains a value of "Succeeded".

Erstellen einer BereitstellungCreate a deployment

Stellen Sie mit dem folgenden Befehl die Vorlage für die Ressourcengruppe bereit.Use the following command to deploy the template to the resource group.

  • Legen Sie $DEPLOYMENTNAME auf den Namen fest, den Sie für diese Bereitstellung verwenden möchten.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}"

Hinweis

Wenn Sie die Vorlage in einer Datei gespeichert haben, können Sie anstelle von -d "{ template and parameters}" den folgenden Befehl verwenden: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"

Wenn die Anforderung erfolgreich ist, erhalten Sie eine 2xx-Antwort, deren Text ein JSON-Dokument mit Informationen zum Bereitstellungsvorgang enthält.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.

Wichtig

Die Bereitstellung war bereits übermittelt, aber noch nicht abgeschlossen.The deployment has been submitted, but has not completed. Es kann mehrere Minuten dauern (in der Regel etwa 15), bis die Bereitstellung abgeschlossen ist.It can take several minutes, usually around 15, for the deployment to complete.

Überprüfen des BereitstellungsstatusCheck the status of a deployment

Verwenden Sie den folgenden Befehl, um den Status der Bereitstellung zu prüfen: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"

Dieser Befehl gibt ein JSON-Dokument mit Informationen zum Bereitstellungsvorgang zurück.This command returns a JSON document containing information about the deployment operation. Das Element "provisioningState" enthält den Status der Bereitstellung.The "provisioningState" element contains the status of the deployment. Wenn dieses Element den Wert "Succeeded" aufweist, wurde die Bereitstellung erfolgreich abgeschlossen.If this element contains a value of "Succeeded", then the deployment has completed successfully.

ProblembehandlungTroubleshoot

Falls beim Erstellen von HDInsight-Clustern Probleme auftreten, sehen Sie sich die Voraussetzungen für die Zugriffssteuerung an.If you run into issues with creating HDInsight clusters, see access control requirements.

Nächste SchritteNext steps

Nachdem Sie einen HDInsight-Cluster erfolgreich erstellt haben, nutzen Sie die folgenden Informationen, um zu erfahren, wie Sie mit Ihrem Cluster arbeiten.Now that you've successfully created an HDInsight cluster, use the following to learn how to work with your cluster.

Apache Hadoop-ClusterApache Hadoop clusters

Apache HBase ClusterApache HBase clusters

Apache Storm-ClusterApache Storm clusters