Zarządzanie klastrami usługi HDInsight przy użyciu interfejsu API REST apache Ambari
Dowiedz się, jak używać interfejsu API REST apache Ambari do zarządzania klastrami Apache Hadoop i monitorowania ich w usłudze Azure HDInsight.
Co to jest Apache Ambari
System Apache Ambari upraszcza zarządzanie klastrami Hadoop i ich monitorowanie, zapewniając łatwy w użyciu internetowy interfejs użytkownika wspierany przez interfejsy API REST. System Ambari jest domyślnie dostarczany z klastrami usługi HDInsight opartymi na systemie Linux.
Wymagania wstępne
Klaster Hadoop w usłudze HDInsight. Zobacz Wprowadzenie do usługi HDInsight w systemie Linux.
Powłoka Bash w systemie Ubuntu w systemie Windows 10. Przykłady w tym artykule korzystają z powłoki Bash w systemie Windows 10. Aby uzyskać instrukcje instalacji, zobacz przewodnik instalacji Podsystem Windows dla systemu Linux dla systemu Windows 10. Działają również inne powłoki systemu Unix. Przykłady z niewielkimi modyfikacjami mogą działać w wierszu polecenia systemu Windows. Możesz też użyć programu Windows PowerShell.
jq, procesor JSON wiersza polecenia. Zobacz: https://stedolan.github.io/jq/.
Windows PowerShell. Możesz też użyć powłoki Bash.
Podstawowy jednolity identyfikator zasobu dla interfejsu API REST systemu Ambari
Podstawowy identyfikator URI (Uniform Resource Identifier) dla interfejsu API REST systemu Ambari w usłudze HDInsight to https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters/CLUSTERNAME
, gdzie CLUSTERNAME
jest nazwą klastra. W nazwach klastrów w identyfikatorach URI jest rozróżniana wielkość liter. Podczas gdy nazwa klastra w w pełni kwalifikowanej części nazwy domeny (FQDN) identyfikatora URI (CLUSTERNAME.azurehdinsight.net
) jest bez uwzględniania wielkości liter, inne wystąpienia w identyfikatorze URI są uwzględniane wielkości liter.
Uwierzytelnianie
Połączenie do systemu Ambari w usłudze HDInsight wymaga protokołu HTTPS. Użyj nazwy konta administratora (wartość domyślna to administrator) i hasła podanego podczas tworzenia klastra.
W przypadku klastrów pakietu Enterprise Security zamiast admin
użyj w pełni kwalifikowanej nazwy użytkownika, takiej jak username@domain.onmicrosoft.com
.
Przykłady
Konfiguracja (zachowywanie poświadczeń)
Zachowaj poświadczenia, aby uniknąć ponownego wprowadzania ich dla każdego przykładu. Nazwa klastra jest zachowywana w osobnym kroku.
Odp. Bash
Zmodyfikuj skrypt, zastępując PASSWORD
element rzeczywistym hasłem. Następnie wprowadź polecenie .
export password='PASSWORD'
B. PowerShell
$creds = Get-Credential -UserName "admin" -Message "Enter the HDInsight login"
Zidentyfikuj poprawnie przypadek nazwy klastra
Rzeczywista wielkość liter nazwy klastra może być inna niż oczekiwano. Poniższe kroki przedstawiają rzeczywistą wielkość liter, a następnie przechowują ją w zmiennej dla wszystkich późniejszych przykładów.
Edytuj skrypty, aby zastąpić CLUSTERNAME
ciąg nazwą klastra. Następnie wprowadź polecenie . (Nazwa klastra nazwy FQDN nie uwzględnia wielkości liter).
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
Analizowanie danych JSON
W poniższym przykładzie użyto formatu jq lub ConvertFrom-Json , aby przeanalizować dokument odpowiedzi JSON i wyświetlić tylko health_report
informacje z wyników.
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
Pobieranie nazwy FQDN węzłów klastra
Może być konieczne poznanie w pełni kwalifikowanej nazwy domeny (FQDN) węzła klastra. Nazwę FQDN dla różnych węzłów w klastrze można łatwo pobrać, korzystając z następujących przykładów:
Wszystkie węzły
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
Węzły główne
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
Węzły robocze
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
Węzły dozorców
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
Uzyskiwanie wewnętrznego adresu IP węzłów klastra
Adresy IP zwracane przez przykłady w tej sekcji nie są bezpośrednio dostępne za pośrednictwem Internetu. Są one dostępne tylko w usłudze Azure Virtual Network, która zawiera klaster usługi HDInsight.
Aby uzyskać więcej informacji na temat pracy z usługą HDInsight i sieciami wirtualnymi, zobacz Planowanie sieci wirtualnej dla usługi HDInsight.
Aby znaleźć adres IP, należy znać wewnętrzną w pełni kwalifikowaną nazwę domeny (FQDN) węzłów klastra. Po utworzeniu nazwy FQDN można uzyskać adres IP hosta. W poniższych przykładach najpierw wykonaj zapytanie o nazwę Ambari dla nazwy FQDN wszystkich węzłów hosta. Następnie wysyła zapytanie do systemu Ambari pod kątem adresu IP każdego hosta.
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"
}
Pobieranie magazynu domyślnego
Klastry usługi HDInsight muszą używać konta usługi Azure Storage lub usługi Data Lake Storage jako domyślnego magazynu. Możesz użyć narzędzia Ambari, aby pobrać te informacje po utworzeniu klastra. Jeśli na przykład chcesz odczytywać/zapisywać dane w kontenerze poza usługą HDInsight.
Poniższe przykłady pobierają domyślną konfigurację magazynu z klastra:
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'
Ważne
Te przykłady zwracają pierwszą konfigurację zastosowaną do serwera (service_config_version=1
), który zawiera te informacje. W przypadku pobrania wartości, która została zmodyfikowana po utworzeniu klastra, może być konieczne wyświetlenie listy wersji konfiguracji i pobranie najnowszej.
Wartość zwracana jest podobna do jednej z następujących przykładów:
wasbs://CONTAINER@ACCOUNTNAME.blob.core.windows.net
— Ta wartość wskazuje, że klaster używa konta usługi Azure Storage do przechowywania domyślnego. WartośćACCOUNTNAME
jest nazwą konta magazynu. CzęśćCONTAINER
jest nazwą kontenera obiektów blob na koncie magazynu. Kontener jest katalogem głównym magazynu zgodnego z systemem plików HDFS dla klastra.abfs://CONTAINER@ACCOUNTNAME.dfs.core.windows.net
— Ta wartość wskazuje, że klaster używa usługi Azure Data Lake Storage Gen2 do przechowywania domyślnego. WartościACCOUNTNAME
iCONTAINER
mają takie same znaczenie jak w przypadku usługi Azure Storage wymienionej wcześniej.adl://home
— Ta wartość wskazuje, że klaster używa usługi Azure Data Lake Storage Gen1 do przechowywania domyślnego.Aby znaleźć nazwę konta usługi Data Lake Storage, użyj następujących przykładów:
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'
Wartość zwracana jest podobna do
ACCOUNTNAME.azuredatalakestore.net
, gdzieACCOUNTNAME
jest nazwą konta usługi Data Lake Storage.Aby znaleźć katalog w usłudze Data Lake Storage, który zawiera magazyn dla klastra, użyj następujących przykładów:
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'
Zwracana wartość jest podobna do
/clusters/CLUSTERNAME/
. Ta wartość jest ścieżką w ramach konta usługi Data Lake Storage. Ta ścieżka jest katalogem głównym systemu plików zgodnego z systemem plików HDFS dla klastra.
Uwaga
Polecenie cmdlet Get-AzHDInsightCluster udostępnione przez program Azure PowerShell zwraca również informacje o magazynie klastra.
Pobieranie wszystkich konfiguracji
Pobierz konfiguracje dostępne dla klastra.
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
Ten przykład zwraca dokument JSON zawierający bieżącą konfigurację zainstalowanych składników. Zobacz wartość tagu. Poniższy przykład to fragment danych zwracanych z typu klastra Spark.
"jupyter-site" : {
"tag" : "INITIAL",
"version" : 1
},
"livy2-client-conf" : {
"tag" : "INITIAL",
"version" : 1
},
"livy2-conf" : {
"tag" : "INITIAL",
"version" : 1
},
Pobieranie konfiguracji dla określonego składnika
Uzyskaj konfigurację składnika, który cię interesuje. W poniższym przykładzie zastąp ciąg INITIAL
wartością tagu zwróconą z poprzedniego żądania.
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
Ten przykład zwraca dokument JSON zawierający bieżącą konfigurację składnika livy2-conf
.
Aktualizowanie konfiguracji
Utwórz plik
newconfig.json
.
Zmodyfikuj, a następnie wprowadź następujące polecenia:Zastąp
livy2-conf
element nowym składnikiem.Zastąp
INITIAL
element wartością rzeczywistą pobraną ztag
polecenia Pobierz wszystkie konfiguracje.Odp. 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
Skrypt programu PowerShell używa języka jq. EdytujC:\HD\jq\jq-win64
poniżej, aby odzwierciedlić rzeczywistą ścieżkę i wersję jq.$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
Zestaw Jq służy do przekształcania danych pobranych z usługi HDInsight w nowy szablon konfiguracji. W szczególności te przykłady wykonują następujące czynności:
Tworzy unikatową wartość zawierającą ciąg "version" i datę, która jest przechowywana w pliku
newtag
.Tworzy dokument główny dla nowej konfiguracji.
Pobiera zawartość
.items[]
tablicy i dodaje ją pod elementem desired_config .href
Usuwa elementy ,version
iConfig
, ponieważ te elementy nie są potrzebne do przesłania nowej konfiguracji.tag
Dodaje element z wartościąversion#################
. Część liczbowa jest oparta na bieżącej dacie. Każda konfiguracja musi mieć unikatowy tag.Na koniec dane są zapisywane w dokumencie
newconfig.json
. Struktura dokumentu powinna wyglądać podobnie do poniższego przykładu:{ "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", .... }, }, } }
Edytuj
newconfig.json
plik .
Otwórz dokument i zmodyfikujnewconfig.json
properties
/dodaj wartości w obiekcie. Poniższy przykład zmienia wartość"livy.server.csrf_protection.enabled"
z"true"
na"false"
."livy.server.csrf_protection.enabled": "false",
Zapisz plik po zakończeniu wprowadzania modyfikacji.
Prześlij plik
newconfig.json
.
Użyj następujących poleceń, aby przesłać zaktualizowaną konfigurację do systemu 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
Te polecenia przesyłają zawartość pliku newconfig.json do klastra jako nową konfigurację. Żądanie zwraca dokument JSON. Element versionTag w tym dokumencie powinien być zgodny z przesłaną wersją, a obiekt konfiguracji zawiera żądane zmiany konfiguracji.
Ponowne uruchamianie składnika usługi
W tym momencie internetowy interfejs użytkownika systemu Ambari wskazuje, że usługa Spark musi zostać ponownie uruchomiona, zanim nowa konfiguracja będzie mogła obowiązywać. Wykonaj poniższe kroki, aby ponownie uruchomić usługę.
Użyj następujących elementów, aby włączyć tryb konserwacji dla usługi 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"}}}'
Weryfikowanie trybu konserwacji
Te polecenia wysyłają dokument JSON do serwera, który włącza tryb konserwacji. Możesz sprawdzić, czy usługa jest teraz w trybie konserwacji, korzystając z następującego żądania:
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
Zwracana wartość to
ON
.Następnie użyj następującego polecenia, aby wyłączyć usługę 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
Odpowiedź jest podobna do poniższego przykładu:
{ "href" : "http://10.0.0.18:8080/api/v1/clusters/CLUSTERNAME/requests/29", "Requests" : { "id" : 29, "status" : "Accepted" } }
Ważne
Wartość zwrócona
href
przez ten identyfikator URI używa wewnętrznego adresu IP węzła klastra. Aby używać go spoza klastra, zastąp10.0.0.18:8080
część nazwą FQDN klastra.Sprawdź żądanie.
Zmodyfikuj poniższe polecenie, zastępując29
wartość rzeczywistą wartościąid
zwróconą z poprzedniego kroku. Następujące polecenia pobierają stan żądania: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
Odpowiedź
COMPLETED
wskazuje, że żądanie zostało zakończone.Po zakończeniu poprzedniego żądania użyj następującego polecenia, aby uruchomić usługę 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
Usługa korzysta teraz z nowej konfiguracji.
Na koniec użyj poniższej instrukcji, aby wyłączyć tryb konserwacji.
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"}}}'
Następne kroki
Aby uzyskać pełną dokumentację interfejsu API REST, zobacz Apache Ambari API Reference V1 (Dokumentacja interfejsu API apache Ambari w wersji 1). Zobacz również Autoryzowanie użytkowników dla widoków systemu Apache Ambari