Apache Hadoop-clusters maken met behulp van de Azure REST API

Meer informatie over het maken van een HDInsight-cluster met behulp van een Azure Resource Manager-sjabloon en de Azure REST API.

Met de Azure REST API kunt u beheerbewerkingen uitvoeren op services die worden gehost op het Azure-platform, inclusief het maken van nieuwe resources, zoals HDInsight-clusters.

Notitie

In de stappen in dit document wordt het hulpprogramma curl (https://curl.haxx.se/) hulpprogramma) gebruikt om te communiceren met de Azure REST API.

Een sjabloon maken

Azure Resource Manager-sjablonen zijn JSON-documenten die een resourcegroep en alle resources hierin beschrijven (zoals HDInsight.) Met deze op sjablonen gebaseerde benadering kunt u de resources definiëren die u nodig hebt voor HDInsight in één sjabloon.

Het volgende JSON-document is een fusie van de sjabloon- en parametersbestanden van https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.hdinsight/hdinsight-linux-ssh-password/azuredeploy.jsonwaaruit een Linux-cluster wordt gemaakt met behulp van een wachtwoord om het SSH-gebruikersaccount te beveiligen.

{
    "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",
                    "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"
            }
        }
    }
}

Dit voorbeeld wordt gebruikt in de stappen in dit document. Vervang de voorbeeldwaarden in de sectie Parameters door de waarden voor uw cluster.

Belangrijk

De sjabloon gebruikt het standaardaantal werkknooppunten (4) voor een HDInsight-cluster. Als u meer dan 32 werkknooppunten plant, moet u een hoofdknooppuntgrootte met ten minste 8 kernen en 14 GB ram selecteren.

Zie Prijsdetails voor Azure HDInsight voor meer informatie over knooppuntgrootten en de bijbehorende kosten.

Aanmelden bij uw Azure-abonnement

Volg de stappen die worden beschreven in Aan de slag met Azure CLI en maak verbinding met uw abonnement met behulp van de az login opdracht.

Een service-principal maken

Notitie

Deze stappen zijn een verkorte versie van de sectie Service-principal maken met een wachtwoord van azure CLI gebruiken om een service-principal te maken voor toegang tot het document met resources . Met deze stappen maakt u een service-principal die wordt gebruikt voor verificatie bij de Azure REST API.

  1. Gebruik vanaf een opdrachtregel de volgende opdracht om uw Azure-abonnementen weer te geven.

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

    Selecteer in de lijst het abonnement dat u wilt gebruiken en noteer de Subscription_ID en Tenant_ID kolommen. Sla deze waarden op.

  2. Gebruik de volgende opdracht om een toepassing te maken in Microsoft Entra ID.

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

    Vervang de waarden voor de --display-name, --homepageen --identifier-uris door uw eigen waarden. Geef een wachtwoord op voor de nieuwe Active Directory-vermelding.

    Notitie

    De --home-page waarden en --identifier-uris waarden hoeven niet te verwijzen naar een werkelijke webpagina die wordt gehost op internet. Ze moeten unieke URI's zijn.

    De waarde die door deze opdracht wordt geretourneerd, is de app-id voor de nieuwe toepassing. Sla deze waarde op.

  3. Gebruik de volgende opdracht om een service-principal te maken met behulp van de app-id.

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

    De waarde die door deze opdracht wordt geretourneerd, is de object-id. Sla deze waarde op.

  4. Wijs de rol Eigenaar toe aan de service-principal met behulp van de waarde object-id . Gebruik de abonnements-id die u eerder hebt verkregen.

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

Een verificatietoken ophalen

Gebruik de volgende opdracht om een verificatietoken op te halen:

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/"

Stel $TENANTID, $APPIDen $PASSWORD in op de waarden die u eerder hebt verkregen of gebruikt.

Als deze aanvraag is geslaagd, ontvangt u een antwoord van 200 reeksen en bevat de hoofdtekst van het antwoord een JSON-document.

Het JSON-document dat door deze aanvraag wordt geretourneerd, bevat een element met de naam access_token. De waarde van access_token wordt gebruikt voor verificatieaanvragen voor de 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"
}

Een brongroep maken

Gebruik het volgende om een resourcegroep te maken.

  • Ingesteld $SUBSCRIPTIONID op de abonnements-id die is ontvangen tijdens het maken van de service-principal.
  • Ingesteld $ACCESSTOKEN op het toegangstoken dat in de vorige stap is ontvangen.
  • Vervang DATACENTERLOCATION door het datacenter waarin u de resourcegroep en resources wilt maken. Bijvoorbeeld 'VS - zuid-centraal'.
  • Stel $RESOURCEGROUPNAME in op de naam die u voor deze groep wilt gebruiken:
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"
}'

Als deze aanvraag is geslaagd, ontvangt u een antwoord van 200 reeksen en bevat de hoofdtekst van het antwoord een JSON-document met informatie over de groep. Het "provisioningState" element bevat een waarde van "Succeeded".

Een implementatie maken

Gebruik de volgende opdracht om de sjabloon te implementeren in de resourcegroep.

  • Stel $DEPLOYMENTNAME deze optie in op de naam die u voor deze implementatie wilt gebruiken.
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}"

Notitie

Als u de sjabloon hebt opgeslagen in een bestand, kunt u de volgende opdracht gebruiken in plaats van -d "{ template and parameters}":

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

Als deze aanvraag is geslaagd, ontvangt u een antwoord uit de 200-serie en bevat de antwoordtekst een JSON-document met informatie over de implementatiebewerking.

Belangrijk

De implementatie is verzonden, maar is niet voltooid. Het kan enkele minuten duren, meestal ongeveer 15, voordat de implementatie is voltooid.

De status van een implementatie controleren

Gebruik de volgende opdracht om de status van de implementatie te controleren:

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"

Met deze opdracht wordt een JSON-document geretourneerd met informatie over de implementatiebewerking. Het "provisioningState" element bevat de status van de implementatie. Als dit element een waarde bevat, "Succeeded"is de implementatie voltooid.

Problemen oplossen

Zie Vereisten voor toegangsbeheer als u problemen ondervindt met het maken van HDInsight-clusters.

Volgende stappen

Nu u een HDInsight-cluster hebt gemaakt, gebruikt u het volgende om te leren hoe u met uw cluster kunt werken.

Apache Hadoop-clusters

Apache HBase-clusters