Buat kluster Apache Hadoop menggunakan Azure REST API

Pelajari cara membuat kluster HDInsight menggunakan templat Azure Resource Manager dan Azure REST API.

Azure REST API memungkinkan Anda melakukan operasi pengelolaan pada layanan yang dihosting di platform Azure, termasuk pembuatan sumber daya baru seperti kluster HDInsight.

Catatan

Langkah-langkah dalam dokumen ini menggunakan utilitas curl (https://curl.haxx.se/) untuk berkomunikasi dengan Azure REST API.

Membuat templat

Templat Azure Resource Manager adalah dokumen JSON yang menjelaskan grup sumber daya dan semua sumber daya di dalamnya (seperti HDInsight.) Pendekatan berbasis template ini memungkinkan Anda untuk menentukan sumber daya yang Anda butuhkan untuk HDInsight dalam satu template.

Dokumen JSON berikut adalah penggabungan file parameter dan templat dari https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.hdinsight/hdinsight-linux-ssh-password/azuredeploy.json, yang membuat kluster berbasis Linux menggunakan kata sandi untuk mengamankan akun pengguna 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"
            }
        }
    }
}

Contoh ini digunakan dalam langkah-langkah dalam dokumen ini. Ganti nilai contoh di bagian Parameter dengan nilai untuk kluster Anda.

Penting

Template tersebut menggunakan jumlah default node pekerja (4) untuk kluster HDInsight. Jika Anda merencanakan lebih dari 32 node pekerja, pilih ukuran node head dengan setidaknya 8 inti dan ram 14-GB.

Untuk informasi selengkapnya tentang ukuran node dan biaya terkait, lihat Harga HDInsight.

Masuk ke langganan Azure Anda

Ikuti langkah-langkah yang didokumentasikan di Mulai menggunakan Azure CLI dan sambungkan ke langganan Anda menggunakan perintah az login.

Membuat perwakilan layanan

Catatan

Langkah-langkah ini adalah versi ringkas dari bagian dokumen Buat perwakilan layanan dengan kata sandi pada Gunakan Azure CLI untuk membuat perwakilan layanan untuk mengakses sumber daya. Langkah-langkah ini membuat perwakilan layanan yang digunakan untuk mengautentikasi ke Azure REST API.

  1. Dari baris perintah, gunakan perintah berikut ini untuk mencantumkan langganan Azure Anda.

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

    Dalam daftar, pilih langganan yang ingin Anda gunakan dan catat kolom Subscription_ID dan Tenant_ID. Simpan nilai-nilai ini.

  2. Gunakan perintah berikut untuk membuat aplikasi di 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'
    

    Ganti nilai untuk --display-name, --homepage, dan --identifier-uris dengan nilai Anda sendiri. Sediakan kata sandi untuk entri Layanan Domain Active Directory baru.

    Catatan

    Nilai --home-page dan --identifier-uris tidak perlu merujuk ke halaman web aktual yang dihosting di internet. Nilai-nilai tersebut harusi URI yang unik.

    Nilai yang dikembalikan dari perintah ini adalah ID Aplikasi untuk aplikasi baru. Simpan nilai ini.

  3. Gunakan perintah berikut untuk membuat perwakilan layanan menggunakan ID Aplikasi.

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

    Nilai yang dikembalikan dari perintah ini adalah ID Objek. Simpan nilai ini.

  4. Tetapkan peran Pemilik ke perwakilan layanan menggunakan nilai ID Objek. Gunakan ID langganan yang Anda peroleh sebelumnya.

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

Dapatkan token autentikasi

Gunakan perintah berikut untuk mengambil token autentikasi:

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

Atur $TENANTID, $APPID, dan $PASSWORD ke nilai yang diperoleh atau digunakan sebelumnya.

Jika permintaan ini berhasil, Anda menerima respons 200 seri dan badan respons berisi dokumen JSON.

Dokumen JSON yang dikembalikan oleh permintaan ini berisi elemen bernama access_token. Nilai access_token digunakan untuk permintaan autentikasi ke 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"
}

Buat grup sumber daya

Gunakan hal berikut ini untuk membuat grup sumber daya.

  • Atur $SUBSCRIPTIONID ke ID langganan yang diterima saat membuat perwakilan layanan.
  • Atur $ACCESSTOKEN ke token akses yang diterima di langkah sebelumnya.
  • Ganti DATACENTERLOCATION dengan pusat data tempat Anda ingin membuat grup sumber daya, dan sumber daya. Misalnya, ‘AS Tengah Selatan’.
  • Atur $RESOURCEGROUPNAME ke nama yang ingin Anda gunakan untuk grup ini:
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"
}'

Jika permintaan ini berhasil, Anda menerima respons 200 seri dan badan respons berisi dokumen JSON yang berisi informasi tentang grup. Elemen "provisioningState" berisi nilai "Succeeded".

Membuat penyebaran

Gunakan perintah berikut untuk menyebarkan templat ke grup sumber daya.

  • Atur $DEPLOYMENTNAME untuk nama yang ingin Anda gunakan untuk penyebaran ini.
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}"

Catatan

Jika Anda menyimpan templat ke file, Anda bisa menggunakan perintah berikut, bukan -d "{ template and parameters}":

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

Jika permintaan ini berhasil, Anda menerima respons 200 seri dan badan respons berisi dokumen JSON yang berisi informasi tentang operasi penyebaran.

Penting

Penyebaran telah diajukan, tetapi belum selesai. Ini bisa memakan waktu beberapa menit, biasanya sekitar 15 menit, agar penyebaran selesai.

Periksa status penyebaran

Untuk memeriksa status penyebaran, gunakan perintah berikut:

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"

Perintah ini mengembalikan dokumen JSON yang berisi informasi tentang operasi penyebaran. Elemen "provisioningState" berisi status penyebaran. Jika elemen ini mengandung nilai "Succeeded", maka penyebaran telah berhasil diselesaikan.

Pemecahan Masalah

Jika Anda mengalami masalah dengan pembuatan kluster HDInsight, lihat persyaratan kontrol akses.

Langkah berikutnya

Sekarang setelah Anda berhasil membuat kluster HDInsight, gunakan hal berikut ini untuk mempelajari cara menggunakan kluster Anda.

Kluster Apache Hadoop

Kluster Apache HBase