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.
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.
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
--homepage
i--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ść.
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ść.
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 $TENANTID
wartości , $APPID
i $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.