Gestire i cluster HDInsight mediante l'API REST AmbariManage HDInsight clusters by using the Ambari REST API

Informazioni sull'uso dell'API REST per gestire e monitorare i cluster Hadoop in Azure HDInsight.Learn how to use the Ambari REST API to manage and monitor Hadoop clusters in Azure HDInsight.

Apache Ambari semplifica la gestione e il monitoraggio di un cluster Hadoop grazie a un'interfaccia utente Web facile da usare e alle API REST.Apache Ambari simplifies the management and monitoring of a Hadoop cluster by providing an easy to use web UI and REST API. Ambari è incluso nei cluster HDInsight che usano il sistema operativo Linux.Ambari is included on HDInsight clusters that use the Linux operating system. È possibile usare Ambari per monitorare il cluster e apportare modifiche alla configurazione.You can use Ambari to monitor the cluster and make configuration changes.

Informazioni su AmbariWhat is Ambari

Apache Ambari fornisce l'interfaccia utente Web che può essere usata per la gestione e il monitoraggio dei cluster Hadoop.Apache Ambari provides web UI that can be used to manage and monitor Hadoop clusters. Gli sviluppatori possono integrare queste funzionalità nelle applicazioni usando le API REST Ambari.Developers can integrate these capabilities into their applications by using the Ambari REST APIs.

Ambari viene fornito per impostazione predefinita con i cluster HDInsight basati su Linux.Ambari is provided by default with Linux-based HDInsight clusters.

Come usare l'API REST AmbariHow to use the Ambari REST API

Importante

Le informazioni e gli esempi descritti in questo documento richiedono un cluster HDInsight che usa il sistema operativo Linux.The information and examples in this document require an HDInsight cluster that uses Linux operating system. Per altre informazioni, vedere Guida introduttiva di HDInsight.For more information, see Get started with HDInsight.

In questo documento vengono descritti gli esempi per Bourne shell (bash) e PowerShell.The examples in this document are provided for both the Bourne shell (bash) and PowerShell. Gli esempi Bash sono stati testati con GNU bash versione 4.3.11 ma dovrebbero funzionare anche con altre shell Unix.The bash examples were tested with GNU bash version 4.3.11, but should work with other Unix shells. Gli esempi PowerShell sono stati testati con PowerShell 5.0 ma dovrebbero funzionare anche con PowerShell 3.0 o versione successiva.The PowerShell examples were tested with PowerShell 5.0, but should work with PowerShell 3.0 or higher.

Se si usa Bourne shell (bash) è necessario disporre di:If using the Bourne shell (Bash), you must have the following installed:

  • cURL: cURL è un'utilità che può essere usata per lavorare con le API REST dalla riga di comando.cURL: cURL is a utility that can be used to work with REST APIs from the command line. In questo documento viene usata per comunicare con l'API REST Ambari.In this document, it is used to communicate with the Ambari REST API.

Sia con bash che con PowerShell è necessario che sia installato anche jq.Whether using Bash or PowerShell, you must also have jq installed. Jq è un'utilità per lavorare con documenti JSON.Jq is a utility for working with JSON documents. Viene usata in tutti gli esempi bash e in uno degli esempi PowerShell.It is used in all the Bash examples, and one of the PowerShell examples.

URI di base per l'API REST AmbariBase URI for Ambari Rest API

L'URI di base per l'API REST Ambari in HDInsight è https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters/CLUSTERNAME, dove CLUSTERNAME è il nome del cluster in uso.The base URI for the Ambari REST API on HDInsight is https://CLUSTERNAME.azurehdinsight.net/api/v1/clusters/CLUSTERNAME, where CLUSTERNAME is the name of your cluster.

Importante

A differenza delle altre occorrenze nell'URI, nel nome del cluster nella parte del nome di dominio completo (FQDN) dell'URI (CLUSTERNAME.azurehdinsight.net) non viene fatta distinzione tra maiuscole e minuscole.While the cluster name in the fully qualified domain name (FQDN) part of the URI (CLUSTERNAME.azurehdinsight.net) is case-insensitive, other occurrences in the URI are case-sensitive. Ad esempio, se il cluster è denominato MyCluster, son validi gli URI seguenti:For example, if your cluster is named MyCluster, the following are valid URIs:

https://mycluster.azurehdinsight.net/api/v1/clusters/MyCluster

https://MyCluster.azurehdinsight.net/api/v1/clusters/MyCluster

Gli URI seguenti restituiscono un errore perché nella seconda occorrenza del nome non vengono usate le maiuscole/minuscole corrette.The following URIs return an error because the second occurrence of the name is not the correct case.

https://mycluster.azurehdinsight.net/api/v1/clusters/mycluster

https://MyCluster.azurehdinsight.net/api/v1/clusters/mycluster

AutenticazioneAuthentication

La connessione ad Ambari su HDInsight richiede HTTPS.Connecting to Ambari on HDInsight requires HTTPS. Usare il nome dell'account amministratore (il valore predefinito è admin) e la password forniti durante la creazione del cluster.Use the admin account name (the default is admin) and password you provided during cluster creation.

Esempi: autenticazione e analisi di JSONExamples: Authentication and parsing JSON

Gli esempi seguenti illustrano come effettuare una richiesta GET all'API REST Ambari di base:The following examples demonstrate how to make a GET request against the base Ambari REST API:

curl -u admin -sS -G "https://$CLUSTERNAME.azurehdinsight.net/api/v1/clusters/$CLUSTERNAME"

Importante

Gli esempi bash in questo documento partono dai presupposti seguenti:The Bash examples in this document make the following assumptions:

  • Il nome di accesso per il cluster è il valore predefinito di admin.The login name for the cluster is the default value of admin.
  • $CLUSTERNAME contiene il nome del cluster.$CLUSTERNAME contains the name of the cluster. È possibile impostare questo valore usando set CLUSTERNAME='clustername'You can set this value by using set CLUSTERNAME='clustername'
  • Quando richiesto, immettere la password per l'accesso al cluster (amministratore).When prompted, enter the password for the cluster login (admin).
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName" `
    -Credential $creds
$resp.Content

Importante

Gli esempi PowerShell in questo documento partono dai presupposti seguenti:The PowerShell examples in this document make the following assumptions:

  • $creds è un oggetto credenziale che contiene la password e l'accesso dell'amministratore per il cluster.$creds is a credential object that contains the admin login and password for the cluster. È possibile impostare questo valore usando $creds = Get-Credential -UserName "admin" -Message "Enter the HDInsight login" e specificando le credenziali quando richiesto.You can set this value by using $creds = Get-Credential -UserName "admin" -Message "Enter the HDInsight login" and providing the credentials when prompted.
  • $clusterName è una stringa che contiene il nome del cluster.$clusterName is a string that contains the name of the cluster. È possibile impostare questo valore usando $clusterName="clustername".You can set this value by using $clusterName="clustername".

Entrambi gli esempi restituiscono un documento JSON che inizia con informazioni simili a quelle nell'esempio seguente:Both examples return a JSON document that begins with information similar to the following example:

{
"href" : "http://10.0.0.10:8080/api/v1/clusters/CLUSTERNAME",
"Clusters" : {
    "cluster_id" : 2,
    "cluster_name" : "CLUSTERNAME",
    "health_report" : {
    "Host/stale_config" : 0,
    "Host/maintenance_state" : 0,
    "Host/host_state/HEALTHY" : 7,
    "Host/host_state/UNHEALTHY" : 0,
    "Host/host_state/HEARTBEAT_LOST" : 0,
    "Host/host_state/INIT" : 0,
    "Host/host_status/HEALTHY" : 7,
    "Host/host_status/UNHEALTHY" : 0,
    "Host/host_status/UNKNOWN" : 0,
    "Host/host_status/ALERT" : 0
    ...

Analisi dei dati JSONParsing JSON data

L'esempio seguente usa jq per analizzare il documento di risposta JSON e visualizzare solo le informazioni health_report dai risultati.The following example uses jq to parse the JSON response document and display only the health_report information from the results.

curl -u admin -sS -G "https://$CLUSTERNAME.azurehdinsight.net/api/v1/clusters/$CLUSTERNAME" \
| jq '.Clusters.health_report'

PowerShell 3.0 e versioni successive mette a disposizione il cmdlet ConvertFrom-Json, che converte il documento JSON in un oggetto più facile da usare da PowerShell.PowerShell 3.0 and higher provides the ConvertFrom-Json cmdlet, which converts the JSON document into an object that is easier to work with from PowerShell. L'esempio seguente usa ConvertFrom-Json per visualizzare solo le informazioni health_report dai risultati.The following example uses ConvertFrom-Json to display only the health_report information from the results.

$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName" `
    -Credential $creds
$respObj = ConvertFrom-Json $resp.Content
$respObj.Clusters.health_report

Nota

Anche se nella maggior parte degli esempi in questo documento viene usato ConvertFrom-Json per visualizzare gli elementi del documento di risposta, l'esempio sull'aggiornamento della configurazione di Ambari usa jq.While most examples in this document use ConvertFrom-Json to display elements from the response document, the Update Ambari configuration example uses jq. Jq viene usato in questo esempio per creare un nuovo modello dal documento di risposta JSON.Jq is used in this example to construct a new template from the JSON response document.

Per informazioni tecniche complete sull'API REST, vedere la pagina relativa alle informazioni di riferimento per l'API Ambari V1.For a complete reference of the REST API, see Ambari API Reference V1.

Esempio: Ottenere il nome di dominio completo dei nodi del clusterExample: Get the FQDN of cluster nodes

Quando si usa HDInsight, potrebbe essere necessario conoscere il nome di dominio completo di un nodo del cluster.When working with HDInsight, you may need to know the fully qualified domain name (FQDN) of a cluster node. È possibile recuperare con facilità l'FQDN per i diversi nodi del cluster usando gli esempi seguenti:You can easily retrieve the FQDN for the various nodes in the cluster using the following examples:

  • Tutti i nodiAll nodes

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

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

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

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

Esempio: ottenere l'indirizzo IP interno dei nodi del clusterExample: Get the internal IP address of cluster nodes

Importante

Gli indirizzi IP restituiti dagli esempi in questa sezione non sono direttamente accessibili tramite Internet.The IP addresses returned by the examples in this section are not directly accessible over the internet. Sono accessibili solo all'interno della rete virtuale di Azure che contiene il cluster HDInsight.They are only accessible within the Azure Virtual Network that contains the HDInsight cluster.

Per altre informazioni sull'uso di HDInsight e delle reti virtuali vedere Estendere le funzionalità di HDInsight usando una rete virtuale di Azure personalizzata.For more information on working with HDInsight and virtual networks, see Extend HDInsight capabilities by using a custom Azure Virtual Network.

Per trovare l'indirizzo IP, è necessario conoscere il nome di dominio completo (FQDN) interno dei nodi del cluster.To find the IP address, you must know the internal fully qualified domain name (FQDN) of the cluster nodes. Quando è stato ottenuto l'FQDN è possibile ottenere l'indirizzo IP dell'host.Once you have the FQDN, you can then get the IP address of the host. Negli esempi seguenti per prima cosa viene effettuata una query in Ambari per ottenere l'FQDN di tutti i nodi host, poi viene effettuata un'altra query in Ambari per ottenere l'indirizzo IP di ogni host.The following examples first query Ambari for the FQDN of all the host nodes, then query Ambari for the IP address of each host.

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

Suggerimento

Negli esempi precedenti viene richiesta la password.Previous examples prompt you for the password. Questo esempio esegue il comando curl più volte, pertanto la password viene fornita come $PASSWORD per evitare più richieste.This example runs the curl command multiple times, so the password is provided as $PASSWORD to avoid multiple prompts.

$uri = "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/hosts"
$resp = Invoke-WebRequest -Uri $uri -Credential $creds
$respObj = ConvertFrom-Json $resp.Content
foreach($item in $respObj.items) {
    $hostName = [string]$item.Hosts.host_name
    $hostInfoResp = Invoke-WebRequest -Uri "$uri/$hostName" `
        -Credential $creds
    $hostInfoObj = ConvertFrom-Json $hostInfoResp 
    $hostIp = $hostInfoObj.Hosts.ip
    "$hostName <--> $hostIp"
}

Esempio: ottenere la risorsa di archiviazione predefinitaExample: Get the default storage

Quando si crea un cluster HDInsight è necessario usare un account di archiviazione di Azure oppure Data Lake Store come risorsa di archiviazione predefinita per il cluster.When you create an HDInsight cluster, you must use an Azure Storage Account or Data Lake Store as the default storage for the cluster. È possibile usare Ambari per recuperare queste informazioni dopo la creazione del cluster,You can use Ambari to retrieve this information after the cluster has been created. ad esempio se si desidera leggere o scrivere dati nel contenitore all'esterno di HDInsight.For example, if you want to read/write data to the container outside HDInsight.

Negli esempi seguenti viene recuperata la configurazione di archiviazione predefinita dal cluster:The following examples retrieve the default storage configuration from the cluster:

curl -u admin -sS -G "https://$CLUSTERNAME.azurehdinsight.net/api/v1/clusters/$CLUSTERNAME/configurations/service_config_versions?service_name=HDFS&service_config_version=1" \
| jq '.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
$respObj = ConvertFrom-Json $resp.Content
$respObj.items.configurations.properties.'fs.defaultFS'

Importante

Questi esempi restituiscono la prima configurazione applicata al server (service_config_version=1) che contiene queste informazioni.These examples return the first configuration applied to the server (service_config_version=1) which contains this information. Se si recupera un valore che è stato modificato dopo la creazione del cluster, potrebbe essere necessario elencare le versioni della configurazione e recuperare la versione più recente.If you retrieve a value that has been modified after cluster creation, you may need to list the configuration versions and retrieve the latest one.

Il valore restituito è simile a uno degli esempi seguenti:The return value is similar to one of the following examples:

  • wasb://CONTAINER@ACCOUNTNAME.blob.core.windows.net - Questo valore indica che il cluster usa un account di archiviazione di Azure come risorsa di archiviazione predefinita.wasb://CONTAINER@ACCOUNTNAME.blob.core.windows.net - This value indicates that the cluster is using an Azure Storage account for default storage. Il valore ACCOUNTNAME è il nome dell'account di archiviazione.The ACCOUNTNAME value is the name of the storage account. La porzione CONTAINER corrisponde al nome del contenitore BLOB nell'account di archiviazione.The CONTAINER portion is the name of the blob container in the storage account. Il contenitore è la radice della risorsa di archiviazione compatibile con HDFS per il cluster.The container is the root of the HDFS compatible storage for the cluster.

  • adl://home - Questo valore indica che il cluster usa Azure Data Lake Store come risorsa di archiviazione predefinita.adl://home - This value indicates that the cluster is using an Azure Data Lake Store for default storage.

    Per trovare il nome dell'account Data Lake Store, usare gli esempi seguenti:To find the Data Lake Store account name, use the following examples:

    curl -u admin -sS -G "https://$CLUSTERNAME.azurehdinsight.net/api/v1/clusters/$CLUSTERNAME/configurations/service_config_versions?service_name=HDFS&service_config_version=1" \
    | jq '.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
    $respObj = ConvertFrom-Json $resp.Content
    $respObj.items.configurations.properties.'dfs.adls.home.hostname'
    

    Il valore restituito è simile a ACCOUNTNAME.azuredatalakestore.net, dove ACCOUNTNAME è il nome dell'account Data Lake Store.The return value is similar to ACCOUNTNAME.azuredatalakestore.net, where ACCOUNTNAME is the name of the Data Lake Store account.

    Per trovare la directory all'interno di Data Lake Store contenente la risorsa di archiviazione per il cluster, usare gli esempi seguenti:To find the directory within Data Lake Store that contains the storage for the cluster, use the following examples:

    curl -u admin -sS -G "https://$CLUSTERNAME.azurehdinsight.net/api/v1/clusters/$CLUSTERNAME/configurations/service_config_versions?service_name=HDFS&service_config_version=1" \
    | jq '.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
    $respObj = ConvertFrom-Json $resp.Content
    $respObj.items.configurations.properties.'dfs.adls.home.mountpoint'
    

    Il valore restituito è simile a /clusters/CLUSTERNAME/.The return value is similar to /clusters/CLUSTERNAME/. Questo valore è un percorso all'interno dell'account Data Lake Store.This value is a path within the Data Lake Store account. Questo percorso è la radice del file system compatibile con HDFS per il cluster.This path is the root of the HDFS compatible file system for the cluster.

Nota

Il cmdlet Get-AzureRmHDInsightCluster messo a disposizione da Azure PowerShell restituisce anche le informazioni di archiviazione per il cluster.The Get-AzureRmHDInsightCluster cmdlet provided by Azure PowerShell also returns the storage information for the cluster.

Esempio: ottenere una configurazioneExample: Get configuration

  1. Consente di ottenere le configurazioni disponibili per il cluster.Get the configurations that are available for your cluster.

    curl -u admin -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
    $respObj.Content
    

    L'esempio restituisce un documento JSON contenente la configurazione corrente, identificata dal valore tag, per i componenti installati nel cluster.This example returns a JSON document containing the current configuration (identified by the tag value) for the components installed on the cluster. L'esempio di seguito rappresenta un estratto dei dati restituiti da un tipo di cluster Spark.The following example is an excerpt from the data returned from a Spark cluster type.

    "spark-metrics-properties" : {
        "tag" : "INITIAL",
        "user" : "admin",
        "version" : 1
    },
    "spark-thrift-fairscheduler" : {
        "tag" : "INITIAL",
        "user" : "admin",
        "version" : 1
    },
    "spark-thrift-sparkconf" : {
        "tag" : "INITIAL",
        "user" : "admin",
        "version" : 1
    }
    
  2. Consente di ottenere la configurazione del componente a cui si è interessati.Get the configuration for the component that you are interested in. Nell'esempio seguente, sostituire INITIAL con il valore del tag restituito dalla richiesta precedente.In the following example, replace INITIAL with the tag value returned from the previous request.

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

    Questo esempio restituisce un documento JSON che contiene la configurazione corrente del componente core-site.This example returns a JSON document containing the current configuration for the core-site component.

Esempio: aggiornare la configurazioneExample: Update configuration

  1. Ottenere la configurazione corrente, archiviata da Ambari come "configurazione desiderata":Get the current configuration, which Ambari stores as the "desired configuration":

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

    L'esempio restituisce un documento JSON contenente la configurazione corrente, identificata dal valore tag, per i componenti installati nel cluster.This example returns a JSON document containing the current configuration (identified by the tag value) for the components installed on the cluster. L'esempio di seguito rappresenta un estratto dei dati restituiti da un tipo di cluster Spark.The following example is an excerpt from the data returned from a Spark cluster type.

    "spark-metrics-properties" : {
        "tag" : "INITIAL",
        "user" : "admin",
        "version" : 1
    },
    "spark-thrift-fairscheduler" : {
        "tag" : "INITIAL",
        "user" : "admin",
        "version" : 1
    },
    "spark-thrift-sparkconf" : {
        "tag" : "INITIAL",
        "user" : "admin",
        "version" : 1
    }
    

    È necessario copiare il nome del componente, ad esempio spark_thrift_sparkconf, e il valore tag dall'elenco.From this list, you need to copy the name of the component (for example, spark_thrift_sparkconf and the tag value.

  2. Recuperare la configurazione del componente e del tag usando i comandi seguenti:Retrieve the configuration for the component and tag by using the following commands:

    curl -u admin -sS -G "https://$CLUSTERNAME.azurehdinsight.net/api/v1/clusters/$CLUSTERNAME/configurations?type=spark-thrift-sparkconf&tag=INITIAL" \
    | jq --arg newtag $(echo version$(date +%s%N)) '.items[] | del(.href, .version, .Config) | .tag |= $newtag | {"Clusters": {"desired_config": .}}' > newconfig.json
    
    $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=spark-thrift-sparkconf&tag=INITIAL" `
        -Credential $creds
    $resp.Content | jq --arg newtag "version$unixTimeStamp" '.items[] | del(.href, .version, .Config) | .tag |= $newtag | {"Clusters": {"desired_config": .}}' > newconfig.json
    

    Nota

    Sostituire spark-thrift-sparkconf e INITIAL con il componente e il tag di cui si vuole recuperare la configurazione.Replace spark-thrift-sparkconf and INITIAL with the component and tag that you want to retrieve the configuration for.

    Jq viene usato per trasformare i dati recuperati da HDInsight in un nuovo modello di configurazione.Jq is used to turn the data retrieved from HDInsight into a new configuration template. In particolare, questi esempi eseguono le azioni seguenti:Specifically, these examples perform the following actions:

    • Crea un valore univoco contenente la stringa "version" e la data, che viene archiviato in newtag.Creates a unique value containing the string "version" and the date, which is stored in newtag.

    • Crea un documento radice per la nuova configurazione desiderata.Creates a root document for the new desired configuration.

    • Ottiene i contenuti della matrice .items[] e li aggiunge sotto l'elemento desired_config.Gets the contents of the .items[] array and adds it under the desired_config element.

    • Elimina gli elementi href, version e Config perché non sono necessari per l'invio di una nuova configurazione.Deletes the href, version, and Config elements, as these elements aren't needed to submit a new configuration.

    • Aggiunge un elemento tag con un valore di version#################.Adds a tag element with a value of version#################. La parte numerica si basa sulla data corrente.The numeric portion is based on the current date. Ogni configurazione deve avere un tag univoco.Each configuration must have a unique tag.

      Infine i dati vengono salvati nel documento newconfig.json.Finally, the data is saved to the newconfig.json document. La struttura del documento deve essere simile all'esempio di seguito:The document structure should appear similar to the following example:

      {
        "Clusters": {
            "desired_config": {
            "tag": "version1459260185774265400",
            "type": "spark-thrift-sparkconf",
            "properties": {
                ....
            },
            "properties_attributes": {
                ....
            }
        }
      }
      
  3. Aprire il documento newconfig.json e modificare o aggiungere i valori nell'oggetto properties.Open the newconfig.json document and modify/add values in the properties object. L'esempio seguente modifica il valore di "spark.yarn.am.memory" da "1g" a "3g".The following example changes the value of "spark.yarn.am.memory" from "1g" to "3g". Aggiunge anche "spark.kryoserializer.buffer.max" con un valore di "256m".It also adds "spark.kryoserializer.buffer.max" with a value of "256m".

     "spark.yarn.am.memory": "3g",
     "spark.kyroserializer.buffer.max": "256m",
    

    Al termine delle modifiche, salvare il file.Save the file once you are done making modifications.

  4. Usare i comandi seguenti per inviare la configurazione aggiornata ad Ambari.Use the following commands to submit the updated configuration to Ambari.

    curl -u admin -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 `
        -Method PUT `
        -Headers @{"X-Requested-By" = "ambari"} `
        -Body $newConfig
    $resp.Content
    

    Questi comandi inviano il contenuto del file newconfig.json al cluster come nuova configurazione desiderata.These commands submit the contents of the newconfig.json file to the cluster as the new desired configuration. La richiesta restituisce un documento JSON.The request returns a JSON document. L'elemento versionTag di questo documento deve corrispondere alla versione inviata, mentre l'oggetto configs conterrà le modifiche di configurazione richieste.The versionTag element in this document should match the version you submitted, and the configs object contains the configuration changes you requested.

Esempio: Riavviare un componente del servizioExample: Restart a service component

A questo punto, se si osserva l'interfaccia utente di Ambari Web, il servizio Spark indicherà che è necessario il riavvio per rendere effettiva la nuova configurazione.At this point, if you look at the Ambari web UI, the Spark service indicates that it needs to be restarted before the new configuration can take effect. Usare la procedura seguente per riavviare il servizio.Use the following steps to restart the service.

  1. Usare il codice seguente per attivare la modalità di manutenzione del servizio Spark:Use the following to enable maintenance mode for the Spark service:

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

    Questi comandi inviano un documento JSON al server che attiva la modalità di manutenzione.These commands send a JSON document to the server that turns on maintenance mode. È possibile verificare che il servizio sia in modalità di manutenzione usando la richiesta seguente:You can verify that the service is now in maintenance mode using the following request:

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

    Viene restituito il valore ON.The return value is ON.

  2. Successivamente usare il codice seguente per disattivare il servizio:Next, use the following to turn off the service:

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

    La risposta restituita è simile all'esempio seguente:The response is similar to the following example:

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

    Importante

    Il valore href restituito dall'URI usa l'indirizzo IP interno del nodo del cluster.The href value returned by this URI is using the internal IP address of the cluster node. Per usarlo dall'esterno del cluster, sostituire la parte '10.0.0.18:8080' con il nome FQDN del cluster.To use it from outside the cluster, replace the `10.0.0.18:8080' portion with the FQDN of the cluster.

    Il comando seguente recupera lo stato della richiesta:The following commands retrieve the status of the request:

    curl -u admin -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
    $respObj = ConvertFrom-Json $resp.Content
    $respObj.Requests.request_status
    

    La risposta COMPLETED indica che la richiesta è stata completata.A response of COMPLETED indicates that the request has finished.

  3. Dopo aver completato la richiesta precedente, usare il codice seguente per avviare il servizio.Once the previous request completes, use the following to start the service.

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

    Il servizio ora usa la nuova configurazione.The service is now using the new configuration.

  4. Infine, usare il codice seguente per disattivare la modalità di manutenzione.Finally, use the following to turn off maintenance mode.

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

Passaggi successiviNext steps

Per informazioni tecniche complete sull'API REST, vedere la pagina relativa alle informazioni di riferimento per l'API Ambari V1.For a complete reference of the REST API, see Ambari API Reference V1.