Gestire le risorse del cluster Apache Spark in Azure HDInsight

Questo articolo descrive come accedere a interfacce associate al cluster Spark, come l'interfaccia utente di Ambari, l'interfaccia utente di YARN e Server cronologia Spark. Si apprenderà anche come ottimizzare la configurazione del cluster per ottenere prestazioni ottimali.

Prerequisiti:

Come è possibile avviare l'interfaccia utente Web di Ambari?

  1. Dalla Schermata iniziale del portale di Azure fare clic sul riquadro del cluster Spark, se è stato aggiunto sulla Schermata iniziale. È anche possibile passare al cluster da Esplora tutto > Cluster HDInsight.
  2. Per il cluster Spark, fare clic su Dashboard. Quando richiesto, immettere le credenziali di amministratore per il cluster di Spark.

    Avviare Ambari

  3. Questa operazione consente di avviare l'interfaccia utente Web di Ambari, come illustrato nella schermata.

    Interfaccia utente Web Ambari

Come è possibile avviare il Server cronologia Spark?

  1. Dalla Schermata iniziale del portale di Azure fare clic sul riquadro del cluster Spark, se è stato aggiunto sulla Schermata iniziale.
  2. Dal pannello del cluster in Collegamenti rapidi fare clic su Dashboard cluster. Nel pannello Dashboard cluster fare clic su Server cronologia Spark.

    Server cronologia Spark

    Quando richiesto, immettere le credenziali di amministratore per il cluster di Spark.

Come è possibile avviare l'interfaccia utente di Yarn?

È possibile usare l'interfaccia utente di YARN per il monitoraggio delle applicazioni attualmente in esecuzione nel cluster Spark.

  1. Nel pannello del cluster fare clic su Dashboard cluster e quindi su YARN.

    Avviare l'interfaccia utente di YARN

    Suggerimento

    In alternativa, è anche possibile avviare l'interfaccia utente di YARN dall'interfaccia utente di Ambari. Per avviare l'interfaccia utente di Ambari, nel pannello del cluster fare clic su Dashboard cluster e quindi su Dashboard cluster HDInsight. Nell'interfaccia utente di Ambari fare clic su YARN, su Quick Links (Collegamenti rapidi), sulla funzionalità di gestione risorse attiva e quindi fare clic su Resource Manager UI (Interfaccia utente di Gestione risorse).

Qual è la configurazione cluster ottimale per eseguire le applicazioni Spark?

I tre parametri principali che possono essere usati per la configurazione di Spark, a seconda dei requisiti dell'applicazione, sono spark.executor.instances, spark.executor.cores e spark.executor.memory. Un Executor è un processo avviato per un'applicazione Spark. Viene eseguito sul nodo di lavoro e svolge le attività per l'applicazione. Il numero predefinito di executor e le relative dimensioni per ogni cluster vengono calcolati in base al numero di nodi di lavoro e alle relative dimensioni. Questi dati vengono archiviati in spark-defaults.conf nei nodi head del cluster.

I tre parametri di configurazione possono essere configurati a livello di cluster, per tutte le applicazioni in esecuzione nel cluster, o possono anche essere specificati per ogni singola applicazione.

Modificare i parametri con l'interfaccia utente di Ambari

  1. Nell'interfaccia utente di Ambari fare clic su Spark, Configs (Configurazioni) e quindi espandere Custom spark-defaults (Impostazioni predefinite di Spark personalizzate).

    Impostare parametri con Ambari

  2. I valori predefiniti sono appropriati per 4 applicazioni Spark in esecuzione contemporaneamente nel cluster. È possibile modificare questi valori nell'interfaccia utente, come illustrato di seguito.

    Impostare parametri con Ambari

  3. Per salvare la configurazione, fare clic su Save . Nella parte superiore della pagina verrà richiesto di riavviare tutti i servizi interessati. Fare clic su Restart.

    Riavviare i servizi

Modificare i parametri per un'applicazione in esecuzione in Jupyter Notebook

Per le applicazioni in esecuzione in Jupyter Notebook è possibile usare %%configure magic per apportare le modifiche di configurazione. Idealmente, è necessario apportare le modifiche all'inizio dell'applicazione, prima di eseguire la prima cella di codice. Ciò garantisce che la configurazione venga applicata alla sessione Livy quando viene creata. Se si vuole modificare la configurazione in una fase successiva nell'applicazione, è necessario usare il parametro -f . Tuttavia, in questo modo tutte le operazioni eseguite nell'applicazione andranno perse.

Il frammento di codice riportato di seguito mostra come modificare la configurazione per un'applicazione in esecuzione in Jupyter.

%%configure
{"executorMemory": "3072M", "executorCores": 4, "numExecutors":10}

I parametri di configurazione devono essere passati come una stringa JSON e devono trovarsi nella riga successiva a magic, come illustrato nella colonna di esempio.

Modificare i parametri per un'applicazione inviata tramite spark-submit

Il comando seguente è un esempio di come modificare i parametri di configurazione per un'applicazione batch inviata tramite spark-submit.

spark-submit --class <the application class to execute> --executor-memory 3072M --executor-cores 4 –-num-executors 10 <location of application jar file> <application parameters>

Modificare i parametri per un'applicazione inviata tramite cURL

Il comando seguente è un esempio di come modificare i parametri di configurazione per un'applicazione batch inviata tramite cURL.

curl -k -v -H 'Content-Type: application/json' -X POST -d '{"file":"<location of application jar file>", "className":"<the application class to execute>", "args":[<application parameters>], "numExecutors":10, "executorMemory":"2G", "executorCores":5' localhost:8998/batches

Come è possibile modificare questi parametri nel server Spark Thrift?

Il server Spark Thrift fornisce l'accesso JDBC/ODBC a un cluster Spark e viene usato per rispondere alle query di Spark SQL. Strumenti come Power BI, Tableau e così via usano il protocollo ODBC per comunicare con il server Spark Thrift per eseguire query di Spark SQL come un'applicazione Spark. Quando si crea un cluster Spark, vengono avviate due istanze del server Spark Thrift, una in ogni nodo head. Ogni Thrift Spark Server è visibile come un'applicazione Spark nell'interfaccia utente di YARN.

Il server Spark Thrift usa l'allocazione di executor dinamica di Spark e quindi non viene usato spark.executor.instances . Il server Spark Thrift usa invece spark.dynamicAllocation.minExecutors e spark.dynamicAllocation.maxExecutors per specificare il numero di executor. Per modificare le dimensioni degli executor, si usano i parametri di configurazione spark.executor.cores e spark.executor.memory. È possibile modificare questi parametri, come illustrato nella procedura seguente.

  • Espandere la categoria Advanced spark-thrift-sparkconf per aggiornare i parametri spark.dynamicAllocation.minExecutors, spark.dynamicAllocation.maxExecutors e spark.executor.memory.

    Configurare il server Spark Thrift

  • Espandere la categoria Custom spark-thrift-sparkconf per aggiornare il parametro spark.executor.cores.

    Configurare il server Spark Thrift

Come è possibile modificare la memoria del driver del server Spark Thrift?

La memoria del driver del server Spark Thrift è configurata al 25% delle dimensioni della RAM nodo head, a condizione che le dimensioni totali della RAM del nodo head siano maggiori di 14 GB. Per modificare la configurazione della memoria del driver, è possibile usare l'interfaccia utente di Ambari, come illustrato di seguito.

  • Nell'interfaccia utente di Ambari fare clic su Spark, Configs (Configurazioni), espandere Advanced spark-env, quindi specificare il valore per spark_thrift_cmd_opts.

    Configurare la RAM del server Spark Thrift

La funzionalità di Business Intelligence non è in uso con il cluster Spark. Come è possibile ripristinare le risorse?

Poiché si usa l'assegnazione dinamica di Spark, le uniche risorse utilizzate dal server Thrift sono quelle per i due master applicazioni. Per recuperare tali risorse, è necessario arrestare i servizi del server Thrift in esecuzione nel cluster.

  1. Nel riquadro sinistro dell'interfaccia utente di Ambari fare clic su Spark.
  2. Nella pagina successiva fare clic su Server Spark Thrift.

    Riavviare il server Thrift

  3. Verranno visualizzati due nodi head in cui è in esecuzione il server Spark Thrift. Fare clic su uno dei nodi head.

    Riavviare il server Thrift

  4. Nella pagina successiva sono elencati tutti i servizi in esecuzione in quel nodo head. Nell'elenco fare clic sul pulsante dell'elenco a discesa accanto al server Spark Thrift e quindi fare clic su Stop.

    Riavviare il server Thrift

  5. Ripetere questi passaggi anche per l'altro nodo head.

I notebook Jupyter non vengono eseguiti come previsto. Come è possibile riavviare il servizio?

Avviare l'interfaccia utente Web di Ambari, come illustrato in precedenza. Dal riquadro di spostamento sinistro fare clic su Jupyter, Service Actions (Azioni servizio) e quindi su Restart All (Riavvia tutto). Verrà avviato il servizio Jupyter su tutti i nodi head.

![Restart Jupyter](./media/hdinsight-apache-spark-resource-manager/restart-jupyter.png "Restart Jupyter")

Rilevare l'esaurimento delle risorse

Avviare l'interfaccia utente di Yarn come illustrato in precedenza. Nella tabella Cluster Metrics (Metriche cluster) nella parte superiore della schermata, verificare i valori delle colonne Memory Used (Memoria in uso) e Memory Total (Memoria totale). Se i 2 valori sono molto simili, potrebbero non esserci risorse sufficienti per avviare l'applicazione successiva. Lo stesso vale per le colonne VCores Used (VCore in uso) e VCores Total (VCore totali). Se nella visualizzazione principale è presente un'applicazione con stato ACCEPTED (ACCETTATO) che non passa allo stato RUNNING (IN ESECUZIONE) o FAILED (NON RIUSCITO), ciò può anche indicare che l'applicazione non ha risorse sufficienti per l'avvio.

![Resource Limit](./media/hdinsight-apache-spark-resource-manager/resource-limit.png "Resource Limit")

Come è possibile terminare un'applicazione in esecuzione per liberare risorse?

  1. Nell'interfaccia utente di Yarn, nel pannello a sinistra, fare clic su In esecuzione. Dall'elenco delle applicazioni in esecuzione, determinare l'applicazione da terminare e fare clic sull'ID.

    Terminare App1

  2. Fare clic su Kill Application (Termina applicazione) nella parte superiore destra, quindi fare clic su OK.

    Terminare App2

Vedere anche

Per gli analisti dei dati

Per gli sviluppatori di Spark