Vytváření clusterů Apache Hadoop pomocí rozhraní Azure REST API

Zjistěte, jak vytvořit cluster HDInsight pomocí šablony Azure Resource Manageru a rozhraní Azure REST API.

Rozhraní Azure REST API umožňuje provádět operace správy na službách hostovaných na platformě Azure, včetně vytváření nových prostředků, jako jsou clustery HDInsight.

Poznámka:

Kroky v tomto dokumentu používají nástroj curl (https://curl.haxx.se/) ke komunikaci s rozhraním Azure REST API.

Vytvořit šablonu

Šablony Azure Resource Manageru jsou dokumenty JSON, které popisují skupinu prostředků a všechny prostředky v ní (například HDInsight.) Tento přístup založený na šabloně umožňuje definovat prostředky, které potřebujete pro HDInsight, v jedné šabloně.

Následující dokument JSON je sloučením souborů šablony a parametrů, ze https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.hdinsight/hdinsight-linux-ssh-password/azuredeploy.jsonkterých se vytvoří cluster založený na Linuxu pomocí hesla pro zabezpečení uživatelského účtu SSH.

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

Tento příklad se používá v krocích v tomto dokumentu. Nahraďte ukázkové hodnoty v části Parametry hodnotami pro váš cluster.

Důležité

Šablona používá výchozí počet pracovních uzlů (4) pro cluster HDInsight. Pokud plánujete více než 32 pracovních uzlů, musíte vybrat velikost hlavního uzlu s alespoň 8 jádry a 14 GB ram.

Další informace o velikostech uzlů a souvisejících nákladech najdete v cenách pro HDInsight.

Přihlaste se ke svému předplatnému Azure.

Postupujte podle kroků popsaných v tématu Začínáme s Azure CLI a připojte se k předplatnému az login pomocí příkazu.

Vytvoření instančního objektu služby

Poznámka:

Tyto kroky představují zkrácenou verzi vytvoření instančního objektu s heslem v rozhraní příkazového řádku Azure k vytvoření instančního objektu pro přístup k dokumentu prostředků. Tento postup vytvoří instanční objekt, který se použije k ověření v rozhraní Azure REST API.

  1. Z příkazového řádku pomocí následujícího příkazu zobrazte seznam předplatných Azure.

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

    V seznamu vyberte předplatné, které chcete použít, a poznamenejte si Subscription_ID a Tenant_ID sloupce. Uložte tyto hodnoty.

  2. Pomocí následujícího příkazu vytvořte aplikaci v 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'
    

    Nahraďte hodnoty pro --display-name, --homepagea --identifier-uris vlastními hodnotami. Zadejte heslo pro novou položku služby Active Directory.

    Poznámka:

    Hodnoty --home-page--identifier-uris a hodnoty nemusí odkazovat na skutečnou webovou stránku hostované na internetu. Musí to být jedinečné identifikátory URI.

    Hodnota vrácená tímto příkazem je ID aplikace pro novou aplikaci. Uložte tuto hodnotu.

  3. Pomocí následujícího příkazu vytvořte instanční objekt pomocí ID aplikace.

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

    Hodnota vrácená tímto příkazem je ID objektu. Uložte tuto hodnotu.

  4. Přiřaďte k instančnímu objektu roli Vlastník pomocí hodnoty ID objektu. Použijte ID předplatného, které jste získali dříve.

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

Získání ověřovacího tokenu

K načtení ověřovacího tokenu použijte následující příkaz:

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

Nastavte $TENANTID, $APPIDa $PASSWORD na hodnoty získané nebo použité dříve.

Pokud je tento požadavek úspěšný, obdržíte odpověď 200 řad a text odpovědi obsahuje dokument JSON.

Dokument JSON vrácený tímto požadavkem obsahuje element s názvem access_token. Hodnota access_token se používá k ověřování požadavků na rozhraní 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"
}

Vytvoření skupiny zdrojů

Pomocí následujícího příkazu vytvořte skupinu prostředků.

  • Při vytváření instančního objektu nastavte $SUBSCRIPTIONID na ID předplatného.
  • Nastavte $ACCESSTOKEN přístupový token přijatý v předchozím kroku.
  • Nahraďte DATACENTERLOCATION datovým centrem, ve které chcete vytvořit skupinu prostředků a prostředky. Například USA – středojižní.
  • Nastavte $RESOURCEGROUPNAME název, který chcete použít pro tuto skupinu:
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"
}'

Pokud je tento požadavek úspěšný, obdržíte odpověď 200 řad a text odpovědi obsahuje dokument JSON obsahující informace o skupině. Prvek "provisioningState" obsahuje hodnotu "Succeeded".

Vytvoření nasazení

Pomocí následujícího příkazu nasaďte šablonu do skupiny prostředků.

  • Nastavte $DEPLOYMENTNAME na název, který chcete použít pro toto nasazení.
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}"

Poznámka:

Pokud jste šablonu uložili do souboru, můžete místo toho použít následující příkaz -d "{ template and parameters}":

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

Pokud je tento požadavek úspěšný, obdržíte odpověď 200 řad a text odpovědi obsahuje dokument JSON obsahující informace o operaci nasazení.

Důležité

Nasazení bylo odesláno, ale nedokončilo se. Dokončení nasazení může trvat několik minut, obvykle přibližně 15.

Kontrola stavu nasazení

Pokud chcete zkontrolovat stav nasazení, použijte následující příkaz:

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"

Tento příkaz vrátí dokument JSON obsahující informace o operaci nasazení. Prvek "provisioningState" obsahuje stav nasazení. Pokud tento prvek obsahuje hodnotu "Succeeded", nasazení bylo úspěšně dokončeno.

Odstranění potíží

Pokud narazíte na problémy s vytvářením clusterů HDInsight, podívejte se na požadavky na řízení přístupu.

Další kroky

Teď, když jste úspěšně vytvořili cluster HDInsight, se naučíte pracovat s clusterem pomocí následujícího postupu.

Clustery Apache Hadoop

Clustery Apache HBase