Udostępnij za pośrednictwem


Tworzenie klastrów Apache Hadoop przy użyciu interfejsu API REST platformy Azure

Dowiedz się, jak utworzyć klaster usługi HDInsight przy użyciu szablonu usługi Azure Resource Manager i interfejsu API REST platformy Azure.

Interfejs API REST platformy Azure umożliwia wykonywanie operacji zarządzania na usługach hostowanych na platformie Azure, w tym tworzenie nowych zasobów, takich jak klastry usługi HDInsight.

Uwaga

Kroki opisane w tym dokumencie korzystają z narzędzia curl (https://curl.haxx.se/) narzędzia do komunikowania się z interfejsem API REST platformy Azure).

Utwórz szablon

Szablony usługi Azure Resource Manager to dokumenty JSON, które opisują grupę zasobów i wszystkie zasoby w niej (takie jak usługa HDInsight). To podejście oparte na szablonach umożliwia zdefiniowanie zasobów potrzebnych dla usługi HDInsight w jednym szablonie.

Poniższy dokument JSON to połączenie plików szablonu i parametrów z https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.hdinsight/hdinsight-linux-ssh-password/azuredeploy.jsonprogramu , które tworzy klaster oparty na systemie Linux przy użyciu hasła w celu zabezpieczenia konta użytkownika 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"
            }
        }
    }
}

Ten przykład jest używany w krokach w tym dokumencie. Zastąp przykładowe wartości w sekcji Parametry wartościami klastra.

Ważne

Szablon używa domyślnej liczby węzłów roboczych (4) dla klastra usługi HDInsight. Jeśli planujesz więcej niż 32 węzły robocze, musisz wybrać rozmiar węzła głównego z co najmniej 8 rdzeniami i 14 GB pamięci RAM.

Aby uzyskać więcej informacji o rozmiarach węzła i powiązanych kosztach, zobacz Cennik usługi HDInsight.

Zaloguj się do Twojej subskrypcji platformy Azure.

Wykonaj kroki opisane w artykule Rozpoczynanie pracy z interfejsem wiersza polecenia platformy Azure i nawiąż połączenie z subskrypcją az login przy użyciu polecenia .

Tworzenie jednostki usługi

Uwaga

Te kroki to skrócona wersja sekcji Tworzenie jednostki usługi z hasłem w temacie Tworzenie jednostki usługi przy użyciu interfejsu wiersza polecenia platformy Azure w celu utworzenia jednostki usługi w celu uzyskania dostępu do zasobów dokumentu. Te kroki umożliwiają utworzenie jednostki usługi używanej do uwierzytelniania w interfejsie API REST platformy Azure.

  1. W wierszu polecenia użyj następującego polecenia, aby wyświetlić listę subskrypcji platformy Azure.

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

    Na liście wybierz subskrypcję, której chcesz użyć, i zanotuj kolumny Subscription_ID i Tenant_ID . Zapisz te wartości.

  2. Użyj następującego polecenia, aby utworzyć aplikację w usłudze 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'
    

    Zastąp wartości wartości , --display-name--homepagei --identifier-uris własnymi wartościami. Podaj hasło dla nowego wpisu usługi Active Directory.

    Uwaga

    Wartości --home-page i --identifier-uris nie muszą odwoływać się do rzeczywistej strony internetowej hostowanej w Internecie. Muszą być unikatowymi identyfikatorami URI.

    Wartość zwrócona z tego polecenia to identyfikator aplikacji dla nowej aplikacji. Zapisz tę wartość.

  3. Użyj następującego polecenia, aby utworzyć jednostkę usługi przy użyciu identyfikatora aplikacji.

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

    Wartość zwrócona z tego polecenia to identyfikator obiektu. Zapisz tę wartość.

  4. Przypisz rolę Właściciela do jednostki usługi przy użyciu wartości Identyfikator obiektu. Użyj uzyskanego wcześniej identyfikatora subskrypcji.

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

Uzyskiwanie tokenu uwierzytelniania

Użyj następującego polecenia, aby pobrać token uwierzytelniania:

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

Ustaw $TENANTIDwartości , $APPIDi $PASSWORD na uzyskane lub użyte wcześniej.

Jeśli to żądanie zakończy się pomyślnie, otrzymasz odpowiedź serii 200, a treść odpowiedzi zawiera dokument JSON.

Dokument JSON zwrócony przez to żądanie zawiera element o nazwie access_token. Wartość access_token jest używana do uwierzytelniania żądań do interfejsu API REST.

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

Tworzenie grupy zasobów

Użyj poniższej instrukcji, aby utworzyć grupę zasobów.

  • Ustaw $SUBSCRIPTIONID identyfikator subskrypcji odebrany podczas tworzenia jednostki usługi.
  • Ustaw $ACCESSTOKEN token dostępu odebrany w poprzednim kroku.
  • Zastąp element DATACENTERLOCATION centrum danych, w którym chcesz utworzyć grupę zasobów i zasoby. Na przykład "Południowo-środkowe stany USA".
  • Ustaw $RESOURCEGROUPNAME nazwę, której chcesz użyć dla tej grupy:
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"
}'

Jeśli to żądanie zakończy się pomyślnie, otrzymasz odpowiedź serii 200, a treść odpowiedzi zawiera dokument JSON zawierający informacje o grupie. Element "provisioningState" zawiera wartość "Succeeded".

Tworzenie wdrożenia

Użyj następującego polecenia, aby wdrożyć szablon w grupie zasobów.

  • Ustaw $DEPLOYMENTNAME nazwę, której chcesz użyć dla tego wdrożenia.
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}"

Uwaga

Jeśli szablon został zapisany w pliku, możesz użyć następującego polecenia zamiast -d "{ template and parameters}":

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

Jeśli to żądanie zakończy się pomyślnie, otrzymasz odpowiedź serii 200, a treść odpowiedzi zawiera dokument JSON zawierający informacje o operacji wdrażania.

Ważne

Wdrożenie zostało przesłane, ale nie zostało ukończone. Ukończenie wdrożenia może potrwać około 15 minut.

Sprawdzanie stanu wdrożenia

Aby sprawdzić stan wdrożenia, użyj następującego polecenia:

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"

To polecenie zwraca dokument JSON zawierający informacje o operacji wdrażania. Element "provisioningState" zawiera stan wdrożenia. Jeśli ten element zawiera wartość "Succeeded", wdrożenie zostało ukończone pomyślnie.

Rozwiązywanie problemów

W razie problemów podczas tworzenia klastrów usługi HDInsight zapoznaj się z wymaganiami dotyczącymi kontroli dostępu.

Następne kroki

Po pomyślnym utworzeniu klastra usługi HDInsight skorzystaj z poniższego polecenia, aby dowiedzieć się, jak pracować z klastrem.

Klastry Apache Hadoop

Klastry Apache HBase