Sdílet prostřednictvím


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í ke komunikaci s rozhraním Azure REST API nástroj curl (https://curl.haxx.se/)).

Vytvoření šablony

Š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ů z https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.hdinsight/hdinsight-linux-ssh-password/azuredeploy.json, který 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 příklad hodnot 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 Začínáme s Azure CLI a připojte se k předplatnému pomocí příkazu az login.

Vytvořte služebního principála

Poznámka:

Tyto kroky představují zkrácenou verzi Vytvoření instančního objektu s heslem části Vytvoření instančního objektu pro přístup k prostředkům dokumentu pomocí Azure CLI. Tento postup vytvoří služební principál, který se použije k ověřování 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 --display-name, --homepagea --identifier-uris vlastními hodnotami. Zadejte heslo pro novou položku služby Active Directory.

    Poznámka:

    Hodnoty --home-page a --identifier-uris 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 zástupce služby 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 roli vlastníka služebnímu principálu pomocí hodnoty ID objektu . Použijte ID předplatného, 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 prvek 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 vytvořte skupinu prostředků.

  • Nastavte $SUBSCRIPTIONID na ID předplatného, které jste obdrželi při vytváření služebního principála.
  • Nastavte $ACCESSTOKEN na přístupový token přijatý v předchozím kroku.
  • Nahraďte DATACENTERLOCATION datovým centrem, ve kterém chcete vytvořit skupinu prostředků a prostředky. Například „středojižní část Spojených států“.
  • Nastavte $RESOURCEGROUPNAME na 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řte 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 -d "{ template and parameters}"použít následující příkaz:

--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.

Řešení problémů

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

Klastry Apache HBase