Bagikan melalui


HDInsight SDK untuk Python

Gambaran Umum

HDInsight SDK untuk Python menyediakan kelas dan metode yang memungkinkan Anda mengelola kluster HDInsight Anda. Ia mencakup operasi untuk membuat, menghapus, memperbarui, daftar, mengubah ukuran, menjalankan tindakan skrip, memantau, mendapatkan properti klaster HDInsight, dan sebagainya.

Prasyarat

Penginstalan SDK

HDInsight SDK untuk Python dapat ditemukan di Indeks Paket Python dan dapat diinstal dengan menjalankan:

pip install azure-mgmt-hdinsight

Autentikasi

Pertama-tama SDK harus diautentikasi dengan langganan Azure Anda. Ikuti contoh di bawah ini untuk membuat perwakilan layanan dan menggunakannya untuk autentikasi. Setelah ini selesai, Anda akan memiliki instans HDInsightManagementClient, yang berisi banyak metode (diuraikan di bagian bawah) yang dapat digunakan untuk melakukan operasi manajemen.

Catatan

Ada cara lain untuk autentikasi selain contoh di bawah ini yang berpotensi lebih cocok untuk kebutuhan Anda. Semua metode diuraikan di sini: Mengautentikasi dengan Pustaka Manajemen Azure untuk Python

Contoh Autentikasi Menggunakan Perwakilan Layanan

Pertama-tama, masuklah ke Azure Cloud Shell. Verifikasi bahwa Anda saat ini menggunakan langganan tempat Anda ingin perwakilan layanan dibuat.

az account show

Informasi langganan Anda ditampilkan sebagai JSON.

{
  "environmentName": "AzureCloud",
  "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "isDefault": true,
  "name": "XXXXXXX",
  "state": "Enabled",
  "tenantId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "user": {
    "cloudShellID": true,
    "name": "XXX@XXX.XXX",
    "type": "user"
  }
}

Jika Anda tidak masuk ke dalam langganan yang benar, pilih langganan yang benar dengan menjalankan:

az account set -s <name or ID of subscription>

Penting

Jika Anda belum mendaftarkan Penyedia Sumber HdInsight dengan metode lain (seperti dengan membuat Kluster HDInsight melalui Portal Microsoft Azure), Anda perlu melakukan ini sekali sebelum Anda dapat mengautentikasi. Ini dapat dilakukan dari Azure Cloud Shell dengan menjalankan perintah berikut:

az provider register --namespace Microsoft.HDInsight

Selanjutnya, pilih nama untuk perwakilan layanan Anda dan buat dengan perintah berikut:

az ad sp create-for-rbac --name <Service Principal Name> --role Contributor --sdk-auth

Informasi perwakilan layanan ditampilkan sebagai JSON.

{
  "clientId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "clientSecret": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "subscriptionId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "tenantId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
  "resourceManagerEndpointUrl": "https://management.azure.com/",
  "activeDirectoryGraphResourceId": "https://graph.windows.net/",
  "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
  "galleryEndpointUrl": "https://gallery.azure.com/",
  "managementEndpointUrl": "https://management.core.windows.net/"
}

Salin cuplikan Python di bawah ini dan isi TENANT_ID, , CLIENT_IDCLIENT_SECRET, dan SUBSCRIPTION_ID dengan string dari JSON yang dikembalikan setelah menjalankan perintah untuk membuat perwakilan layanan.

from azure.mgmt.hdinsight import HDInsightManagementClient
from azure.common.credentials import ServicePrincipalCredentials
from azure.mgmt.hdinsight.models import *

# Tenant ID for your Azure Subscription
TENANT_ID = ''
# Your Service Principal App Client ID
CLIENT_ID = ''
# Your Service Principal Client Secret
CLIENT_SECRET = ''
# Your Azure Subscription ID
SUBSCRIPTION_ID = ''

credentials = ServicePrincipalCredentials(
    client_id = CLIENT_ID,
    secret = CLIENT_SECRET,
    tenant = TENANT_ID
)

client = HDInsightManagementClient(credentials, SUBSCRIPTION_ID)

Manajemen Kluster

Catatan

Bagian ini mengasumsikan Anda telah mengautentikasi dan membangun HDInsightManagementClient instans dan menyimpannya dalam variabel yang disebut client. Instruksi untuk mengautentikasi dan mendapatkan HDInsightManagementClient dapat ditemukan di bagian Autentikasi di atas.

Membuat Kluster

Klaster baru dapat dibuat dengan memerintahkan client.clusters.create().

Sampel

Sampel kode untuk membuat beberapa jenis umum kluster HDInsight tersedia: Sampel Python HDInsight.

Contoh

Contoh ini menunjukkan cara membuat kluster Spark dengan 2 simpul kepala dan 1 simpul pekerja.

Catatan

Pertama-tama Anda harus membuat Grup Sumber Daya dan Akun Penyimpanan, seperti yang dijelaskan di bawah ini. Jika Anda telah membuat ini, Anda dapat melewati langkah-langkah ini.

Membuat Grup Sumber Daya

Anda dapat membuat grup sumber daya menggunakan Azure Cloud Shell dengan menjalankan

az group create -l <Region Name (i.e. eastus)> --n <Resource Group Name>
Membuat Akun Penyimpanan

Anda dapat membuat akun penyimpanan menggunakan Azure Cloud Shell dengan menjalankan:

az storage account create -n <Storage Account Name> -g <Existing Resource Group Name> -l <Region Name (i.e. eastus)> --sku <SKU i.e. Standard_LRS>

Sekarang jalankan perintah berikut untuk mendapatkan kunci untuk akun penyimpanan Anda (Anda akan memerlukan ini untuk membuat kluster):

az storage account keys list -n <Storage Account Name>

Cuplikan Python di bawah ini membuat kluster Spark dengan 2 simpul kepala dan 1 simpul pekerja. Isi variabel kosong seperti yang dijelaskan dalam komentar dan jangan ragu untuk mengubah parameter lain agar sesuai dengan kebutuhan spesifik Anda.

# The name for the cluster you are creating
cluster_name = ""
# The name of your existing Resource Group
resource_group_name = ""
# Choose a username
username = ""
# Choose a password
password = ""
# Replace <> with the name of your storage account
storage_account = "<>.blob.core.windows.net"
# Storage account key you obtained above
storage_account_key = ""
# Choose a region
location = ""
container = "default"

params = ClusterCreateProperties(
    cluster_version="3.6",
    os_type=OSType.linux,
    tier=Tier.standard,
    cluster_definition=ClusterDefinition(
        kind="spark",
        configurations={
            "gateway": {
                "restAuthCredential.enabled_credential": "True",
                "restAuthCredential.username": username,
                "restAuthCredential.password": password
            }
        }
    ),
    compute_profile=ComputeProfile(
        roles=[
            Role(
                name="headnode",
                target_instance_count=2,
                hardware_profile=HardwareProfile(vm_size="Large"),
                os_profile=OsProfile(
                    linux_operating_system_profile=LinuxOperatingSystemProfile(
                        username=username,
                        password=password
                    )
                )
            ),
            Role(
                name="workernode",
                target_instance_count=1,
                hardware_profile=HardwareProfile(vm_size="Large"),
                os_profile=OsProfile(
                    linux_operating_system_profile=LinuxOperatingSystemProfile(
                        username=username,
                        password=password
                    )
                )
            )
        ]
    ),
    storage_profile=StorageProfile(
        storageaccounts=[StorageAccount(
            name=storage_account,
            key=storage_account_key,
            container=container,
            is_default=True
        )]
    )
)

client.clusters.create(
    cluster_name=cluster_name,
    resource_group_name=resource_group_name,
    parameters=ClusterCreateParametersExtended(
        location=location,
        tags={},
        properties=params
    ))

Dapatkan Detail Kluster

Untuk mendapatkan properti untuk klaster tertentu:

client.clusters.get("<Resource Group Name>", "<Cluster Name>")

Contoh

Anda dapat menggunakan get untuk mengonfirmasi bahwa Anda telah berhasil membuat kluster Anda.

my_cluster = client.clusters.get("<Resource Group Name>", "<Cluster Name>")
print(my_cluster)

Output akan terlihat seperti ini:

{'additional_properties': {}, 'id': '/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/<Resource Group Name>/providers/Microsoft.HDInsight/clusters/<Cluster Name>', 'name': '<Cluster Name>', 'type': 'Microsoft.HDInsight/clusters', 'location': '<Location>', 'tags': {}, 'etag': 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', 'properties': <azure.mgmt.hdinsight.models.cluster_get_properties_py3.ClusterGetProperties object at 0x0000013766D68048>}

Mencantumkan Kluster

Mencantumkan Kluster Di Bawah Langganan

client.clusters.list()

Mencantumkan Kluster Menurut Grup Sumber Daya

client.clusters.list_by_resource_group("<Resource Group Name>")

Catatan

Baik list() dan list_by_resource_group() kembalikan ClusterPaged objek. advance_page() Panggilan mengembalikan daftar kluster di halaman tersebut dan memajukan ClusterPaged objek ke halaman berikutnya. Ini dapat diulang sampai StopIteration pengecualian dinaikkan, menunjukkan bahwa tidak ada lagi halaman.

Contoh

Contoh berikut mencetak properti semua klaster untuk langganan saat ini:

clusters_paged = client.clusters.list()
while True:
  try:
    for cluster in clusters_paged.advance_page():
      print(cluster)
  except StopIteration: 
    break

Menghapus Kluster

Untuk menghapus klaster:

client.clusters.delete("<Resource Group Name>", "<Cluster Name>")

Memperbarui Tag Kluster

Anda dapat memperbarui tag klaster tertentu seperti ini:

client.clusters.update("<Resource Group Name>", "<Cluster Name>", tags={<Dictionary of Tags>})

Contoh

client.clusters.update("<Resource Group Name>", "<Cluster Name>", tags={"tag1Name" : "tag1Value", "tag2Name" : "tag2Value"})

Mengubah Ukuran Kluster

Anda dapat mengubah ukuran jumlah node pekerja klaster tertentu dengan menentukan ukuran baru seperti ini:

client.clusters.resize("<Resource Group Name>", "<Cluster Name>", target_instance_count=<Num of Worker Nodes>)

Pemantauan Kluster

HDInsight Management SDK juga dapat digunakan untuk mengelola pemantauan pada klaster Anda melalui Operations Management Suite (OMS).

Mengaktifkan Pemantauan OMS

Catatan

Untuk mengaktifkan OMS Monitoring, Anda harus memiliki ruang kerja Analitik Log yang sudah ada. Jika belum membuatnya, Anda dapat mempelajari cara melakukannya di sini: Membuat ruang kerja Analitik Log di portal Azure.

Untuk mengaktifkan OMS Monitoring pada klaster Anda:

client.extension.enable_monitoring("<Resource Group Name>", "<Cluster Name>", workspace_id="<Workspace Id>")

Melihat status pemantauan OMS

Untuk mendapatkan status OMS pada klaster Anda:

client.extension.get_monitoring_status("<Resource Group Name", "Cluster Name")

Menonaktifkan Pemantauan OMS

Untuk menonaktifkan OMS pada klaster Anda:

client.extension.disable_monitoring("<Resource Group Name>", "<Cluster Name>")

Tindakan Skrip

HDInsight menyediakan metode konfigurasi yang disebut tindakan skrip yang memanggil skrip kustom untuk menyesuaikan kluster.

Catatan

Informasi selengkapnya tentang cara menggunakan tindakan skrip dapat ditemukan di sini: Kustomisasi klaster HDInsight berbasis Linux menggunakan tindakan skrip

Jalankan Tindakan Skrip

Untuk menjalankan tindakan skrip pada kluster tertentu:

script_action1 = RuntimeScriptAction(name="<Script Name>", uri="<URL To Script>", roles=[<List of Roles>]) #valid roles are "headnode", "workernode", "zookeepernode", and "edgenode"

client.clusters.execute_script_actions("<Resource Group Name>", "<Cluster Name>", <persist_on_success (bool)>, script_actions=[script_action1]) #add more RuntimeScriptActions to the list to execute multiple scripts

Hapus Tindakan Skrip

Untuk menghapus aksi skrip tertentu yang dipertahankan pada klaster tertentu:

client.script_actions.delete("<Resource Group Name>", "<Cluster Name", "<Script Name>")

Mencantumkan Tindakan Skrip yang Dipertahankan

Catatan

list() dan list_persisted_scripts() mengembalikan RuntimeScriptActionDetailPaged objek . advance_page() Panggilan mengembalikan daftar RuntimeScriptActionDetail pada halaman tersebut dan memajukan RuntimeScriptActionDetailPaged objek ke halaman berikutnya. Ini dapat diulang sampai StopIteration pengecualian dinaikkan, menunjukkan bahwa tidak ada lagi halaman. Lihat contoh di bawah ini.

Untuk mencantumkan semua tindakan skrip yang dipertahankan untuk klaster yang ditentukan:

client.script_actions.list_persisted_scripts("<Resource Group Name>", "<Cluster Name>")

Contoh

scripts_paged = client.script_actions.list_persisted_scripts(resource_group_name, cluster_name)
while True:
  try:
    for script in scripts_paged.advance_page():
      print(script)
  except StopIteration:
    break

Mencantumkan Riwayat Eksekusi Semua Skrip

Untuk mencantumkan riwayat eksekusi semua skrip untuk klaster yang ditentukan:

client.script_execution_history.list("<Resource Group Name>", "<Cluster Name>")

Contoh

Contoh ini mencetak semua rincian untuk semua eksekusi skrip sebelumnya.

script_executions_paged = client.script_execution_history.list("<Resource Group Name>", "<Cluster Name>")
while True:
  try:
    for script in script_executions_paged.advance_page():            
      print(script)
    except StopIteration:       
      break