Apache Hadoop-fürtök létrehozása az Azure REST API használatával

Megtudhatja, hogyan hozhat létre HDInsight-fürtöt egy Azure Resource Manager-sablon és az Azure REST API használatával.

Az Azure REST API-val felügyeleti műveleteket hajthat végre az Azure-platformon üzemeltetett szolgáltatásokon, beleértve új erőforrások, például HDInsight-fürtök létrehozását.

Megjegyzés:

A dokumentum lépései a curl (https://curl.haxx.se/) segédprogram) használatával kommunikálnak az Azure REST API-val.

Sablon létrehozása

Az Azure Resource Manager-sablonok olyan JSON-dokumentumok, amelyek leírják az erőforráscsoportot és az abban lévő összes erőforrást (például a HDInsightot). Ez a sablonalapú megközelítés lehetővé teszi, hogy egyetlen sablonban definiálja a HDInsighthoz szükséges erőforrásokat.

A következő JSON-dokumentum a sablon és a paraméterfájlok https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.hdinsight/hdinsight-linux-ssh-password/azuredeploy.jsonegyesítését tartalmazza, amely egy Linux-alapú fürtöt hoz létre jelszóval az SSH felhasználói fiók biztonságossá tételéhez.

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

Ezt a példát a dokumentum lépéseiben használjuk. Cserélje le a Paraméterek szakaszban szereplő példaértékeket a fürt értékeire.

Fontos

A sablon a HDInsight-fürtök alapértelmezett munkavégző csomópontjainak (4) számát használja. Ha 32-nél több feldolgozó csomópontot tervez, akkor ki kell választania egy legalább 8 maggal és 14 GB RAM-mal rendelkező fő csomópontméretet.

További információ a csomópontméretekről és a velük járó költségekről: A HDInsight díjszabása.

Jelentkezzen be az Azure-előfizetésébe

Kövesse az Azure CLI használatának első lépéseit, és csatlakozzon az előfizetéséhez a az login paranccsal.

Egyszerű szolgáltatás létrehozása

Megjegyzés:

Ezek a lépések a Szolgáltatásnév létrehozása az Azure CLI jelszóval szakaszának rövidített verziója, amely egy egyszerű szolgáltatásnevet hoz létre az erőforrások dokumentumához való hozzáféréshez. Ezek a lépések létrehoznak egy szolgáltatásnevet, amely az Azure REST API-val való hitelesítéshez használható.

  1. A parancssorból az alábbi paranccsal listázhatja az Azure-előfizetéseket.

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

    A listában válassza ki a használni kívánt előfizetést, és jegyezze fel a Subscription_ID és Tenant_ID oszlopokat. Mentse ezeket az értékeket.

  2. Az alábbi paranccsal hozzon létre egy alkalmazást a Microsoft Entra-azonosítóban.

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

    Cserélje le a --display-name, --homepageés --identifier-uris a saját értékeit. Adjon meg egy jelszót az új Active Directory-bejegyzéshez.

    Megjegyzés:

    Az --home-page értékeknek --identifier-uris nem kell hivatkoznia az interneten üzemeltetett tényleges weblapra. Egyedi URI-knak kell lenniük.

    A parancsból visszaadott érték az új alkalmazás alkalmazásazonosítója . Mentse ezt az értéket.

  3. Az alábbi paranccsal hozzon létre egy egyszerű szolgáltatást az alkalmazásazonosító használatával.

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

    A parancsból visszaadott érték az objektumazonosító. Mentse ezt az értéket.

  4. Rendelje hozzá a tulajdonosi szerepkört a szolgáltatásnévhez az Objektumazonosító érték használatával. Használja a korábban beszerzett előfizetés-azonosítót .

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

Hitelesítési jogkivonat lekérése

Hitelesítési jogkivonat lekéréséhez használja a következő parancsot:

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

Állítsa be $TENANTIDa , $APPIDés $PASSWORD a korábban beszerzett vagy használt értékeket.

Ha ez a kérés sikeres, 200-as sorozatú választ kap, és a válasz törzse egy JSON-dokumentumot tartalmaz.

A kérés által visszaadott JSON-dokumentum egy access_token nevű elemet tartalmaz. A access_token értéke a REST API-ra irányuló kérelmek hitelesítésére szolgál.

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

Erőforráscsoport létrehozása

Erőforráscsoport létrehozásához használja az alábbiakat.

  • Állítsa be $SUBSCRIPTIONID a szolgáltatásnév létrehozásakor kapott előfizetés-azonosítót.
  • Állítsa be $ACCESSTOKEN az előző lépésben kapott hozzáférési jogkivonatot.
  • Cserélje le DATACENTERLOCATION azt az adatközpontot, amelyben létre szeretné hozni az erőforráscsoportot és az erőforrásokat. Például: "Usa déli középső régiója".
  • Állítsa be $RESOURCEGROUPNAME a csoporthoz használni kívánt nevet:
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"
}'

Ha ez a kérés sikeres, 200-as sorozatú választ kap, a válasz törzse pedig egy JSON-dokumentumot tartalmaz, amely a csoport adatait tartalmazza. Az "provisioningState" elem a következő értéket "Succeeded"tartalmazza: .

Üzembe helyezés létrehozása

A sablon erőforráscsoportban való üzembe helyezéséhez használja az alábbi parancsot.

  • Állítsa be $DEPLOYMENTNAME az üzembe helyezéshez használni kívánt nevet.
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}"

Megjegyzés:

Ha egy fájlba mentette a sablont, a következő parancsot használhatja ahelyett -d "{ template and parameters}", hogy a következőt használná:

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

Ha ez a kérés sikeres, 200-as sorozatú választ kap, a válasz törzse pedig egy JSON-dokumentumot tartalmaz, amely az üzembe helyezési művelettel kapcsolatos információkat tartalmazza.

Fontos

Az üzembe helyezés elküldve, de még nem fejeződött be. Az üzembe helyezés végrehajtása több percet is igénybe vehet, általában körülbelül 15 percet is igénybe vehet.

Központi telepítés állapotának ellenőrzése

Az üzembe helyezés állapotának ellenőrzéséhez használja a következő parancsot:

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"

Ez a parancs egy JSON-dokumentumot ad vissza, amely az üzembe helyezési művelettel kapcsolatos információkat tartalmazza. Az "provisioningState" elem tartalmazza az üzembe helyezés állapotát. Ha ez az elem a következő "Succeeded"értéket tartalmazza, az üzembe helyezés sikeresen befejeződött.

Hibaelhárítás

Ha problémába ütközik a HDInsight-fürtök létrehozása során, tekintse meg a hozzáférés-vezérlésre vonatkozó követelményeket.

Következő lépések

Most, hogy sikeresen létrehozott egy HDInsight-fürtöt, az alábbiak segítségével megtudhatja, hogyan használhatja a fürtöt.

Apache Hadoop-fürtök

Apache HBase-fürtök