Vai al contenuto principale

Come utilizzare i taccuini in Ilum

In questa pagina vengono illustrati i notebook di esempio identici implementati in entrambi i Giove (compatibile con JupyterLab e JupyterHub) e Zeppelin, che consente di confrontare rapidamente il mapping dei flussi di lavoro tipici tra questi ambienti.

Ogni quaderno è organizzato in quattro sezioni logiche:

  1. Narrativa (Markdown) – Rich text with images introducing the task.
  2. Generazione di dati di test – Python (or Scala) code creating a small synthetic dataset.
  3. Trasforma i dati – Spark code that cleans or aggregates the data.
  4. Grafico dinamico – An interactive visualization, refreshable after each run.

Guida per Jupyter Notebooks (Lab & Hub)

Panoramica

In Ilum, i notebook Jupyter sono accessibili tramite entrambi JupyterLab e JupyterHub. Per gli utenti finali, l'esperienza è funzionalmente identica in entrambi, soprattutto quando si lavora con le integrazioni Spark e Ilum.

Per impostazione predefinita, le celle di codice Python vengono eseguite localmente nel server Jupyter. Per sfruttare Spark in un cluster remoto, è necessario utilizzare Magia scintillante—a Jupyter extension that enables code execution on a Spark cluster through the Livy API. In Ilum, the default Livy API is replaced with Ilum Livy Proxy, which ensures seamless integration with Ilum’s storage, metastore, lineage, and monitoring features.

Jupyter (sia Lab che Hub) fornisce quattro kernel principali:

Kernel Python: il kernel Jupyter predefinito, che esegue il codice Python sul server Jupyter. Kernel PySpark: kernel Spark che esegue il codice Python in un cluster Spark remoto. Kernel Spark: kernel Scala che esegue il codice Scala in un cluster Spark remoto.

  1. Python Kernel – The default Jupyter kernel, which runs Python code on the Jupyter server.
  2. PySpark Kernel – A Spark kernel that runs your Python code on a remote Spark cluster.
  3. Scintilla Kernel – A Scala kernel that runs your Scala code on a remote Spark cluster.

Gestione delle sessioni Spark

Per utilizzare un cluster Spark remoto da un kernel Python standard, caricare prima Spark Magic:

%load_ext Sparkmagic.Magie

Quindi, apri il pannello di gestione della sessione Spark:

%manage_spark

Utilizzando questo pannello, è possibile eseguire le seguenti attività:

Gestisci sessioni

Le Gestisci sessioni visualizza tutte le sessioni Spark disponibili. Qui puoi vedere il nome della sessione, l'ID, il tipo di kernel (ad esempio, pyspark per Python) e il suo stato attuale. Puoi anche eliminare le sessioni che non ti servono più.

Gestisci sessioni

Crea sessione

Le Crea sessione consente di avviare una nuova sessione Spark. Per creare una sessione, specificare un nome per la sessione, selezionare un linguaggio (Scala o Python) e specificare i parametri Spark. Infine, fai clic su Crea sessione.
[Tutti i dettagli sulla creazione della sessione e i parametri disponibili sono disponibili qui.]

Crea sessione

Aggiungi endpoint

Nel Aggiungi endpoint , è possibile registrare endpoint Livy aggiuntivi. Scegliere il tipo di autenticazione (ad esempio, Kerberos) e fornire l'indirizzo del server Livy, quindi fare clic su Aggiungi punto finale. Ciò è utile se è necessario connettersi a una distribuzione Livy personalizzata anziché all'endpoint Ilum-Livy-Proxy preconfigurato.

Aggiungi endpoint

Gestisci endpoint

Le Gestisci endpoint elenca tutti gli endpoint Livy configurati, insieme a tutte le sessioni Spark attive o cronologiche ad essi associate. È possibile visualizzare i dettagli della sessione, inclusi gli ID sessione, i collegamenti all'interfaccia utente di Spark e i log dei driver. È inoltre possibile rimuovere gli endpoint o ripulire le vecchie sessioni direttamente da questo pannello.

Gestisci endpoint

Pagina dei carichi di lavoro Ilum

Dopo aver creato una sessione, è possibile tenere traccia dei servizi di codice attivi nella pagina Carichi di lavoro Ilum. I servizi creati tramite le sessioni Spark Magic sono denominati con il prefisso ilum-livy-proxy-session e può essere monitorato, messo in pausa o eliminato proprio come qualsiasi altro servizio Ilum.

Pagina dei carichi di lavoro Ilum

Creazione di una sessione Spark

Per creare una nuova sessione Spark, aprire il pannello di gestione e selezionare Crea sessione.
Ti verrà chiesto di compilare un modulo con i seguenti parametri:

Impostazioni di base:

  • Endpoint
    Indirizzo dell'endpoint Livy usato per connettersi al cluster Spark. Questo campo viene configurato automaticamente, ma se necessario, è possibile aggiungere un endpoint al proprio servizio Livy.

  • Grappolo
    Nome del cluster Kubernetes in cui verrà eseguita la sessione.

  • Nome sessione
    Un nome personalizzato per la sessione Spark, usato per l'identificazione.

  • Lingua
    Il linguaggio di programmazione per la sessione Spark: pitone o Scala.

  • Immagine Spark
    L'immagine Docker che definisce l'ambiente di runtime di Spark (ad esempio, ILUM / Scintilla: 3.5.6-Delta).
    Puoi anche utilizzare le tue immagini personalizzate, ma per una compatibilità completa ti consigliamo di costruirle sopra le immagini di base ufficiali di Spark pubblicate da ILUM su Docker Hub.

  • Pacchetti Extra
    Pacchetti Python aggiuntivi da installare nella sessione.
    Esempio: intorpidito; Panda

  • Abilita la pausa automatica
    Mette automaticamente in pausa la sessione quando è inattiva. Dopo il tempo di inattività configurato, la sessione rimane disponibile, ma la prima richiesta avvierà i pod e gli esecutori prima di eseguire il codice, con conseguente tempo di attesa leggermente più lungo per il primo comando.
    Le impostazioni di pausa automatica vengono gestite a livello globale tramite i valori Helm:

    • --set ilum-core.job.autoPause.idleTime=3600 controlla il tempo di inattività (in secondi) dopo il quale il gruppo viene messo in pausa,
    • --set ilum-core.job.autoPause.period=180 Controlla la frequenza (in secondi) con cui viene controllato lo stato di inattività.

Impostazioni dell'esecutore:

  • Memoria dell'esecutore
    Quantità di RAM allocata a ciascun esecutore Spark (ad esempio, 2G).
    Unità supportate: M (megabyte), G (gigabyte), T (terabyte).

  • Core dell'esecutore
    Numero di core CPU per ogni executor.

  • Numero di esecutori testamentari
    Numero totale di esecutori da avviare nella sessione.

Impostazioni del driver:

  • Memoria del driver
    Quantità di RAM allocata al processo del driver Spark (ad esempio, 1G).
    Unità supportate: M (megabyte), G (gigabyte), T (terabyte).

  • Core del driver
    Numero di core CPU per il driver Spark.

Opzioni più avanzate:

  • Configurazione Spark personalizzata
    Configurazione aggiuntiva di Spark come oggetto JSON.
    Questo campo è equivalente al campo proprietà campo nella vecchia versione Sparkmagic.
    Importante: Qualsiasi parametro fornito in questo campo sostituirà la proprietà Spark corrispondente dagli altri campi, quindi usalo con cautela.
    Esempio: { "spark.sql.shuffle.partitions": "200" }

  • Estensione SQL
    Il nome della classe dell'estensione Spark SQL, spesso richiesto per Delta Lake, Hudi, Nessie e così via.
    Esempio: io.delta.sql.DeltaSparkSessionExtension

  • Opzioni Java aggiuntive del driver
    Opzioni Java aggiuntive passate al processo del driver Spark.
    Esempio: -Divy.cache.dir=/tmp -Divy.home=/tmp

  • Opzioni Java extra dell'esecutore
    Opzioni Java aggiuntive passate agli esecutori Spark.
    Esempio: -Dconfig=valore

  • Allocazione dinamica
    Abilita l'allocazione dinamica delle risorse Spark per gli esecutori.
    Nota: Tutte le opzioni seguenti vengono applicate solo se l'allocazione dinamica è abilitata.

    • Min Esecutori Esecutori Testamentari
      Numero minimo di esecutori testamentari.

    • Esecutori iniziali
      Numero iniziale di esecutori da avviare all'inizio della sessione.

    • Numero massimo di esecutori testamentari
      Numero massimo di esecutori consentiti durante l'allocazione dinamica.

    • Partizioni casuali
      Numero di partizioni usate per le operazioni casuali in Spark SQL.

Le sessioni sono isolate per notebook, il che significa che ogni notebook aperto ha il proprio ambiente di calcolo indipendente. Quando si esegue una cella Spark nel kernel Python e si hanno più sessioni attive, è necessario specificare la sessione Spark da usare.

L'utilizzo di Ilum Code Services invece del kernel pyspark locale offre diversi vantaggi. Ilum preconfigura automaticamente tutte le sessioni Jupyter per integrarsi perfettamente con i moduli dell'infrastruttura. Ad esempio, le sessioni sono preconfigurate per accedere a tutte le risorse di archiviazione collegate al cluster predefinito. Se i componenti corrispondenti sono abilitati, le sessioni Spark:

  • Accedere al metastore Hive.
  • Invia dati a Ilum Lineage.
  • Inviare i dati al server della cronologia per il monitoraggio.
  • Sfrutta le funzionalità aggiuntive fornite da Ilum.

E non sarà necessario scrivere manualmente le configurazioni per questo.

Utilizzo di Jupyter

Dopo la configurazione, per eseguire il codice all'interno del servizio Ilum Code, è necessario utilizzare il %%scintilla comando magico. Questo comando magico ti permette di eseguire il tuo codice nell'ambiente Spark remoto gestito da Ilum.

%%scintilla

# Dati di esempio
# ...

All'interno di questo ambiente, è possibile accedere a tutte le variabili create, nonché ai seguenti contesti Spark:

  • sc (SparkContext)
  • sqlContext (HiveContext)
  • scintilla (SparkSession)

Questa configurazione garantisce un'interazione senza interruzioni con le risorse Spark e qualsiasi configurazione fornita dalla piattaforma Ilum.

Esempio di Python:

%%scintilla

dati = [
(1, "n1-standard-1", 20.5, 32.1, 15.0),
(2, "n1-standard-1", 30.0, 64.3, 20.0),
(3, "n1-standard-2", 30.2, 16.0, 22.0),
(4, "n1-standard-2", 45.1, 128.5, 40.2),
(5, "e2-medium", 25.4, 8.0, 18.3),
(6, "e2-medium", 25.3, 12.0, 10.2),
(7, "e2-standard-2", 29.8, 24.5, 14.7),
(8, "e2-standard-2", 35.0, 24.5, 20.5),
(9, "N2-HighCPU-4", 50.2, 64.0, 30.4),
(10, "N2-HighCPU-4", 55.1, 16.0, 35.4),
(11, "n1-standard-8", 80.5, 32.0, 45.6),
(12, "N1-standard-16", 95.1, 128.0, 60.0),
(13, "n1-standard-8", 85.0, 256.0, 90.0),
(14, "n1-highmem-2", 40.1, 128.0, 50.0),
(15, "t2a-standard-1", 15.2, 2.0, 5.5),
(16, "T2A-Standard-2", 25.5, 4.0, 7.3),
(17, "n1-highmem-2", 60.5, 256.0, 100.0),
(18, "C2-Standard-16", 99.9, 6240.0, 120.5),
(19, "a2-highgpu-1g", 89.2, 256.0, 95.4),
(20, "a2-highgpu-1g", 100.0, 40.0, 110.0),
]

#using contesto di scintilla
RDD = Sc.parallelizzare(dati)

percorso dati = "s3a://ilum-files/dati/prestazioni"
RDD.saveAsTextFile(percorso dati)


#using sessione di spark
Df = scintilla.leggere.CSV(percorso dati)
Df.createOrReplaceTempView("MachinesTemp")
risultato = scintilla.SQL("Seleziona \
_c0 come machine_id, \
_c1 come machine_type, \
_c2 come cpu_usage, \
_c3 come memory_usage, \
_c4 come time_spent \
Da MachinesTemp")

risultato.createOrReplaceTempView("MachineStats")

risultato.mostrare()

Esempio di Scala:

%%scintilla
val dati = Seq(
(1, "n1-standard-1", 20.5, 32.1, 15.0),
(2, "n1-standard-1", 30.0, 64.3, 20.0),
(3, "n1-standard-2", 30.2, 16.0, 22.0),
(4, "n1-standard-2", 45.1, 128.5, 40.2),
(5, "e2-medium", 25.4, 8.0, 18.3),
(6, "e2-medium", 25.3, 12.0, 10.2),
(7, "e2-standard-2", 29.8, 24.5, 14.7),
(8, "e2-standard-2", 35.0, 24.5, 20.5),
(9, "N2-HighCPU-4", 50.2, 64.0, 30.4),
(10, "N2-HighCPU-4", 55.1, 16.0, 35.4),
(11, "n1-standard-8", 80.5, 32.0, 45.6),
(12, "N1-standard-16", 95.1, 128.0, 60.0),
(13, "n1-standard-8", 85.0, 256.0, 90.0),
(14, "n1-highmem-2", 40.1, 128.0, 50.0),
(15, "t2a-standard-1", 15.2, 2.0, 5.5),
(16, "T2A-Standard-2", 25.5, 4.0, 7.3),
(17, "n1-highmem-2", 60.5, 256.0, 100.0),
(18, "C2-Standard-16", 99.9, 6240.0, 120.5),
(19, "a2-highgpu-1g", 89.2, 256.0, 95.4),
(20, "a2-highgpu-1g", 100.0, 40.0, 110.0)
)

//using spark context
val RDD = scintilla.sparkContext.parallelizzare(dati)

val percorso dati = "s3a://ilum-files/dati/prestazioni"
RDD.saveAsTextFile(percorso dati)

//using spark session
val Df = scintilla.leggere.opzione("header", "falso").CSV(percorso dati)

Df.createOrReplaceTempView("MachinesTemp")

val risultato = scintilla.SQL("""
SELEZIONARE
_c0 COME machine_id,
_c1 COME machine_type,
_c2 COME cpu_usage,
_c3 COME memory_usage,
_c4 COME time_spent
DA MacchineTemp
""")


risultato.createOrReplaceTempView("MachineStats")

risultato.mostrare()

Si può interruttore tra Sessioni nelle tue cellule usando -s Contrassegno e nome della sessione che si desidera scegliere.

%%scintilla -s SESSION_NAME

#your codice Spark Python
# ...

Ad esempio, se si dispone di questo elenco di sessioni:

Ilum

Dove la mia sessione è di tipo spark che utilizza il linguaggio scala. Ciò significa che se si desidera utilizzare questa sessione spark scala Devi scegliere la sessione in questo modo:

%%scintilla -s scalasession

pythonsessions è di tipo pyspark che utilizza il linguaggio Python. Ciò significa che se si desidera utilizzare la sessione di scintilla python Devi scegliere la sessione in questo modo

%%scintilla -s pythonsession

È possibile avviare Query SQL nel catalogo Spark utilizzando %%scintilla magia con -c sql:

%%scintilla -c SQL
SELEZIONARE * DA MachineStats

È possibile utilizzare più flag con il comando SQL nella finestra di dialogo Servizio Codice Ilum ambiente:

  • -o: specifica la variabile di ambiente locale che memorizzerà il risultato della query. Questa è la soluzione migliore per il passaggio di dati tra le sessioni.
  • -n o --maxrows: Definisce il numero massimo di righe da restituire dalla query.
  • -q o --quiet: Determina se visualizzare l'output nel documento. Se specificato, il risultato non verrà visualizzato.
  • -f o --samplefraction: imposta la frazione del risultato da restituire durante il campionamento.
  • -m o --samplemethod: Specifica il metodo di campionamento da utilizzare, sia per l'acquisizione che per il campionamento.

Questi flag offrono flessibilità nella gestione dei risultati delle query e nel controllo del comportamento dell'output quando si lavora con Spark nell'ambiente Ilum.

Per esempio:

%%scintilla -s pythonsession -c SQL -o test_result -q --maxrows 10
SELEZIONARE machine_type, Medio(memory_usage) come avg_memory_usage Da MachineStats Gruppo presso machine_type
test_result

Il risultato dovrebbe essere simile al seguente:

Ilum

Visualizzazione dei dati

Le sessioni PySpark e Spark presentano spesso problemi di compatibilità con i pacchetti di visualizzazione avanzati. Una soluzione pratica consiste nel trasferire i dati a un kernel IPython locale per l'elaborazione e la visualizzazione. Ecco come raggiungere questo obiettivo:

  1. Esportare i dati nel kernel locale: usare la variabile -o nel notebook o nel codice per passare i dati da Spark al kernel IPython locale.
%%scintilla -c SQL -o machine_stats
SELEZIONARE * DA MachineStats

  1. Installa i pacchetti di visualizzazione richiesti: installa tutte le librerie di visualizzazione Python necessarie utilizzando il comando:
Pacchetto di installazione !pip

Ad esempio, visualizziamo i dati utilizzando widget autovizwidget:

Da autovizwidget.Widget.Utilità importazione display_dataframe
display_dataframe(machine_stats)

Permette di visualizzare i dati come uno dei grafici seguenti:

  • Bar
  • Torta
  • Spargere
  • Area
  • Tavolo
  • Linea
  1. Sessioni di pulizia Puoi ripulire le tue sessioni Spark in due modi:
  • Tramite il pannello di gestione delle sessioni Spark: vai al Gestisci sessioni e fare clic su Cancellare accanto alla sessione che si desidera rimuovere.

  • Tramite il pannello di gestione delle sessioni di Spark Gestisci endpoint Sezione: Passare alla sezione Gestisci endpoint e fare clic sull'icona Pulire accanto all'endpoint del proxy Ilum Livy.

Queste opzioni consentono di rimuovere le sessioni non necessarie o inattive dall'ambiente.

Kernel Spark e PySpark

I kernel Spark e PySpark eseguono il codice direttamente all'interno della sessione Spark. In Ilum, quando si crea un nuovo documento PySpark o Spark, viene visualizzato un corrispondente Python o Scala Servizio codice viene creato e assegnato al documento. Il tuo codice verrà eseguito all'interno di questi servizi, il che significa che la sessione Spark è preconfigurata e completamente integrata con tutti i componenti del sistema.

Ad esempio, se i moduli seguenti sono abilitati, la sessione Spark sarà:

  • Avere accesso al Hive Metastore
  • Avere accesso al Depositi collegato al cluster predefinito.
  • Invia i dati sull'utilizzo della memoria, sull'utilizzo della CPU e sullo schema delle fasi al Server della cronologia.
  • Inoltra i log a Loki Utilizzando Coda di ballo.
  • Esporre le metriche a Prometeo.

La principale differenza tra i kernel PySpark e Spark risiede nel linguaggio di programmazione:

  • Kernel PySpark: Utilizza Pitone.
  • Spark Kernel: Utilizza Scala.

I comandi magici che è possibile utilizzare e il flusso di lavoro complessivo rimangono in gran parte simili tra i due kernel.

  1. Creazione della sessione

Per creare un documento PySpark o Spark vai su Jupyter, fai clic sull'icona + nell'angolo in alto a sinistra e scegli il kernel

Ilum

Quindi crea una cella, digita qualcosa di semplice ed eseguila.

Per esempio:

Stampare("Buongiorno")

Dopo un po' di tempo, dovresti vedere il seguente risultato:

Ilum

Se si accede alla pagina Carichi , verrà visualizzato un nuovo servizio codice creato nel cluster predefinito. Questo servizio di codice avrà un nome preceduto da ilum-livy-proxy-session, che indica che è associato alla sessione Spark o PySpark appena creata.

Ilum

Si noti che il codice nella cella è stato eseguito come richiesta a tale servizio di codice.

  1. Gestione delle sessioni

I kernel Spark e PySpark non hanno un pannello di gestione simile a sparkmagics. Tuttavia, è possibile utilizzare i comandi magici per la stessa funzionalità.

Usare %%configura magia per impostare i parametri spark per la sessione utilizzando il formato JSON

Ad esempio, digitando questo codice nella cella:

%%configure -f
{
"spark.sql.estensioni":"io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalogo.scintilla": "org.apache.spark.sql.delta.catalog.DeltaCatalog",
"spark.databricks.delta.catalog.update.enabled": vero
}

abiliterà Delta nella sessione spark

E' obbligatorio l'uso -f flag perché forza Ilum a riavviare la sessione nel caso in cui sia già in esecuzione

Usare %%info magia per ottenere informazioni sulle sessioni di scintilla attive in Livio.

Ilum

Usare %%delete -f -s ID per eliminare le sessioni in base al loro ID. Non è possibile eliminare la sessione del kernel corrente

Per esempio:

%%delete -f -s 16

Usare %%pulizia -f per eliminare tutta la sessione nell'endpoint corrente (in Ilum Livy Proxy)

Usare %%registri per ottenere i log correlati alla sessione Spark. È possibile utilizzarli per il debug.

  1. Flusso di lavoro

If you want to write a Spark program, you don’t need to use any magics. Simply type your code into a cell and execute it.

Per nel kernel PySpark (python):

dati = [
(1, "n1-standard-1", 20.5, 32.1, 15.0),
(2, "n1-standard-1", 30.0, 64.3, 20.0),
(3, "n1-standard-2", 30.2, 16.0, 22.0),
(4, "n1-standard-2", 45.1, 128.5, 40.2),
(5, "e2-medium", 25.4, 8.0, 18.3),
(6, "e2-medium", 25.3, 12.0, 10.2),
(7, "e2-standard-2", 29.8, 24.5, 14.7),
(8, "e2-standard-2", 35.0, 24.5, 20.5),
(9, "N2-HighCPU-4", 50.2, 64.0, 30.4),
(10, "N2-HighCPU-4", 55.1, 16.0, 35.4),
(11, "n1-standard-8", 80.5, 32.0, 45.6),
(12, "N1-standard-16", 95.1, 128.0, 60.0),
(13, "n1-standard-8", 85.0, 256.0, 90.0),
(14, "n1-highmem-2", 40.1, 128.0, 50.0),
(15, "t2a-standard-1", 15.2, 2.0, 5.5),
(16, "T2A-Standard-2", 25.5, 4.0, 7.3),
(17, "n1-highmem-2", 60.5, 256.0, 100.0),
(18, "C2-Standard-16", 99.9, 6240.0, 120.5),
(19, "a2-highgpu-1g", 89.2, 256.0, 95.4),
(20, "a2-highgpu-1g", 100.0, 40.0, 110.0),
]

#using contesto di scintilla
RDD = Sc.parallelizzare(dati)

percorso dati = "s3a://ilum-files/dati/prestazioni"
RDD.saveAsTextFile(percorso dati)


#using sessione di spark
Df = scintilla.leggere.CSV(percorso dati)
Df.createOrReplaceTempView("MachinesTemp")
risultato = scintilla.SQL("Seleziona \
_c0 come machine_id, \
_c1 come machine_type, \
_c2 come cpu_usage, \
_c3 come memory_usage, \
_c4 come time_spent \
Da MachinesTemp")

risultato.createOrReplaceTempView("MachineStats")

risultato.mostrare()

In Spark Kernel (Scala):

val dati = Seq(
(1, "n1-standard-1", 20.5, 32.1, 15.0),
(2, "n1-standard-1", 30.0, 64.3, 20.0),
(3, "n1-standard-2", 30.2, 16.0, 22.0),
(4, "n1-standard-2", 45.1, 128.5, 40.2),
(5, "e2-medium", 25.4, 8.0, 18.3),
(6, "e2-medium", 25.3, 12.0, 10.2),
(7, "e2-standard-2", 29.8, 24.5, 14.7),
(8, "e2-standard-2", 35.0, 24.5, 20.5),
(9, "N2-HighCPU-4", 50.2, 64.0, 30.4),
(10, "N2-HighCPU-4", 55.1, 16.0, 35.4),
(11, "n1-standard-8", 80.5, 32.0, 45.6),
(12, "N1-standard-16", 95.1, 128.0, 60.0),
(13, "n1-standard-8", 85.0, 256.0, 90.0),
(14, "n1-highmem-2", 40.1, 128.0, 50.0),
(15, "t2a-standard-1", 15.2, 2.0, 5.5),
(16, "T2A-Standard-2", 25.5, 4.0, 7.3),
(17, "n1-highmem-2", 60.5, 256.0, 100.0),
(18, "C2-Standard-16", 99.9, 6240.0, 120.5),
(19, "a2-highgpu-1g", 89.2, 256.0, 95.4),
(20, "a2-highgpu-1g", 100.0, 40.0, 110.0)
)

val RDD = scintilla.sparkContext.parallelizzare(dati)

val percorso dati = "s3a://ilum-files/dati/prestazioni"
RDD.saveAsTextFile(percorso dati)

val Df = scintilla.leggere.opzione("header", "falso").CSV(percorso dati)

Df.createOrReplaceTempView("MachinesTemp")

val risultato = scintilla.SQL("""
SELEZIONARE
_c0 COME machine_id,
_c1 COME machine_type,
_c2 COME cpu_usage,
_c3 COME memory_usage,
_c4 COME time_spent
DA MacchineTemp
""")


risultato.createOrReplaceTempView("MachineStats")

risultato.mostrare()

Utilizzare Spark SQL, è possibile utilizzare il %%sql magic, che funziona in modo simile a come funziona nel kernel Python con Spark magic.

Ad esempio:

%%SQL
SELEZIONARE * DA MachineStats

È inoltre possibile utilizzare più flag con %%sql per personalizzarne il comportamento:

  • -o: specifica la variabile di ambiente locale che memorizzerà il risultato della query.
  • -n o --maxrows: imposta il numero massimo di righe da restituire dalla query.
  • -q o --tranquillo: Controlla se l'output viene visualizzato nel documento. Se specificato, il risultato non verrà visualizzato.
  • -f o --samplefraction: definisce la frazione del set di risultati da restituire durante il campionamento.
  • -m o --metodo del campione: Specifies the sampling method to use—either take or sample.

Per esempio:

%%SQL -o test_result -q --maxrows 10
SELEZIONARE machine_type, Medio(memory_usage) come avg_memory_usage Da MachineStats Gruppo presso machine_type

Non vedrai alcun risultato eseguendo questa cella, ma verranno salvati nella finestra test_result vairable localmente e può essere recuperato utilizzando %%locale magia:

%%locale
test_result

Le %%locale magic command is used to execute code in a local environment. This can be useful when you don’t want to occupy the Spark environment for tasks that don’t require its resources.

Nel caso in cui si voglia utilizzare un valore dall'ambiente locale nella sessione spark, è necessario utilizzare %%send_to_spark magia.

%%send_to_spark -i valore -n nome -t tipo

Qui si specifica il valore che si desidera inviare, il tipo di dati e il nome della variabile a cui verrà assegnato nella sessione spark.

Per esempio:

%%locale
s = u"abc ሴ def"
%%send_to_spark -i s -n s -t str
Stampare(s)

L'esecuzione di queste 3 celle dovrebbe stampare il s corda.

  1. Visualizzazione dei dati

Nei kernel Spark e PySpark i dataframe recuperati con comandi SQL o pandas dataframe possono essere visualizzati come

  • tavolo
  • torta
  • Bar
  • grafico a linee
  • spargere
  • area

Per esempio:

Ilum

Per i frame di dati Spark è possibile utilizzare %%grazioso Magia per visualizzarli in un formato più piacevole:

%%grazioso
risultato.mostra()

Ilum

Guida per Zeppelin

In Zeppelin non è possibile controllare le sessioni di spark, vengono create e gestite automaticamente. Per impostazione predefinita per ogni taccuino C'è un separato per %livy.spark, uno per %livy.pyspark e uno per %livy.sql. Nelle configurazioni dell'interprete Puoi cambiare questa impostazione.

Creare notebook con il motore Livy

Come accennato in precedenza, Ilum utilizza Ilum-Livy-Proxy per collegare la sessione spark di Zeppelin con il servizio Ilum. Pertanto devi scegliere Livy quando si lavora con la scintilla.

Scrivi codice spark in scala

Usare %livy.spark

Ilum

Scrivi il codice spark in pyspark

Usare %livy.pyspark

Ilum

Scrivere istruzioni spark sql

Usare %livy.sql

Ilum

Utilizza le visualizzazioni integrate

Quando si eseguono istruzioni sql che restituiscono righe, è possibile visualizzarle

Ilum

Gestire il ciclo di vita delle sessioni

Purtroppo zeppelin non è flessibile nella gestione delle sessioni. Tuttavia, puoi:

  1. Termina manualmente il servizio di ilum in blocchi:
scintilla.fermarsi()
  1. Impostare il timeout per le sessioni inattive nelle configurazioni dell'interprete:
zeppelin.livy.idle.timeout=300