Utilizza l'estensione JupyterLab per sviluppare carichi di lavoro Spark serverless

Questo documento descrive come installare e utilizzare l'estensione JupyterLab su una macchina o una VM autogestita che ha accesso ai servizi Google. Descrive inoltre come sviluppare ed eseguire il deployment del codice del notebook Spark serverless.

Installa l'estensione in pochi minuti per usufruire delle seguenti funzionalità:

  • Avvia notebook serverless Spark e BigQuery per sviluppare codice rapidamente
  • Sfoglia e visualizza l'anteprima dei set di dati BigQuery in JupyterLab
  • Modificare i file Cloud Storage in JupyterLab
  • Pianificare un notebook su Composer

Prima di iniziare

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that you have the permissions required to complete this guide.

  4. Verify that billing is enabled for your Google Cloud project.

  5. Enable the Dataproc API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  6. Installa Google Cloud CLI.

  7. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  8. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  9. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  10. Verify that you have the permissions required to complete this guide.

  11. Verify that billing is enabled for your Google Cloud project.

  12. Enable the Dataproc API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  13. Installa Google Cloud CLI.

  14. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  15. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init

Ruoli obbligatori

Per eseguire gli esempi riportati in questa pagina sono necessari determinati ruoli IAM. A seconda delle policy dell'organizzazione, questi ruoli potrebbero essere già stati concessi. Per controllare le concessioni dei ruoli, consulta Devi concedere i ruoli?.

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Ruoli utente

Per ottenere le autorizzazioni necessarie per creare una sessione di notebook interattiva, chiedi all'amministratore di concederti i seguenti ruoli IAM:

Ruolo account di servizio

Per assicurarti che il account di servizio predefinito di Compute Engine disponga delle autorizzazioni necessarie per creare una sessione interattiva, chiedi all'amministratore di concedere il ruolo IAM Dataproc Worker (roles/dataproc.worker) al account di servizio predefinito di Compute Engine sul progetto.

Installa l'estensione JupyterLab

Puoi installare e utilizzare l'estensione JupyterLab su una macchina o una VM che ha accesso ai servizi Google, ad esempio la tua macchina locale o un'istanza VM di Compute Engine.

Per installare l'estensione:

  1. Scarica e installa Python versione 3.11 o successive da python.org/downloads.

    • Verifica l'installazione di Python 3.11+.
      python3 --version
      
  2. Virtualizza l'ambiente Python.

    pip3 install pipenv
    

    • Crea una cartella di installazione.
      mkdir jupyter
      
    • Passa alla cartella di installazione.
      cd jupyter
      
    • Crea un ambiente virtuale.
      pipenv shell
      
  3. Installa JupyterLab nell'ambiente virtuale.

    pipenv install jupyterlab
    

  4. Installa l'estensione JupyterLab.

    pipenv install bigquery-jupyter-plugin
    

  5. Avvia JupyterLab.

    jupyter lab
    

    1. La pagina Avvio app di JupyterLab si apre nel browser. Contiene una sezione Job e sessioni Dataproc. Può contenere anche sezioni Notebook Dataproc Serverless e Notebook cluster Dataproc se hai accesso a notebook o cluster Managed Service for Apache Spark con il componente facoltativo Jupyter in esecuzione nel tuo progetto.

      Pagina del browser di avvio app JupyterLab
    2. Per impostazione predefinita, la sessione interattiva viene eseguita nel progetto e nella regione impostati quando hai eseguito gcloud init in Prima di iniziare. Puoi modificare le impostazioni del progetto e della regione per le tue sessioni da JupyterLab Impostazioni > Google Cloud Impostazioni > Google Cloud Impostazioni progetto.

      Per applicare le modifiche, devi riavviare l'estensione.

Crea un modello di runtime di Managed Service per Apache Spark

I modelli di runtime di Managed Service per Apache Spark (chiamati anche modelli di sessione) contengono le impostazioni di configurazione per l'esecuzione del codice Spark in una sessione. Puoi creare e gestire i modelli di runtime utilizzando JupyterLab o Google Cloud CLI.

JupyterLab

  1. Fai clic sulla scheda New runtime template nella sezione Blocchi note Dataproc Serverless nella pagina Launcher di JupyterLab.

  2. Compila il modulo Template di runtime.

    • Informazioni sul modello:

      • Nome visualizzato, ID runtime e Descrizione: accetta o compila un nome visualizzato del modello, un ID runtime del modello e una descrizione del modello.
    • Configurazione dell'esecuzione: seleziona Account utente per eseguire i blocchi note con l'identità utente anziché con l'identità del account di servizio Dataproc.

      • Service account: se non specifichi un account di servizio, viene utilizzato il service account di servizio predefinito di Compute Engine.
      • Versione runtime: conferma o seleziona la 2.3 versione runtime.
      • Immagine container personalizzata: specifica facoltativamente l'URI di un'immagine container personalizzata.
      • Bucket di staging: puoi specificare facoltativamente il nome di un bucket di staging Cloud Storage da utilizzare con Managed Service for Apache Spark.
      • Repository di pacchetti Python: per impostazione predefinita, i pacchetti Python vengono scaricati e installati dalla cache pull-through PyPI quando gli utenti eseguono comandi di installazione pip nei loro notebook. Puoi specificare il repository di artefatti privati della tua organizzazione per i pacchetti Python da utilizzare come repository predefinito dei pacchetti Python.
    • Crittografia: accetta il valore predefinito Google-owned and Google-managed encryption key o seleziona Chiave di crittografia gestita dal cliente (CMEK). Se CMEK, seleziona o fornisci le informazioni sulla chiave.

    • Configurazione di rete: seleziona una subnet nel progetto o condivisa da un progetto host (puoi modificare il progetto da JupyterLab Impostazioni > Google Cloud Impostazioni > Google Cloud Impostazioni progetto. Puoi specificare tag di rete da applicare alla rete specificata. Tieni presente che Managed Service for Apache Spark abilita l'accesso privato Google (PGA) sulla subnet specificata. Per i requisiti di connettività di rete, vedi Configurazione di rete di Managed Service per Apache Spark.

    • Configurazione sessione: puoi compilare facoltativamente questi campi per limitare la durata delle sessioni create con il modello.

      • Tempo massimo di inattività:il tempo massimo di inattività prima che la sessione venga terminata. Intervallo consentito: da 10 minuti a 336 ore (14 giorni).
      • Tempo massimo della sessione:la durata massima di una sessione prima che venga terminata. Intervallo consentito: da 10 minuti a 336 ore (14 giorni).
    • Metastore: per utilizzare un servizio Dataproc Metastore con le tue sessioni, seleziona l'ID progetto e il servizio metastore.

    • Server di cronologia permanente: puoi selezionare un server di cronologia Spark permanente disponibile per accedere ai log delle sessioni durante e dopo le sessioni.

    • Proprietà Spark:puoi selezionare e aggiungere le proprietà Allocazione risorse, Scalabilità automatica o GPU di Spark. Fai clic su Aggiungi proprietà per aggiungere altre proprietà Spark. Per saperne di più, consulta Proprietà Spark.

    • Etichette:fai clic su Aggiungi etichetta per ogni etichetta da impostare nelle sessioni create con il modello.

  3. Fai clic su Salva per creare il modello.

  4. Per visualizzare o eliminare un modello di runtime.

    1. Fai clic su Impostazioni > Google Cloud Impostazioni.
    2. La sezione Impostazioni Dataproc > Modelli di runtime serverless mostra l'elenco dei modelli di runtime.

      Elenco dei modelli di runtime

      • Fai clic sul nome di un modello per visualizzarne i dettagli.
      • Puoi eliminare un modello dal menu Azione del modello.
  5. Apri e ricarica la pagina Avvio app di JupyterLab per visualizzare la scheda del modello di notebook salvato nella pagina Avvio app di JupyterLab.

gcloud

  1. Crea un file YAML con la configurazione del modello di runtime.

    YAML semplice

    environmentConfig:
      executionConfig:
        networkUri: default
    jupyterSession:
      kernel: PYTHON
      displayName: Team A
    labels:
      purpose: testing
    description: Team A Development Environment
    

    YAML complesso

    description: Example session template
    environmentConfig:
      executionConfig:
        serviceAccount: sa1
        # Choose either networkUri or subnetworkUri
        networkUri:
        subnetworkUri: default
        networkTags:
         - tag1
        kmsKey: key1
        idleTtl: 3600s
        ttl: 14400s
        stagingBucket: staging-bucket
      peripheralsConfig:
        metastoreService: projects/my-project-id/locations/us-central1/services/my-metastore-id
        sparkHistoryServerConfig:
          dataprocCluster: projects/my-project-id/regions/us-central1/clusters/my-cluster-id
    jupyterSession:
      kernel: PYTHON
      displayName: Team A
    labels:
      purpose: testing
    runtimeConfig:
      version: "2.3"
      containerImage: gcr.io/my-project-id/my-image:1.0.1
      properties:
        "p1": "v1"
    description: Team A Development Environment
    

  2. Crea un modello di sessione (runtime) dal file YAML eseguendo il comando gcloud beta dataproc session-templates import localmente o in Cloud Shell:

    gcloud beta dataproc session-templates import TEMPLATE_ID \
        --source=YAML_FILE \
        --project=PROJECT_ID \
        --location=REGION
    

Avviare e gestire i notebook

Dopo aver installato l'estensione JupyterLab di Managed Service for Apache Spark, puoi fare clic sulle schede dei modelli nella pagina Launcher di JupyterLab per:

Avvia un notebook Jupyter

La sezione Dataproc Serverless Notebooks nella pagina di avvio di JupyterLab mostra le schede dei modelli di notebook che corrispondono ai modelli di runtime di Managed Service for Apache Spark (vedi Creare un modello di runtime di Managed Service for Apache Spark).

  1. Fai clic su una scheda per creare una sessione Managed Service per Apache Spark e avviare un notebook. Al termine della creazione della sessione e quando il kernel del notebook è pronto per l'uso, lo stato del kernel cambia da Starting a Idle (Ready).

  2. Scrivi e testa il codice del notebook.

    1. Copia e incolla il seguente codice PySpark Pi estimation nella cella del notebook PySpark, quindi premi Maiusc+Invio per eseguire il codice.

      import random
          
      def inside(p):
          x, y = random.random(), random.random()
          return x*x + y*y < 1
          
      count = sc.parallelize(range(0, 10000)) .filter(inside).count()
      print("Pi is roughly %f" % (4.0 * count / 10000))

      Risultato del notebook:

  3. Dopo aver creato e utilizzato un notebook, puoi terminare la sessione del notebook facendo clic su Arresta kernel nella scheda Kernel.

    • Per riutilizzare la sessione, crea un nuovo notebook scegliendo Notebook dal menu File>>Nuovo. Dopo aver creato il nuovo notebook, scegli la sessione esistente dalla finestra di dialogo di selezione del kernel. Il nuovo notebook riutilizzerà la sessione e manterrà il contesto della sessione del notebook precedente.
  4. Se non termini la sessione, Managed Service per Apache Spark la termina quando scade il timer di inattività della sessione. Puoi configurare il tempo di inattività della sessione nella configurazione del modello di runtime. Il tempo di inattività predefinito della sessione è di un'ora.

Avvia un notebook su un cluster

Se hai creato un cluster Jupyter di Managed Service for Apache Spark, la pagina Launcher di JupyterLab contiene una sezione Dataproc Cluster Notebook con schede del kernel preinstallate.

Per avviare un notebook Jupyter sul cluster Managed Service for Apache Spark su Compute Engine:

  1. Fai clic su una scheda nella sezione Blocco note del cluster Dataproc.

  2. Quando lo stato del kernel cambia da Starting a Idle (Ready), puoi iniziare a scrivere ed eseguire il codice del notebook.

  3. Dopo aver creato e utilizzato un notebook, puoi terminare la sessione del notebook facendo clic su Arresta kernel nella scheda Kernel.

Gestire i file di input e di output in Cloud Storage

L'analisi dei dati esplorativi e la creazione di modelli ML spesso comportano input e output basati su file. Managed Service per Apache Spark accede a questi file su Cloud Storage.

  • Per accedere al browser Cloud Storage, fai clic sull'icona del browser Cloud Storage nella barra laterale della pagina Launcher di JupyterLab, quindi fai doppio clic su una cartella per visualizzarne i contenuti.

  • Puoi fare clic sui tipi di file supportati da Jupyter per aprirli e modificarli. Quando salvi le modifiche ai file, queste vengono scritte in Cloud Storage.

  • Per creare una nuova cartella Cloud Storage, fai clic sull'icona della nuova cartella, quindi inserisci il nome della cartella.

  • Per caricare file in un bucket Cloud Storage o in una cartella, fai clic sull'icona di caricamento, quindi seleziona i file da caricare.

Sviluppare il codice del notebook Spark

Dopo aver installato l'estensione JupyterLab, puoi avviare i notebook Jupyter dalla pagina Avvio app di JupyterLab per sviluppare il codice dell'applicazione.

Sviluppo di codice PySpark e Python

I cluster Managed Service per Apache Spark supportano i kernel PySpark e Python.

Sviluppo di codice SQL

Per aprire un notebook PySpark per scrivere ed eseguire codice SQL, nella pagina Launcher di JupyterLab, nella sezione Notebook Dataproc Serverless o Notebook cluster Dataproc, fai clic sulla scheda del kernel PySpark.

Comandi magici di Spark SQL: poiché il kernel PySpark che avvia Dataproc Serverless Notebooks è precaricato con i comandi magici di Spark SQL, anziché utilizzare spark.sql('SQL STATEMENT').show() per racchiudere l'istruzione SQL, puoi digitare %%sparksql magic nella parte superiore di una cella, quindi digitare l'istruzione SQL nella cella.

BigQuery SQL: il connettore BigQuery Spark consente al codice del notebook di caricare i dati dalle tabelle BigQuery, eseguire l'analisi in Spark e quindi scrivere i risultati in una tabella BigQuery.

I runtime Managed Service for Apache Spark 2.2 e successivi includono il connettore BigQuery Spark. Se utilizzi una versione precedente del runtime per avviare i blocchi note Managed Service per Apache Spark, puoi installare il connettore Spark BigQuery aggiungendo la seguente proprietà Spark al modello di runtime Managed Service per Apache Spark:

spark.jars: gs://spark-lib/bigquery/spark-bigquery-with-dependencies_2.12-0.25.2.jar

Sviluppo di codice Scala

I cluster Managed Service per Apache Spark creati con le versioni delle immagini 2.0 e successive includono Apache Toree, un kernel Scala per la piattaforma Jupyter Notebook che fornisce l'accesso interattivo a Spark.

  • Fai clic sulla scheda Apache Toree nella sezione Notebook del cluster Dataproc della pagina Avvio app di JupyterLab per aprire un notebook per lo sviluppo di codice Scala.

    Figura 1. Scheda del kernel Apache Toree nella pagina Avvio app di JupyterLab.

Sviluppare codice con l'estensione Visual Studio Code

Puoi utilizzare l'estensione Google Cloud Visual Studio Code (VS Code) per svolgere le seguenti operazioni:

  • Sviluppa ed esegui il codice Spark nei notebook di Managed Service per Apache Spark.
  • Crea e gestisci modelli di runtime (sessione) di Managed Service per Apache Spark, sessioni interattive e workload batch.

L'estensione Visual Studio Code è senza costi, ma ti vengono addebitati i costi per tutti i serviziGoogle Cloud , inclusi Managed Service per Apache Spark, Managed Service per Apache Spark e le risorse Cloud Storage che utilizzi.

Utilizzare VS Code con BigQuery: puoi anche utilizzare VS Code con BigQuery per fare quanto segue:

  • Sviluppare ed eseguire notebook BigQuery.
  • Sfoglia, ispeziona e visualizza l'anteprima dei set di dati BigQuery.

Prima di iniziare

  1. Scarica e installa VS Code.
  2. Apri VS Code, quindi fai clic su Estensioni nella barra delle attività.
  3. Utilizza la barra di ricerca per trovare l'estensione Jupyter e poi fai clic su Installa. L'estensione Jupyter di Microsoft è una dipendenza obbligatoria.

    Un elenco di estensioni Jupyter nella console VS Code.

Installa l' Google Cloud estensione

  1. Apri VS Code, quindi fai clic su Estensioni nella barra delle attività.
  2. Utilizza la barra di ricerca per trovare l'estensione Google Cloud Code e poi fai clic su Installa.

    L&#39;estensione Google Cloud Code nella console VS Code.

  3. Se richiesto, riavvia VS Code.

L'icona Google Cloud Codice è ora visibile nella barra delle attività di VS Code.

Configurare l'estensione

  1. Apri VS Code, quindi nella barra delle attività fai clic su Google Cloud Code.
  2. Apri la sezione Dataproc.
  3. Fai clic su Login to Google Cloud (Accedi a Google Cloud). Viene visualizzata la pagina di accesso con le tue credenziali.
  4. Utilizza la barra delle applicazioni di primo livello per andare a Code > Settings > Settings > Extensions.
  5. Trova Google Cloud Codice e fai clic sull'icona Gestisci per aprire il menu.
  6. Seleziona Settings (Impostazioni).
  7. Nei campi Progetto e Regione di Managed Service per Apache Spark, inserisci il nome del Google Cloud progetto e della regione da utilizzare per sviluppare notebook e gestire le risorse di Managed Service per Apache Spark.

Sviluppare notebook

  1. Apri VS Code, quindi nella barra delle attività fai clic su Google Cloud Code.
  2. Apri la sezione Notebook, poi fai clic su Nuovo notebook Spark serverless.
  3. Seleziona o crea un nuovo modello di runtime (sessione) da utilizzare per la sessione del notebook.
  4. Viene creato e aperto nell'editor un nuovo file .ipynb contenente il codice campione.

    Nuovo notebook Serverless Spark nella console VS Code.

    Ora puoi scrivere ed eseguire codice nel tuo blocco note Managed Service per Apache Spark.

Creare e gestire le risorse

  1. Apri VS Code, quindi nella barra delle attività fai clic su Google Cloud Code.
  2. Apri la sezione Dataproc, quindi fai clic sui seguenti nomi delle risorse:

    • Cluster: crea e gestisci cluster e job.
    • Serverless: crea e gestisci carichi di lavoro batch e sessioni interattive.
    • Modelli di runtime Spark: crea e gestisci i modelli di sessione.

    Risorse Dataproc elencate nella console di VS Code.

Esplora set di dati

Utilizza lo strumento di esplorazione dei set di dati di JupyterLab per visualizzare i set di dati del metastore BigLake.

Per aprire l'esploratore di set di dati di JupyterLab, fai clic sulla relativa icona nella barra laterale.

Puoi cercare un database, una tabella o una colonna in Esplora set di dati. Fai clic sul nome di un database, di una tabella o di una colonna per visualizzare i metadati associati.

Esegui il deployment del codice

Dopo aver installato l'estensione JupyterLab, puoi utilizzare JupyterLab per:

  • Esegui il codice del notebook sull'infrastruttura di Managed Service per Apache Spark

  • Pianifica l'esecuzione del notebook su Cloud Composer

  • Invia job batch all'infrastruttura Managed Service per Apache Spark o al tuo cluster Managed Service per Apache Spark.

Pianifica l'esecuzione del notebook su Cloud Composer

Completa i seguenti passaggi per pianificare l'esecuzione del codice del notebook su Cloud Composer come job batch su Managed Service per Apache Spark o su un cluster Managed Service per Apache Spark.

  1. Crea un ambiente Cloud Composer.

  2. Fai clic sul pulsante Pianificatore di job in alto a destra del blocco note.

  3. Compila il modulo Crea un job pianificato per fornire le seguenti informazioni:

    • Un nome univoco per il job di esecuzione del notebook
    • L'ambiente Cloud Composer da utilizzare per il deployment del notebook
    • Parametri di input se il notebook è parametrizzato
    • Il modello di runtime del cluster Managed Service per Apache Spark o serverless da utilizzare per eseguire il notebook
      • Se è selezionato un cluster, se arrestare il cluster dopo che il notebook termina l'esecuzione sul cluster
    • Numero di tentativi e ritardo tra i tentativi in minuti se l'esecuzione del notebook non riesce al primo tentativo
    • Notifiche di esecuzione da inviare e l'elenco dei destinatari. Le notifiche vengono inviate utilizzando una configurazione SMTP di Airflow.
    • La pianificazione dell'esecuzione del notebook
  4. Fai clic su Crea.

  5. Una volta pianificata correttamente la notebook, il nome del job viene visualizzato nell'elenco dei job pianificati nell'ambiente Cloud Composer.

Inviare un job batch a Managed Service per Apache Spark

  • Fai clic sulla scheda Serverless nella sezione Job e sessioni Dataproc nella pagina Launcher di JupyterLab.

  • Fai clic sulla scheda Batch, quindi su Crea batch e compila i campi Informazioni batch.

  • Fai clic su Invia per inviare il job.

Inviare un job batch a un cluster Managed Service per Apache Spark

  • Fai clic sulla scheda Cluster nella sezione Job e sessioni Dataproc nella pagina Launcher di JupyterLab.

  • Fai clic sulla scheda Job, quindi su Invia job.

  • Seleziona un cluster, quindi compila i campi Job.

  • Fai clic su Invia per inviare il job.

Visualizzare e gestire le risorse

Dopo aver installato l'estensione JupyterLab, puoi visualizzare e gestire Managed Service for Apache Spark e Managed Service for Apache Spark dalla sezione Job e sessioni Dataproc nella pagina Launcher di JupyterLab.

Fai clic sulla sezione Job e sessioni Dataproc per visualizzare le schede Cluster e Serverless.

Per visualizzare e gestire le sessioni di Managed Service per Apache Spark:

  1. Fai clic sulla scheda Serverless.
  2. Fai clic sulla scheda Sessioni, quindi su un ID sessione per aprire la pagina Dettagli sessione per visualizzare le proprietà della sessione, visualizzare i log in Esplora log e terminare una sessione. Google Cloud Nota: per avviare ogni notebook Managed Service per Apache Spark viene creata una sessione Managed Service per Apache Spark univoca.

Per visualizzare e gestire i batch di Managed Service per Apache Spark:

  1. Fai clic sulla scheda Batch per visualizzare l'elenco dei batch di Managed Service per Apache Spark nel progetto e nella regione correnti. Fai clic su un ID batch per visualizzare i dettagli del batch.

Per visualizzare e gestire i cluster Managed Service per Apache Spark:

  1. Fai clic sulla scheda Cluster. La scheda Cluster è selezionata per elencare i cluster del servizio gestito per Apache Spark attivi nel progetto e nella regione correnti. Puoi fare clic sulle icone nella colonna Azioni per avviare, arrestare o riavviare un cluster. Fai clic sul nome di un cluster per visualizzarne i dettagli. Puoi fare clic sulle icone nella colonna Azioni per clonare, interrompere o eliminare un job.

Per visualizzare e gestire i job Managed Service per Apache Spark:

  1. Fai clic sulla scheda Job per visualizzare l'elenco dei job nel progetto attuale. Fai clic su un ID job per visualizzare i dettagli del job.