Gestire le risorse del cluster Apache Spark in Azure HDInsight

Informazioni su come accedere alle interfacce come l'interfaccia utente di Apache Ambari , l'interfaccia utente di Apache Hadoop YARN e il server cronologia Spark associato al cluster Apache Spark e come ottimizzare la configurazione del cluster per ottenere prestazioni ottimali.

Aprire il Server cronologia Spark

Server cronologia Spark è l'interfaccia utente Web per le applicazioni Spark completate e in esecuzione. Si tratta di un'estensione dell'interfaccia utente Web di Spark. Per informazioni complete, vedere Server cronologia Spark.

Aprire 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 portale di Azure aprire il cluster Spark. Per altre informazioni, vedere Elencare e visualizzare i cluster.

  2. In Dashboard cluster selezionare Yarn. Quando richiesto, immettere le credenziali di amministratore per il cluster di Spark.

    Launch YARN UI.

    Suggerimento

    In alternativa, è anche possibile avviare l'interfaccia utente di YARN dall'interfaccia utente di Ambari. Dall'interfaccia utente di Ambari passare all'interfaccia utente di YARN>Quick Links>Active>Resource Manager.

Ottimizzare i cluster per 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. Dall'interfaccia utente di Ambari passare a Spark2>Configs Custom spark2-defaults (Configurazioni> spark2 personalizzate).

    Set parameters using Ambari custom.

  2. I valori predefiniti sono appropriati per quattro applicazioni Spark in esecuzione contemporaneamente nel cluster. È possibile modificare questi valori nell'interfaccia utente, come illustrato nello screenshot seguente:

    Set parameters using Ambari.

  3. Selezionare Salva per salvare le modifiche di configurazione. Nella parte superiore della pagina viene richiesto di riavviare tutti i servizi interessati. Seleziona Riavvia.

    Restart services.

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

Per le applicazioni in esecuzione in Jupyter Notebook, è possibile usare il %%configure comando magic per apportare le modifiche alla 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 seguente 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

Nota

Copiare il file JAR nell'account di archiviazione del cluster. Non copiare il file JAR direttamente nel nodo head.

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, usare il protocollo ODBC per comunicare con Spark Thrift Server per eseguire query Spark SQL come 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.

Spark Thrift Server usa l'allocazione dell'executor dinamico Spark e quindi spark.executor.instances non viene usata. Il server Spark Thrift usa invece spark.dynamicAllocation.maxExecutors e spark.dynamicAllocation.minExecutors per specificare il numero di executor. I parametri di spark.executor.coresconfigurazione e spark.executor.memory vengono usati per modificare le dimensioni dell'executor. È possibile modificare questi parametri come illustrato nella procedura seguente:

  • Espandere la categoria Advanced spark2-thrift-sparkconf per aggiornare i spark.dynamicAllocation.maxExecutorsparametri e spark.dynamicAllocation.minExecutors.

    Configure Spark thrift server.

  • Espandere la categoria Custom spark2-thrift-sparkconf per aggiornare i spark.executor.coresparametri e spark.executor.memory.

    Configure Spark thrift server parameter.

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 nello screenshot seguente:

Dall'interfaccia utente di Ambari passare a Spark2 Configs>Advanced spark2-env.> Specificare quindi il valore per spark_thrift_cmd_opts.

Recuperare le risorse cluster di Spark

Grazie all'allocazione dinamica di Spark le uniche risorse usate 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. Nell'interfaccia utente di Ambari selezionare Spark2 nel riquadro sinistro.

  2. Nella pagina successiva selezionare Server Thrift Spark2.

    Restart thrift server1.

  3. Verranno visualizzati i due nodi head in cui è in esecuzione il server Spark2 Thrift. Selezionare uno dei nodi head.

    Restart thrift server2.

  4. Nella pagina successiva sono elencati tutti i servizi in esecuzione in quel nodo head. Nell'elenco selezionare il pulsante a discesa accanto a Spark2 Thrift Server e quindi selezionare Arresta.

    Restart thrift server3.

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

Riavviare il servizio Jupyter

Avviare l'interfaccia utente Web di Ambari, come illustrato all'inizio dell'articolo. Nel riquadro di spostamento a sinistra selezionare Jupyter, selezionare Azioni del servizio e quindi fare clic su Riavvia tutto. Verrà avviato il servizio Jupyter su tutti i nodi head.

Restart Jupyter.

Monitorare le risorse

Avviare l'interfaccia utente di Yarn, come illustrato all'inizio dell'articolo. 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 due valori sono 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). Inoltre, nella visualizzazione principale, se un'applicazione è rimasta nello stato ACCEPTED e non si passa allo stato RUNNING o FAILED , potrebbe anche essere un'indicazione che non sta ottenendo risorse sufficienti per iniziare.

Resource Limit.

Terminare le applicazioni in esecuzione

  1. Nell'interfaccia utente di Yarn selezionare In esecuzione nel pannello sinistro. Dall'elenco delle applicazioni in esecuzione, determinare l'applicazione da terminare e selezionare l'ID.

    Kill App1.

  2. Selezionare Kill Application (Termina applicazione ) nell'angolo in alto a destra e quindi selezionare OK.

    Kill App2.

Vedi anche

Per gli analisti dei dati

Per gli sviluppatori di Apache Spark