Mengelola klaster HDInsight dengan menggunakan Apache Ambari REST API

Pelajari cara menggunakan Apache Ambari REST API untuk mengelola dan memantau klaster Apache Hadoop di Azure HDInsight.

Apa yang dimaksud dengan Apache Ambari

Apache Ambari menyederhanakan manajemen dan pemantauan klaster Hadoop dengan menyediakan UI web yang mudah digunakan yang didukung oleh REST API-nya. Ambari disediakan secara default dengan klaster HDInsight berbasis Linux.

Prasyarat

Pengidentifikasi Sumber Daya Seragam Dasar untuk Ambari Rest API

Dasar Pengidentifikasi Sumber Daya Seragam (URI) untuk Ambari REST API pada HDInsight adalah https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters/CLUSTERNAME, di mana CLUSTERNAME adalah nama klaster Anda. Nama klaster dalam URI bersifat peka huruf besar/kecil. Meski nama klaster dalam bagian nama domain yang sepenuhnya memenuhi syarat (FQDN) dari URI (CLUSTERNAME.azurehdinsight.net) tidak peka huruf besar/kecil, kejadian lain dalam URI peka huruf besar/kecil.

Autentikasi

Untuk terhubung ke Ambari pada HDInsight memerlukan HTTPS. Gunakan nama akun admin (defaultnya adalah admin) dan sandi yang Anda berikan selama pembuatan klaster.

Untuk klaster Paket Keamanan Perusahaan, daripada admin, gunakan nama pengguna yang sepenuhnya memenuhi syarat seperti username@domain.onmicrosoft.com.

Contoh

Penyiapan (Mempertahankan kredensial)

Pertahankan kredensial Anda untuk menghindari memasukkannya kembali untuk setiap contoh. Nama klaster akan dipertahankan dalam langkah terpisah.

J. Bash
Edit skrip di bawah ini dengan mengganti PASSWORD dengan sandi Anda yang sebenarnya. Kemudian masukkan perintah.

export password='PASSWORD'

B. PowerShell

$creds = Get-Credential -UserName "admin" -Message "Enter the HDInsight login"

Identifikasi nama klaster dengan penggunaan huruf besar/kecil yang benar

Penggunaan huruf besar/kecil sebenarnya dari nama klaster mungkin berbeda dari yang Anda harapkan. Langkah-langkah di sini akan menunjukkan penggunaan huruf besar/kecil sebenarnya, untuk kemudian disimpan dalam variabel untuk semua contoh nanti.

Edit skrip di bawah ini untuk mengganti CLUSTERNAME dengan nama klaster Anda. Kemudian masukkan perintah. (Nama klaster untuk FQDN tidak peka huruf besar/kecil.)

export clusterName=$(curl -u admin:$password -sS -G "https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters" | jq -r '.items[].Clusters.cluster_name')
echo $clusterName
# Identify properly cased cluster name
$resp = Invoke-WebRequest -Uri "https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters" `
    -Credential $creds -UseBasicParsing
$clusterName = (ConvertFrom-Json $resp.Content).items.Clusters.cluster_name;

# Show cluster name
$clusterName

Pemilahan data JSON

Contoh berikut menggunakan jq atauConvertFrom-Json untuk memilah dokumen respons JSON dan hanya menampilkan informasi health_report dari hasil.

curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName" \
| jq '.Clusters.health_report'
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName" `
    -Credential $creds -UseBasicParsing
$respObj = ConvertFrom-Json $resp.Content
$respObj.Clusters.health_report

Mendapatkan FQDN dari node klaster

Anda mungkin perlu mengetahui nama domain yang sepenuhnya memenuhi syarat (FQDN) dari node klaster. Anda dapat dengan mudah mengambil FQDN untuk berbagai node dalam klaster menggunakan contoh berikut:

Semua node

curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/hosts" \
| jq -r '.items[].Hosts.host_name'
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/hosts" `
    -Credential $creds -UseBasicParsing
$respObj = ConvertFrom-Json $resp.Content
$respObj.items.Hosts.host_name

Node kepala

curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/HDFS/components/NAMENODE" \
| jq -r '.host_components[].HostRoles.host_name'
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/HDFS/components/NAMENODE" `
    -Credential $creds -UseBasicParsing
$respObj = ConvertFrom-Json $resp.Content
$respObj.host_components.HostRoles.host_name

Node pekerja

curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/HDFS/components/DATANODE" \
| jq -r '.host_components[].HostRoles.host_name'
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/HDFS/components/DATANODE" `
    -Credential $creds -UseBasicParsing
$respObj = ConvertFrom-Json $resp.Content
$respObj.host_components.HostRoles.host_name

Node Zookeeper

curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/ZOOKEEPER/components/ZOOKEEPER_SERVER" \
| jq -r ".host_components[].HostRoles.host_name"
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/ZOOKEEPER/components/ZOOKEEPER_SERVER" `
    -Credential $creds -UseBasicParsing
$respObj = ConvertFrom-Json $resp.Content
$respObj.host_components.HostRoles.host_name

Mendapatkan alamat IP internal node klaster

Alamat IP yang ditampilkan oleh contoh di bagian ini tidak dapat diakses secara langsung melalui internet. Mereka hanya dapat diakses dalam Azure Virtual Network yang berisi klaster HDInsight.

Untuk informasi selengkapnya tentang cara menggunakan HDInsight dan jaringan virtual, lihat Merencanakan jaringan virtual untuk HDInsight.

Untuk menemukan alamat IP, Anda harus mengetahui nama domain internal yang sepenuhnya memenuhi syarat (FQDN) dari node klaster. Setelah Anda memiliki FQDN, Anda kemudian bisa mendapatkan alamat IP hos. Contoh berikut ini terlebih dahulu mengkueri Ambari untuk FQDN dari semua node hos. Kemudian mengkueri Ambari untuk alamat IP masing-masing hos.

for HOSTNAME in $(curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/hosts" | jq -r '.items[].Hosts.host_name')
do
    IP=$(curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/hosts/$HOSTNAME" | jq -r '.Hosts.ip')
  echo "$HOSTNAME <--> $IP"
done
$uri = "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/hosts" 
$resp = Invoke-WebRequest -Uri $uri -Credential $creds -UseBasicParsing
$respObj = ConvertFrom-Json $resp.Content
foreach($item in $respObj.items) {
    $hostName = [string]$item.Hosts.host_name
    $hostInfoResp = Invoke-WebRequest -Uri "$uri/$hostName" `
        -Credential $creds -UseBasicParsing
    $hostInfoObj = ConvertFrom-Json $hostInfoResp
    $hostIp = $hostInfoObj.Hosts.ip
    "$hostName <--> $hostIp"
}

Mendapatkan penyimpanan default

Klaster HDInsight harus menggunakan Akun Azure Storage atau Data Lake Storage sebagai penyimpanan default. Anda dapat menggunakan Ambari untuk mengambil informasi ini setelah klaster dibuat. Contohnya, jika Anda ingin membaca/menulis data ke kontainer di luar HDInsight.

Contoh berikut mengambil konfigurasi penyimpanan default dari klaster:

curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations/service_config_versions?service_name=HDFS&service_config_version=1" \
| jq -r '.items[].configurations[].properties["fs.defaultFS"] | select(. != null)'
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations/service_config_versions?service_name=HDFS&service_config_version=1" `
    -Credential $creds -UseBasicParsing
$respObj = ConvertFrom-Json $resp.Content
$respObj.items.configurations.properties.'fs.defaultFS'

Penting

Contoh-contoh ini menampilkan konfigurasi pertama yang diterapkan ke server (service_config_version=1) yang berisi informasi ini. Jika Anda mengambil nilai yang telah dimodifikasi setelah pembuatan klaster, Anda mungkin perlu mencantumkan versi konfigurasi dan mengambil yang terbaru.

Nilai yang ditampilkan mirip dengan salah satu contoh berikut:

  • wasbs://CONTAINER@ACCOUNTNAME.blob.core.windows.net - Nilai ini menunjukkan bahwa klaster menggunakan akun Azure Storage untuk penyimpanan default. Nilai ACCOUNTNAME adalah nama akun penyimpanan. Bagian CONTAINER adalah nama kontainer blob di akun penyimpanan. Kontainer adalah akar penyimpanan yang kompatibel dengan HDFS untuk klaster.

  • abfs://CONTAINER@ACCOUNTNAME.dfs.core.windows.net - Nilai ini menunjukkan bahwa klaster menggunakan Azure Data Lake Storage Gen2 untuk penyimpanan default. Nilai ACCOUNTNAME dan CONTAINER memiliki arti yang sama seperti untuk Azure Storage yang disebutkan sebelumnya.

  • adl://home - Nilai ini menunjukkan bahwa klaster menggunakan Azure Data Lake Storage Gen1 untuk penyimpanan default.

    Untuk menemukan nama akun Data Lake Storage, gunakan contoh berikut:

    curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations/service_config_versions?service_name=HDFS&service_config_version=1" \
    | jq -r '.items[].configurations[].properties["dfs.adls.home.hostname"] | select(. != null)'
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations/service_config_versions?service_name=HDFS&service_config_version=1" `
        -Credential $creds -UseBasicParsing
    $respObj = ConvertFrom-Json $resp.Content
    $respObj.items.configurations.properties.'dfs.adls.home.hostname'
    

    Nilai yang ditampilkan mirip dengan ACCOUNTNAME.azuredatalakestore.net, di mana ACCOUNTNAME adalah nama akun Data Lake Storage.

    Untuk menemukan direktori dalam Data Lake Storage yang berisi penyimpanan untuk klaster, gunakan contoh berikut:

    curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations/service_config_versions?service_name=HDFS&service_config_version=1" \
    | jq -r '.items[].configurations[].properties["dfs.adls.home.mountpoint"] | select(. != null)'
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations/service_config_versions?service_name=HDFS&service_config_version=1" `
        -Credential $creds -UseBasicParsing
    $respObj = ConvertFrom-Json $resp.Content
    $respObj.items.configurations.properties.'dfs.adls.home.mountpoint'
    

    Nilai yang ditampilkan mirip dengan /clusters/CLUSTERNAME/. Nilai ini adalah jalur dalam akun Data Lake Storage. Jalur ini adalah akar dari sistem file yang kompatibel dengan HDFS untuk klaster.

Catatan

Cmdlet Get-AzHDInsightCluster yang disediakan oleh Azure PowerShell juga menampilkan informasi penyimpanan untuk klaster tersebut.

Mendapatkan semua konfigurasi

Dapatkan konfigurasi yang tersedia untuk klaster Anda.

curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName?fields=Clusters/desired_configs"
$respObj = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName`?fields=Clusters/desired_configs" `
    -Credential $creds -UseBasicParsing
$respObj.Content

Contoh ini menampilkan dokumen JSON yang berisi konfigurasi saat ini untuk komponen yang diinstal. Lihat nilai tag. Contoh berikut adalah kutipan dari data yang ditampilkan dari jenis klaster Spark.

"jupyter-site" : {
  "tag" : "INITIAL",
  "version" : 1
},
"livy2-client-conf" : {
  "tag" : "INITIAL",
  "version" : 1
},
"livy2-conf" : {
  "tag" : "INITIAL",
  "version" : 1
},

Mendapatkan konfigurasi untuk komponen tertentu

Dapatkan konfigurasi untuk komponen yang Anda minati. Dalam contoh berikut, ganti INITIAL dengan nilai tag yang ditampilkan dari permintaan sebelumnya.

curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations?type=livy2-conf&tag=INITIAL"
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations?type=livy2-conf&tag=INITIAL" `
    -Credential $creds -UseBasicParsing
$resp.Content

Contoh ini menampilkan dokumen JSON yang berisi konfigurasi saat ini untuk komponen livy2-conf.

Memperbarui konfigurasi

  1. Buat newconfig.json.
    Ubah, lalu masukkan perintah di bawah ini:

    • Ganti livy2-conf dengan komponen baru.

    • Ganti INITIAL dengan nilai sebenarnya yang diambil untuk tag dari Mendapatkan semua konfigurasi.

      J. Bash

      curl -u admin:$password -sS -G "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations?type=livy2-conf&tag=INITIAL" \
      | jq --arg newtag $(echo version$(date +%s%N)) '.items[] | del(.href, .version, .Config) | .tag |= $newtag | {"Clusters": {"desired_config": .}}' > newconfig.json
      

      B. PowerShell
      Skrip PowerShell menggunakan jq. Edit C:\HD\jq\jq-win64 di bawah ini untuk mencerminkan jalur dan versi jq Anda yang sebenarnya.

      $epoch = Get-Date -Year 1970 -Month 1 -Day 1 -Hour 0 -Minute 0 -Second 0
      $now = Get-Date
      $unixTimeStamp = [math]::truncate($now.ToUniversalTime().Subtract($epoch).TotalMilliSeconds)
      $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/configurations?type=livy2-conf&tag=INITIAL" `
        -Credential $creds -UseBasicParsing
      $resp.Content | C:\HD\jq\jq-win64 --arg newtag "version$unixTimeStamp" '.items[] | del(.href, .version, .Config) | .tag |= $newtag | {"Clusters": {"desired_config": .}}' > newconfig.json
      

      Jq digunakan untuk mengubah data yang diambil dari HDInsight menjadi templat konfigurasi baru. Secara khusus, contoh-contoh ini melakukan tindakan berikut:

    • Membuat nilai unik yang berisi untai "versi" dan tanggal, yang disimpan di newtag.

    • Membuat dokumen akar untuk konfigurasi baru.

    • Mendapatkan konten larik .items[] dan menambahkannya di bawah elemen desired_config.

    • Menghapus elemen href, version, dan Config, karena elemen-elemen ini tidak diperlukan untuk mengirimkan konfigurasi baru.

    • Menambahkan elemen tag dengan nilai version#################. Bagian numerik didasarkan pada tanggal saat ini. Setiap konfigurasi harus memiliki tag yang unik.

      Terakhir, data disimpan ke dokumen newconfig.json. Struktur dokumen akan tampak mirip dengan contoh berikut:

      {
        "Clusters": {
          "desired_config": {
            "tag": "version1552064778014",
            "type": "livy2-conf",
            "properties": {
              "livy.environment": "production",
              "livy.impersonation.enabled": "true",
              "livy.repl.enableHiveContext": "true",
              "livy.server.csrf_protection.enabled": "true",
                ....
            },
          },
        }
      }
      
  2. Edit newconfig.json.
    Buka dokumen newconfig.json dan ubah/tambahkan nilai dalam objek properties. Contoh berikut mengubah nilai "livy.server.csrf_protection.enabled" dari "true" ke "false".

    "livy.server.csrf_protection.enabled": "false",
    

    Simpan file setelah Anda selesai melakukan modifikasi.

  3. Kirim newconfig.json.
    Gunakan perintah berikut untuk mengirimkan konfigurasi yang diperbarui ke Ambari.

    curl -u admin:$password -sS -H "X-Requested-By: ambari" -X PUT -d @newconfig.json "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName"
    
    $newConfig = Get-Content .\newconfig.json
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName" `
        -Credential $creds -UseBasicParsing `
        -Method PUT `
        -Headers @{"X-Requested-By" = "ambari"} `
        -Body $newConfig
    $resp.Content
    

    Perintah ini mengirimkan isi file newconfig.json ke klaster sebagai konfigurasi baru. Permintaan menampilkan dokumen JSON. Elemen versionTag dalam dokumen ini harus sesuai dengan versi yang Anda kirimkan, dan objek konfigurasi berisi perubahan konfigurasi yang Anda minta.

Memulai ulang komponen layanan

Pada titik ini, UI web Ambari menunjukkan layanan Spark perlu dimulai ulang sebelum konfigurasi baru dapat diterapkan. Gunakan langkah-langkah berikut untuk memulai ulang layanan.

  1. Gunakan yang berikut ini untuk mengaktifkan mode pemeliharaan untuk layanan Spark2:

    curl -u admin:$password -sS -H "X-Requested-By: ambari" \
    -X PUT -d '{"RequestInfo": {"context": "turning on maintenance mode for SPARK2"},"Body": {"ServiceInfo": {"maintenance_state":"ON"}}}' \
    "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2"
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2" `
        -Credential $creds -UseBasicParsing `
        -Method PUT `
        -Headers @{"X-Requested-By" = "ambari"} `
        -Body '{"RequestInfo": {"context": "turning on maintenance mode for SPARK2"},"Body": {"ServiceInfo": {"maintenance_state":"ON"}}}'
    
  2. Memverifikasi mode pemeliharaan

    Perintah ini mengirim dokumen JSON ke server yang mengaktifkan mode pemeliharaan. Anda dapat memverifikasi apakah layanan sekarang dalam mode pemeliharaan menggunakan permintaan berikut:

    curl -u admin:$password -sS -H "X-Requested-By: ambari" \
    "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2" \
    | jq .ServiceInfo.maintenance_state
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2" `
        -Credential $creds -UseBasicParsing
    $respObj = ConvertFrom-Json $resp.Content
    $respObj.ServiceInfo.maintenance_state
    

    Nilai yang ditampilkan adalah ON.

  3. Selanjutnya, gunakan yang berikut ini untuk mematikan layanan Spark2:

    curl -u admin:$password -sS -H "X-Requested-By: ambari" \
    -X PUT -d '{"RequestInfo":{"context":"_PARSE_.STOP.SPARK2","operation_level":{"level":"SERVICE","cluster_name":"CLUSTERNAME","service_name":"SPARK"}},"Body":{"ServiceInfo":{"state":"INSTALLED"}}}' \
    "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2"
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2" `
        -Credential $creds -UseBasicParsing `
        -Method PUT `
        -Headers @{"X-Requested-By" = "ambari"} `
        -Body '{"RequestInfo":{"context":"_PARSE_.STOP.SPARK2","operation_level":{"level":"SERVICE","cluster_name":"CLUSTERNAME","service_name":"SPARK"}},"Body":{"ServiceInfo":{"state":"INSTALLED"}}}'
    $resp.Content
    

    Responsnya mirip dengan contoh berikut:

    {
        "href" : "http://10.0.0.18:8080/api/v1/clusters/CLUSTERNAME/requests/29",
        "Requests" : {
            "id" : 29,
            "status" : "Accepted"
        }
    }
    

    Penting

    Nilai href yang ditampilkan oleh URI ini menggunakan alamat IP internal node klaster. Untuk menggunakannya dari luar klaster, ganti bagian 10.0.0.18:8080 dengan FQDN klaster.

  4. Pastikan permintaan.
    Edit perintah di bawah ini dengan mengganti 29 dengan nilai sebenarnya untuk id yang ditampilkan dari langkah sebelumnya. Perintah berikut mengambil status permintaan:

    curl -u admin:$password -sS -H "X-Requested-By: ambari" \
    "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/requests/29" \
    | jq .Requests.request_status
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/requests/29" `
        -Credential $creds -UseBasicParsing
    $respObj = ConvertFrom-Json $resp.Content
    $respObj.Requests.request_status
    

    Respons COMPLETED menunjukkan bahwa permintaan telah selesai.

  5. Setelah permintaan sebelumnya selesai, gunakan yang berikut ini untuk memulai layanan Spark2.

    curl -u admin:$password -sS -H "X-Requested-By: ambari" \
    -X PUT -d '{"RequestInfo":{"context":"_PARSE_.START.SPARK2","operation_level":{"level":"SERVICE","cluster_name":"CLUSTERNAME","service_name":"SPARK"}},"Body":{"ServiceInfo":{"state":"STARTED"}}}' \
    "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2"
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2" `
        -Credential $creds -UseBasicParsing `
        -Method PUT `
        -Headers @{"X-Requested-By" = "ambari"} `
        -Body '{"RequestInfo":{"context":"_PARSE_.START.SPARK2","operation_level":{"level":"SERVICE","cluster_name":"CLUSTERNAME","service_name":"SPARK"}},"Body":{"ServiceInfo":{"state":"STARTED"}}}'
    $resp.Content
    

    Layanan ini sekarang menggunakan konfigurasi baru.

  6. Terakhir, gunakan yang berikut ini untuk mematikan mode pemeliharaan.

    curl -u admin:$password -sS -H "X-Requested-By: ambari" \
    -X PUT -d '{"RequestInfo": {"context": "turning off maintenance mode for SPARK2"},"Body": {"ServiceInfo": {"maintenance_state":"OFF"}}}' \
    "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2"
    
    $resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/SPARK2" `
        -Credential $creds -UseBasicParsing `
        -Method PUT `
        -Headers @{"X-Requested-By" = "ambari"} `
        -Body '{"RequestInfo": {"context": "turning off maintenance mode for SPARK2"},"Body": {"ServiceInfo": {"maintenance_state":"OFF"}}}'
    

Langkah berikutnya

Untuk referensi lengkap tentang REST API, lihat Apache Ambari API Reference V1. Lihat juga Otorisasi pengguna untuk Apache Ambari Views