Share via


Azure REST API kullanarak Apache Hadoop kümeleri oluşturma

Azure Resource Manager şablonu ve Azure REST API kullanarak HDInsight kümesi oluşturmayı öğrenin.

Azure REST API'si, HDInsight kümeleri gibi yeni kaynakların oluşturulması dahil olmak üzere Azure platformunda barındırılan hizmetler üzerinde yönetim işlemleri gerçekleştirmenize olanak tanır.

Dekont

Bu belgedeki adımlar, Azure REST API ile iletişim kurmak için curl (https://curl.haxx.se/) yardımcı programını kullanır.

Şablon oluştur

Azure Resource Manager şablonları, bir kaynak grubunu ve içindeki tüm kaynakları (HDInsight gibi) açıklayan JSON belgeleridir. Bu şablon tabanlı yaklaşım, HDInsight için ihtiyacınız olan kaynakları tek bir şablonda tanımlamanızı sağlar.

Aşağıdaki JSON belgesi, SSH kullanıcı hesabının güvenliğini sağlamak için parola kullanarak Linux tabanlı bir küme oluşturan şablonun ve parametre dosyalarının https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.hdinsight/hdinsight-linux-ssh-password/azuredeploy.jsonbirleştirilmesidir.

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

Bu örnek, bu belgedeki adımlarda kullanılır. Parametreler bölümündeki örnek değerlerikümenizin değerleriyle değiştirin.

Önemli

Şablon, HDInsight kümesi için varsayılan çalışan düğümü sayısını (4) kullanır. 32'den fazla çalışan düğümü planlıyorsanız, en az 8 çekirdek ve 14 GB ram içeren bir baş düğüm boyutu seçmeniz gerekir.

Düğüm boyutları ve ilişkili maliyetler hakkında daha fazla bilgi için bkz. HDInsight fiyatlandırması.

Azure aboneliğinizde oturum açın

Azure CLI'yı kullanmaya başlama ve komutunu kullanarak az login aboneliğinize bağlanma bölümünde belgelenen adımları izleyin.

Hizmet sorumlusu oluşturma

Dekont

Bu adımlar, Azure CLI kullanarak kaynaklara erişmek için hizmet sorumlusu oluşturma belgesinin Parola ile hizmet sorumlusu oluşturma bölümünün kısaltılmış bir sürümüdür. Bu adımlar, Azure REST API'sinde kimlik doğrulaması yapmak için kullanılan bir hizmet sorumlusu oluşturur.

  1. Azure aboneliklerinizi listelemek için bir komut satırından aşağıdaki komutu kullanın.

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

    Listede, kullanmak istediğiniz aboneliği seçin ve Subscription_ID ve Tenant_ID sütunlarını not edin. Bu değerleri kaydedin.

  2. Microsoft Entra Id'de bir uygulama oluşturmak için aşağıdaki komutu kullanın.

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

    , --homepageve --identifier-uris değerlerini --display-namekendi değerlerinizle değiştirin. Yeni Active Directory girdisi için bir parola girin.

    Dekont

    ve --identifier-uris değerlerinin --home-page İnternet'te barındırılan gerçek bir web sayfasına başvurması gerekmez. Bunlar benzersiz URI'ler olmalıdır.

    Bu komuttan döndürülen değer, yeni uygulamanın Uygulama Kimliği'dir. Bu değeri kaydedin.

  3. Uygulama Kimliği'ni kullanarak hizmet sorumlusu oluşturmak için aşağıdaki komutu kullanın.

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

    Bu komuttan döndürülen değer Nesne Kimliği'dir. Bu değeri kaydedin.

  4. Nesne Kimliği değerini kullanarak Hizmet sorumlusuna Sahip rolünü atayın. Daha önce edindiğiniz abonelik kimliğini kullanın.

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

Kimlik doğrulama belirteci alma

Kimlik doğrulama belirtecini almak için aşağıdaki komutu kullanın:

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

, $APPIDve $PASSWORD değerlerini daha önce alınan veya kullanılan değerlere ayarlayın$TENANTID.

Bu istek başarılı olursa, bir 200 serisi yanıtı alırsınız ve yanıt gövdesi bir JSON belgesi içerir.

Bu istek tarafından döndürülen JSON belgesi access_token adlı bir öğe içeriyor. access_token değeri REST API'ye yönelik isteklerin kimlik doğrulamasını yapmak için kullanılır.

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

Kaynak grubu oluşturma

Kaynak grubu oluşturmak için aşağıdakileri kullanın.

  • Hizmet sorumlusu oluşturulurken alınan abonelik kimliğine ayarlayın $SUBSCRIPTIONID .
  • Önceki adımda alınan erişim belirtecine ayarlayın $ACCESSTOKEN .
  • öğesini kaynak grubunu ve kaynakları oluşturmak istediğiniz veri merkeziyle değiştirin DATACENTERLOCATION . Örneğin, 'Orta Güney ABD'.
  • Bu grup için kullanmak istediğiniz ada ayarlayın $RESOURCEGROUPNAME :
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"
}'

Bu istek başarılı olursa, bir 200 serisi yanıtı alırsınız ve yanıt gövdesi grup hakkında bilgi içeren bir JSON belgesi içerir. "provisioningState" öğesi değerini "Succeeded"içerir.

Dağıtım oluşturma

Şablonu kaynak grubuna dağıtmak için aşağıdaki komutu kullanın.

  • Bu dağıtım için kullanmak istediğiniz ada ayarlayın $DEPLOYMENTNAME .
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}"

Dekont

Şablonu bir dosyaya kaydettiyseniz, yerine -d "{ template and parameters}"aşağıdaki komutu kullanabilirsiniz:

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

Bu istek başarılı olursa, 200 serisi bir yanıt alırsınız ve yanıt gövdesi dağıtım işlemi hakkında bilgi içeren bir JSON belgesi içerir.

Önemli

Dağıtım gönderildi, ancak tamamlanmadı. Dağıtımın tamamlanması genellikle yaklaşık 15 dakika sürebilir.

Dağıtımın durumunu denetleme

Dağıtımın durumunu denetlemek için aşağıdaki komutu kullanın:

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"

Bu komut, dağıtım işlemi hakkında bilgi içeren bir JSON belgesi döndürür. "provisioningState" öğesi dağıtımın durumunu içerir. Bu öğe değerini "Succeeded"içeriyorsa, dağıtım başarıyla tamamlanmıştır.

Sorun giderme

HDInsight kümeleri oluştururken sorun yaşarsanız bkz. erişim denetimi gereksinimleri.

Sonraki adımlar

HdInsight kümesini başarıyla oluşturduğunuza göre, kümenizle çalışmayı öğrenmek için aşağıdakileri kullanın.

Apache Hadoop kümeleri

Apache HBase kümeleri