Apache Ambari REST API'sini kullanarak HDInsight kümelerini yönetme

Azure HDInsight'ta Apache Hadoop kümelerini yönetmek ve izlemek için Apache Ambari REST API'sini kullanmayı öğrenin.

Apache Ambari nedir?

Apache Ambari, REST API'leri tarafından yedeklenen kullanımı kolay bir web kullanıcı arabirimi sağlayarak Hadoop kümelerinin yönetimini ve izlenmesini basitleştirir. Ambari varsayılan olarak Linux tabanlı HDInsight kümeleri ile sağlanır.

Önkoşullar

Ambari REST API için Temel Tekdüzen Kaynak Tanımlayıcısı

HDInsight https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters/CLUSTERNAMECLUSTERNAME üzerindeki Ambari REST API'sinin temel Tekdüzen Kaynak Tanımlayıcısı (URI), burada kümenizin adıdır. URI'lerdeki küme adları büyük/küçük harfe duyarlıdır. URI'ninCLUSTERNAME.azurehdinsight.net () tam etki alanı adı (FQDN) bölümündeki küme adı büyük/küçük harfe duyarlı olmasa da, URI'deki diğer oluşumlar büyük/küçük harfe duyarlıdır.

Kimlik Doğrulaması

HDInsight üzerinde Ambari'ye bağlanmak için HTTPS gerekir. Küme oluşturma sırasında sağladığınız yönetici hesabı adını (varsayılan değer yöneticidir) ve parolayı kullanın.

Kurumsal Güvenlik Paketi kümeleri için yerine admingibi username@domain.onmicrosoft.comtam kullanıcı adı kullanın.

Örnekler

Kurulum (Kimlik bilgilerini koru)

Her örnekte yeniden girmemek için kimlik bilgilerinizi koruyun. Küme adı ayrı bir adımda korunur.

A. Bash
öğesini gerçek parolanızla değiştirerek PASSWORD aşağıdaki betiği düzenleyin. Ardından komutunu girin.

export password='PASSWORD'

B. PowerShell

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

Doğru büyük/küçük harfe ayrılmış küme adını belirleme

Küme adının gerçek büyük/küçük harf sayısı beklediğinizden farklı olabilir. Buradaki adımlarda gerçek büyük/küçük harf gösterilir ve sonraki tüm örnekler için bir değişkende depolanır.

Değerini küme adınızla değiştirmek CLUSTERNAME için aşağıdaki betikleri düzenleyin. Ardından komutunu girin. (FQDN için küme adı büyük/küçük harfe duyarlı değildir.)

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

JSON verilerini ayrıştırma

Aşağıdaki örnek JSON yanıt belgesini ayrıştırmak ve yalnızca health_report sonuçlardaki bilgileri görüntülemek için jq veya ConvertFrom-Json kullanır.

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

Küme düğümlerinin FQDN'sini alma

Küme düğümünün tam etki alanı adını (FQDN) bilmeniz gerekebilir. Aşağıdaki örnekleri kullanarak kümedeki çeşitli düğümler için FQDN'yi kolayca alabilirsiniz:

Tüm düğümler

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

Baş düğümler

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

Çalışan düğümleri

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

Zookeeper düğümleri

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

Küme düğümlerinin iç IP adresini alma

Bu bölümdeki örnekler tarafından döndürülen IP adreslerine İnternet üzerinden doğrudan erişilemez. Bunlara yalnızca HDInsight kümesini içeren Azure Sanal Ağ içinden erişilebilir.

HDInsight ve sanal ağlarla çalışma hakkında daha fazla bilgi için bkz. HDInsight için sanal ağ planlama.

IP adresini bulmak için küme düğümlerinin iç tam etki alanı adını (FQDN) bilmeniz gerekir. FQDN'yi aldıktan sonra konağın IP adresini alabilirsiniz. Aşağıdaki örnekler ilk olarak tüm konak düğümlerinin FQDN'sini Ambari'ye sorgular. Ardından ambari'yi her konağın IP adresi için sorgular.

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

Varsayılan depolama alanını alma

HDInsight kümeleri varsayılan depolama alanı olarak bir Azure Depolama Hesabı veya Data Lake Storage kullanmalıdır. Küme oluşturulduktan sonra bu bilgileri almak için Ambari'yi kullanabilirsiniz. Örneğin, HDInsight dışındaki kapsayıcıya veri okumak/yazmak istiyorsanız.

Aşağıdaki örnekler kümeden varsayılan depolama yapılandırmasını alır:

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'

Önemli

Bu örnekler, bu bilgileri içeren sunucuya (service_config_version=1) uygulanan ilk yapılandırmayı döndürür. Küme oluşturulduktan sonra değiştirilmiş bir değeri alırsanız yapılandırma sürümlerini listelemeniz ve en son sürümü almanız gerekebilir.

Dönüş değeri aşağıdaki örneklerden birine benzer:

  • wasbs://CONTAINER@ACCOUNTNAME.blob.core.windows.net - Bu değer, kümenin varsayılan depolama için bir Azure Depolama hesabı kullandığını gösterir. ACCOUNTNAME Değer, depolama hesabının adıdır. Bölümü CONTAINER , depolama hesabındaki blob kapsayıcısının adıdır. Kapsayıcı, küme için HDFS uyumlu depolama alanının köküdür.

  • abfs://CONTAINER@ACCOUNTNAME.dfs.core.windows.net- Bu değer, kümenin varsayılan depolama için Azure Data Lake Storage 2. Nesil kullandığını gösterir. ACCOUNTNAME ve CONTAINER değerleri, daha önce bahsedilen Azure Depolama ile aynı anlamlara sahiptir.

  • adl://home- Bu değer, kümenin varsayılan depolama için Azure Data Lake Storage 1. Nesil kullandığını gösterir.

    Data Lake Storage hesap adını bulmak için aşağıdaki örnekleri kullanın:

    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'
    

    Dönüş değeri ile benzerdir ACCOUNTNAME.azuredatalakestore.netve burada ACCOUNTNAME Data Lake Storage hesabının adıdır.

    kümenin depolamasını içeren Data Lake Storage dizinini bulmak için aşağıdaki örnekleri kullanın:

    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'
    

    Dönüş değeri ile /clusters/CLUSTERNAME/benzerdir. Bu değer, Data Lake Storage hesabı içindeki bir yoldur. Bu yol, küme için HDFS uyumlu dosya sisteminin köküdür.

Not

Azure PowerShell tarafından sağlanan Get-AzHDInsightCluster cmdlet'i de kümenin depolama bilgilerini döndürür.

Tüm yapılandırmaları alma

Kümeniz için kullanılabilen yapılandırmaları alın.

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

Bu örnek, yüklü bileşenler için geçerli yapılandırmayı içeren bir JSON belgesi döndürür. Etiket değerine bakın. Aşağıdaki örnek, Spark küme türünden döndürülen verilerden bir alıntıdır.

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

Belirli bir bileşen için yapılandırma alma

İlgilendiğiniz bileşenin yapılandırmasını alın. Aşağıdaki örnekte değerini önceki istekten döndürülen etiket değeriyle değiştirin INITIAL .

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

Bu örnek, bileşen için livy2-conf geçerli yapılandırmayı içeren bir JSON belgesi döndürür.

Yapılandırmayı güncelleştirme

  1. oluşturun newconfig.json.
    öğesini değiştirin ve aşağıdaki komutları girin:

    • değerini yeni bileşenle değiştirin livy2-conf .

    • değerini, Tüm yapılandırmaları al'dan alınan tag gerçek değerle değiştirinINITIAL.

      A. 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
      PowerShell betiği jq kullanır. Jq'nun gerçek yolunu ve sürümünü yansıtacak şekilde aşağıda düzenleyinC:\HD\jq\jq-win64.

      $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, HDInsight'tan alınan verileri yeni bir yapılandırma şablonuna dönüştürmek için kullanılır. Özellikle, bu örnekler aşağıdaki eylemleri gerçekleştirir:

    • "version" dizesini ve içinde newtagdepolanan tarihi içeren benzersiz bir değer oluşturur.

    • Yeni yapılandırma için bir kök belge oluşturur.

    • Dizinin içeriğini .items[] alır ve desired_config öğesinin altına ekler.

    • hrefBu öğeler yeni bir yapılandırma göndermek için gerekli olmadığından , versionve Config öğelerini siler.

    • değerine version#################sahip bir tag öğe ekler. Sayısal bölüm geçerli tarihi temel alır. Her yapılandırmanın benzersiz bir etiketi olmalıdır.

      Son olarak, veriler belgeye kaydedilir newconfig.json . Belge yapısı aşağıdaki örneğe benzer görünmelidir:

      {
        "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. öğesini düzenleyin newconfig.json.
    Belgeyi newconfig.json açın ve nesnedeki properties değerleri değiştirin/ekleyin. Aşağıdaki örnek değerini olarak "true""false"değiştirir"livy.server.csrf_protection.enabled".

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

    Değişiklik yapmayı bitirdiğinizde dosyayı kaydedin.

  3. gönderin newconfig.json.
    Güncelleştirilmiş yapılandırmayı Ambari'ye göndermek için aşağıdaki komutları kullanın.

    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
    

    Bu komutlar , newconfig.json dosyasının içeriğini yeni yapılandırma olarak kümeye gönderir. İstek bir JSON belgesi döndürür. Bu belgedeki versionTag öğesi gönderdiğiniz sürümle eşleşmelidir ve configs nesnesi istediğiniz yapılandırma değişikliklerini içerir.

Hizmet bileşenini yeniden başlatma

Bu noktada Ambari web kullanıcı arabirimi, yeni yapılandırmanın etkili olması için Spark hizmetinin yeniden başlatılması gerektiğini gösterir. Hizmeti yeniden başlatmak için aşağıdaki adımları kullanın.

  1. Spark2 hizmeti için bakım modunu etkinleştirmek için aşağıdakileri kullanın:

    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. Bakım modunu doğrulama

    Bu komutlar, bakım modunu açan sunucuya bir JSON belgesi gönderir. Aşağıdaki isteği kullanarak hizmetin artık bakım modunda olduğunu doğrulayabilirsiniz:

    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
    

    Dönüş değeri şeklindedir ON.

  3. Ardından, Spark2 hizmetini kapatmak için aşağıdakileri kullanın:

    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
    

    Yanıt aşağıdaki örneğe benzer:

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

    Önemli

    href Bu URI tarafından döndürülen değer, küme düğümünün iç IP adresini kullanıyor. Küme dışından kullanmak için bölümünü kümenin 10.0.0.18:8080 FQDN'siyle değiştirin.

  4. İsteği doğrulayın.
    değerini önceki adımda döndürülen gerçek değerle id değiştirerek 29 aşağıdaki komutu düzenleyin. Aşağıdaki komutlar isteğin durumunu alır:

    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
    

    yanıtı COMPLETED , isteğin tamamlandığını gösterir.

  5. Önceki istek tamamlandıktan sonra Spark2 hizmetini başlatmak için aşağıdakileri kullanın.

    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
    

    Hizmet artık yeni yapılandırmayı kullanıyor.

  6. Son olarak, bakım modunu kapatmak için aşağıdakileri kullanın.

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

Sonraki adımlar

REST API'nin tam başvurusu için bkz. Apache Ambari API Başvurusu V1. Ayrıca bkz. Apache Ambari Görünümleri için kullanıcıları yetkilendirme