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
- Akun Azure. Jika Anda tidak memilikinya, dapatkan uji coba gratis.
- Python
- pip
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_ID
CLIENT_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
Azure SDK for Python