Skapa Apache Hadoop-kluster med hjälp av Azure REST API

Lär dig hur du skapar ett HDInsight-kluster med hjälp av en Azure Resource Manager-mall och Azure REST API.

Med Azure REST API kan du utföra hanteringsåtgärder på tjänster som finns på Azure-plattformen, inklusive skapandet av nya resurser, till exempel HDInsight-kluster.

Kommentar

Stegen i det här dokumentet använder verktyget curl (https://curl.haxx.se/) för att kommunicera med Azure REST API.

Skapa en mall

Azure Resource Manager-mallar är JSON-dokument som beskriver en resursgrupp och alla resurser i den (till exempel HDInsight.) Med den här mallbaserade metoden kan du definiera de resurser som du behöver för HDInsight i en mall.

Följande JSON-dokument är en sammanslagning av mallen och parametrarna från https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.hdinsight/hdinsight-linux-ssh-password/azuredeploy.json, som skapar ett Linux-baserat kluster med ett lösenord för att skydda SSH-användarkontot.

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

Det här exemplet används i stegen i det här dokumentet. Ersätt exempelvärdena i avsnittet Parametrar med värdena för klustret.

Viktigt!

Mallen använder standardantalet arbetsnoder (4) för ett HDInsight-kluster. Om du planerar på fler än 32 arbetsnoder måste du välja en huvudnodstorlek med minst 8 kärnor och 14 GB RAM-minne.

Mer information om nodstorlekar och relaterade kostnader finns i HDInsight-prissättning.

Logga in till din Azure-prenumeration

Följ stegen som beskrivs i Kom igång med Azure CLI och anslut till din prenumeration med hjälp av az login kommandot .

Skapa ett huvudnamn för tjänsten

Kommentar

De här stegen är en förkortad version av avsnittet Skapa tjänstens huvudnamn med lösenord i dokumentet Använd Azure CLI för att skapa ett huvudnamn för tjänsten för att komma åt resurser . De här stegen skapar ett huvudnamn för tjänsten som används för att autentisera till Azure REST API.

  1. Från en kommandorad använder du följande kommando för att visa en lista över dina Azure-prenumerationer.

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

    I listan väljer du den prenumeration som du vill använda och noterar kolumnerna Subscription_ID och Tenant_ID . Spara dessa värden.

  2. Använd följande kommando för att skapa ett program i 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'
    

    Ersätt värdena för --display-name, --homepageoch --identifier-uris med dina egna värden. Ange ett lösenord för den nya Active Directory-posten.

    Kommentar

    Värdena --home-page och --identifier-uris behöver inte referera till en faktisk webbsida som finns på Internet. De måste vara unika URI:er.

    Värdet som returneras från det här kommandot är app-ID :t för det nya programmet. Spara det här värdet.

  3. Använd följande kommando för att skapa ett huvudnamn för tjänsten med hjälp av app-ID:t.

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

    Värdet som returneras från det här kommandot är objekt-ID :t. Spara det här värdet.

  4. Tilldela rollen Ägare till tjänstens huvudnamn med hjälp av objekt-ID-värdet. Använd prenumerations-ID :t som du fick tidigare.

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

Hämta en autentiseringstoken

Använd följande kommando för att hämta en autentiseringstoken:

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

Ange $TENANTID, $APPIDoch $PASSWORD till de värden som erhållits eller använts tidigare.

Om den här begäran lyckas får du ett svar i 200-serien och svarstexten innehåller ett JSON-dokument.

JSON-dokumentet som returneras av den här begäran innehåller ett element med namnet access_token. Värdet för access_token används för autentiseringsbegäranden till REST-API:et.

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

Skapa en resursgrupp

Använd följande för att skapa en resursgrupp.

  • Ange $SUBSCRIPTIONID det prenumerations-ID som togs emot när tjänstens huvudnamn skapades.
  • Ange $ACCESSTOKEN åtkomsttoken som togs emot i föregående steg.
  • Ersätt DATACENTERLOCATION med det datacenter som du vill skapa resursgruppen och resurserna i. Till exempel "USA, södra centrala".
  • Ange $RESOURCEGROUPNAME det namn som du vill använda för den här gruppen:
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"
}'

Om den här begäran lyckas får du ett svar i 200-serien och svarstexten innehåller ett JSON-dokument som innehåller information om gruppen. Elementet "provisioningState" innehåller värdet "Succeeded".

Skapa en distribution

Använd följande kommando för att distribuera mallen till resursgruppen.

  • Ange $DEPLOYMENTNAME det namn som du vill använda för den här distributionen.
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}"

Kommentar

Om du har sparat mallen i en fil kan du använda följande kommando i stället -d "{ template and parameters}"för :

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

Om den här begäran lyckas får du ett svar i 200-serien och svarstexten innehåller ett JSON-dokument som innehåller information om distributionsåtgärden.

Viktigt!

Distributionen har skickats men har inte slutförts. Det kan ta flera minuter, vanligtvis runt 15, för distributionen att slutföras.

Kontrollera status för en distribution

Om du vill kontrollera distributionens status använder du följande kommando:

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"

Det här kommandot returnerar ett JSON-dokument som innehåller information om distributionsåtgärden. Elementet "provisioningState" innehåller status för distributionen. Om det här elementet innehåller värdet "Succeeded"har distributionen slutförts.

Felsöka

Om du får problem med att skapa HDInsight-kluster läser du åtkomstkontrollkrav.

Nästa steg

Nu när du har skapat ett HDInsight-kluster använder du följande för att lära dig hur du arbetar med klustret.

Apache Hadoop-kluster

Apache HBase-kluster