Condividi tramite


I/O elevato della fase Spark

Esaminare quindi di nuovo le statistiche di I/O della fase più lunga:

I/O fase lunga

Che cos'è l'I/O elevato?

Quanti dati devono trovarsi in una colonna di I/O da considerare elevati? Per capire questo problema, iniziare prima con il numero più alto in una delle colonne specificate. Prendere quindi in considerazione il numero totale di core CPU disponibili in tutti i ruoli di lavoro. In genere ogni core può leggere e scrivere circa 3 MB al secondo.

Dividere la colonna di I/O più grande in base al numero di core del ruolo di lavoro del cluster, quindi dividere tale colonna in base alla durata dei secondi. Se il risultato è di circa 3 MB, è probabile che l'I/O sia associato. Sarebbe un'I/O elevata.

Input elevato

Se viene visualizzato un sacco di input nella fase, ciò significa che si spende molto tempo per leggere i dati. Identificare prima di tutto i dati letti da questa fase. Vedere Identificazione di una lettura costosa nel DAG di Spark.

Dopo aver identificato i dati specifici, ecco alcuni approcci per velocizzare le letture:

  • Usare Delta.
  • Prova Photon. Può essere utile molto con la velocità di lettura, soprattutto per le tabelle estese.
  • Rendere la query più selettiva in modo che non sia necessario leggere la quantità di dati.
  • Riconsiderare il layout dei dati in modo che il datapping sia più efficace.
  • Se si stanno leggendo più volte gli stessi dati, usare la cache Delta.
  • Se stai eseguendo un join, prova a lavorare con DFP .

Output elevato

Se viene visualizzato un sacco di output dalla fase, significa che si spende molto tempo per scrivere dati. Ecco alcuni approcci per risolvere questo problema:

Shuffle elevato

Se non si ha familiarità con lo shuffle, questo è il momento di imparare.

Nessun I/O elevato

Se le operazioni di I/O elevate non vengono visualizzate in alcuna delle colonne, è necessario approfondire. Vedere Fase Spark lenta con poco I/O.