Utilizza Trino con Dataproc

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Trino (in precedenza Presto) è un motore di query SQL distribuito progettato per eseguire query su grandi set di dati distribuiti su una o più origini dati eterogenee. Trino può eseguire query su Hive, MySQL, Kafka e altre origini dati tramite connettori. Questo tutorial ti mostra come:

  • Installa il servizio Trino su un cluster Dataproc
  • Esegui query su dati pubblici provenienti da un client Trino installato sul tuo computer locale che comunica con un servizio Trino nel tuo cluster
  • Esegui le query da un'applicazione Java che comunica con il servizio Tririno sul tuo cluster tramite il driver JDBC Trino Java.

Obiettivi

  • Crea un cluster Dataproc con Trino installato
  • Prepara i dati. Questo tutorial utilizza il set di dati pubblico Chicago Taxi Trip, disponibile in BigQuery.
    1. Estrai i dati da BigQuery
    2. Caricare i dati in Cloud Storage come file CSV
    3. Trasforma i dati:
      1. Esporre i dati come una tabella esterna Hive per rendere i dati interrogabili da Trino
      2. Converti i dati dal formato CSV al formato Parquet per velocizzare l'esecuzione di query
  • Inviare query sull'interfaccia a riga di comando di Trino o sul codice dell'applicazione utilizzando rispettivamente un tunnel SSH o il driver JDBC di Trino al coordinatore Trino in esecuzione nel cluster.
  • Controlla i log e monitora il servizio Trino tramite l'interfaccia utente web di Trino
  • Costi

    Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:

    Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono beneficiare di una prova gratuita.

    Prima di iniziare

    Se non lo hai già fatto, crea un progetto Google Cloud e un bucket Cloud Storage per conservare i dati utilizzati in questo tutorial. 1. Configurazione del progetto
    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 gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
    2. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

      Vai al selettore progetti

    3. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

    4. Abilita le API Dataproc, Compute Engine, Cloud Storage, and BigQuery.

      Abilita le API

    5. Installa Google Cloud CLI.
    6. Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:

      gcloud init
    7. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

      Vai al selettore progetti

    8. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

    9. Abilita le API Dataproc, Compute Engine, Cloud Storage, and BigQuery.

      Abilita le API

    10. Installa Google Cloud CLI.
    11. Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:

      gcloud init
    1. Creazione di un bucket Cloud Storage nel progetto per conservare i dati utilizzati in questo tutorial.
    1. Nella console, vai alla pagina Browser Cloud Storage.

      Vai al browser

    2. Fai clic su Crea bucket.
    3. Nella pagina Crea un bucket, inserisci le informazioni sul bucket. Per andare al passaggio successivo, fai clic su Continua.
    4. Fai clic su Crea.

    Crea un cluster Dataproc

    Crea un cluster Dataproc utilizzando il flag optional-components (disponibile nella versione immagine 2.1 e successive) per installare il componente facoltativo Trino sul cluster e il flag enable-component-gateway per abilitare il gateway dei componenti al fine di accedere alla UI web di Trino dalla console Google Cloud.

    1. Imposta le variabili di ambiente:
      • PROJECT: il tuo ID progetto
      • BUCKET_NAME:il nome del bucket Cloud Storage creato in Prima di iniziare
      • REGION: region in cui viene creato il cluster utilizzato in questo tutorial, ad esempio "us-west1"
      • lavoratori: 3-5 lavoratori sono consigliati per questo tutorial
      export PROJECT=project-id
      export WORKERS=number
      export REGION=region
      export BUCKET_NAME=bucket-name
      
    2. Esegui Google Cloud CLI sulla tua macchina locale per creare il cluster.
      gcloud beta dataproc clusters create trino-cluster \
          --project=${PROJECT} \
          --region=${REGION} \
          --num-workers=${WORKERS} \
          --scopes=cloud-platform \
          --optional-components=TRINO \
          --image-version=2.1  \
          --enable-component-gateway
      

    Preparazione dei dati

    Esporta il set di dati bigquery-public-data chicago_taxi_trips in Cloud Storage come file CSV, quindi crea una tabella esterna Hive per fare riferimento ai dati.

    1. Sul computer locale, esegui il comando seguente per importare i dati dei taxi da BigQuery come file CSV senza intestazioni nel bucket Cloud Storage creato in Prima di iniziare.
      bq --location=us extract --destination_format=CSV \
           --field_delimiter=',' --print_header=false \
             "bigquery-public-data:chicago_taxi_trips.taxi_trips" \
             gs://${BUCKET_NAME}/chicago_taxi_trips/csv/shard-.csv
      
    2. Crea tabelle esterne Hive supportate dai file CSV e Parquet nel bucket Cloud Storage.
      1. Crea la tabella esterna Hive chicago_taxi_trips_csv.
        gcloud dataproc jobs submit hive \
            --cluster trino-cluster \
            --region=${REGION} \
            --execute "
                CREATE EXTERNAL TABLE chicago_taxi_trips_csv(
                  unique_key   STRING,
                  taxi_id  STRING,
                  trip_start_timestamp  TIMESTAMP,
                  trip_end_timestamp  TIMESTAMP,
                  trip_seconds  INT,
                  trip_miles   FLOAT,
                  pickup_census_tract  INT,
                  dropoff_census_tract  INT,
                  pickup_community_area  INT,
                  dropoff_community_area  INT,
                  fare  FLOAT,
                  tips  FLOAT,
                  tolls  FLOAT,
                  extras  FLOAT,
                  trip_total  FLOAT,
                  payment_type  STRING,
                  company  STRING,
                  pickup_latitude  FLOAT,
                  pickup_longitude  FLOAT,
                  pickup_location  STRING,
                  dropoff_latitude  FLOAT,
                  dropoff_longitude  FLOAT,
                  dropoff_location  STRING)
                ROW FORMAT DELIMITED
                FIELDS TERMINATED BY ','
                STORED AS TEXTFILE
                location 'gs://${BUCKET_NAME}/chicago_taxi_trips/csv/';"
        
      2. Verifica la creazione della tabella esterna Hive.
        
        gcloud dataproc jobs submit hive \
            --cluster trino-cluster \
            --region=${REGION} \
            --execute "SELECT COUNT() FROM chicago_taxi_trips_csv;"
        
      3. Crea un'altra tabella esterna Hive chicago_taxi_trips_parquet con le stesse colonne, ma con dati archiviati in formato Parquet per migliorare le prestazioni delle query.
        gcloud dataproc jobs submit hive \
            --cluster trino-cluster \
            --region=${REGION} \
            --execute "
                CREATE EXTERNAL TABLE chicago_taxi_trips_parquet(
                  unique_key   STRING,
                  taxi_id  STRING,
                  trip_start_timestamp  TIMESTAMP,
                  trip_end_timestamp  TIMESTAMP,
                  trip_seconds  INT,
                  trip_miles   FLOAT,
                  pickup_census_tract  INT,
                  dropoff_census_tract  INT,
                  pickup_community_area  INT,
                  dropoff_community_area  INT,
                  fare  FLOAT,
                  tips  FLOAT,
                  tolls  FLOAT,
                  extras  FLOAT,
                  trip_total  FLOAT,
                  payment_type  STRING,
                  company  STRING,
                  pickup_latitude  FLOAT,
                  pickup_longitude  FLOAT,
                  pickup_location  STRING,
                  dropoff_latitude  FLOAT,
                  dropoff_longitude  FLOAT,
                  dropoff_location  STRING)
                STORED AS PARQUET
                location 'gs://${BUCKET_NAME}/chicago_taxi_trips/parquet/';"
        
      4. Carica i dati dalla tabella CSV Hive nella tabella Hive Parquet.
        gcloud dataproc jobs submit hive \
            --cluster trino-cluster \
            --region=${REGION} \
            --execute "
                INSERT OVERWRITE TABLE chicago_taxi_trips_parquet
                SELECT * FROM chicago_taxi_trips_csv;"
        
      5. Verifica che i dati siano stati caricati correttamente.
        gcloud dataproc jobs submit hive \
            --cluster trino-cluster \
            --region=${REGION} \
            --execute "SELECT COUNT(*) FROM chicago_taxi_trips_parquet;"
        

    Esegui delle query

    Puoi eseguire le query localmente dall'interfaccia a riga di comando Trino o da un'applicazione.

    Query dell'interfaccia a riga di comando Trino

    Questa sezione mostra come eseguire query sul set di dati dei taxi Hive Parquet utilizzando l'interfaccia a riga di comando di Trini.

    1. Esegui questo comando sulla macchina locale per connetterti al nodo master del cluster tramite SSH. Il terminale locale smetterà di rispondere durante l'esecuzione del comando.
      gcloud compute ssh trino-cluster-m
      
    2. Nella finestra del terminale SSH sul nodo master del cluster, esegui l'interfaccia a riga di comando Trino, che si connette al server Trino in esecuzione sul nodo master.
      trino --catalog hive --schema default
      
    3. Nel messaggio trino:default, verifica che Trino possa trovare le tabelle Hive.
      show tables;
      
      Table
      ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
       chicago_taxi_trips_csv
       chicago_taxi_trips_parquet
      (2 rows)
      
    4. Esegui le query dal prompt trino:default e confronta le prestazioni dei query Parquet con quelli dei dati CSV.
      • Query sui dati del gruppo
        select count() from chicago_taxi_trips_parquet where trip_miles > 50;
        
         _col0
        ‐‐‐‐‐‐‐‐
         117957
        (1 row)
        Query 20180928_171735_00006_2sz8c, FINISHED, 3 nodes Splits: 308 total, 308 done (100.00%) 0:16 [113M rows, 297MB] [6.91M rows/s, 18.2MB/s]
      • Query sui dati CSV
        
        select count() from chicago_taxi_trips_csv where trip_miles > 50;
        
        _col0
        ‐‐‐‐‐‐‐‐
         117957
        (1 row)
        Query 20180928_171936_00009_2sz8c, FINISHED, 3 nodes Splits: 881 total, 881 done (100.00%) 0:47 [113M rows, 41.5GB] [2.42M rows/s, 911MB/s]

    Query dell'applicazione Java

    Per eseguire le query da un'applicazione Java tramite il driver JDBC Trino Java: 1. Scarica il driver JDBC di Java Java. 1. Aggiungi una dipendenza trino-jdbc in Maven pom.xml.

    <dependency>
      <groupId>io.trino</groupId>
      <artifactId>trino-jdbc</artifactId>
      <version>376</version>
    </dependency>
    
    Esempio di codice Java
    package dataproc.codelab.trino;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    public class TrinoQuery {
      private static final String URL = "jdbc:trino://trino-cluster-m:8080/hive/default";
      private static final String SOCKS_PROXY = "localhost:1080";
      private static final String USER = "user";
      private static final String QUERY =
          "select count(*) as count from chicago_taxi_trips_parquet where trip_miles > 50";
      public static void main(String[] args) {
        try {
          Properties properties = new Properties();
          properties.setProperty("user", USER);
          properties.setProperty("socksProxy", SOCKS_PROXY);
          Connection connection = DriverManager.getConnection(URL, properties);
          try (Statement stmt = connection.createStatement()) {
            ResultSet rs = stmt.executeQuery(QUERY);
            while (rs.next()) {
              int count = rs.getInt("count");
              System.out.println("The number of long trips: " + count);
            }
          }
        } catch (SQLException e) {
          e.printStackTrace();
        }
      }
    }
    

    Logging e monitoraggio

    Logging

    I log di Trino si trovano all'indirizzo /var/log/trino/ nei nodi master e dei worker del cluster.

    UI web

    Vedi Visualizzazione e accesso agli URL dei componenti del gateway per aprire l'interfaccia utente di Trino Web in esecuzione sul nodo master del cluster nel browser locale.

    Monitoring

    Trino espone le informazioni di runtime del cluster tramite le tabelle di runtime. In una sessione Trino (dal messaggio trino:default), esegui la query seguente per visualizzare i dati della tabella di runtime:

    select * FROM system.runtime.nodes;
    

    Esegui la pulizia

    Dopo aver completato il tutorial, puoi eseguire la pulizia delle risorse che hai creato, in modo che smettano di utilizzare la quota e che vengano addebitati dei costi. Le seguenti sezioni descrivono come eliminare o disattivare queste risorse.

    Elimina il progetto

    Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.

    Per eliminare il progetto:

    1. In Google Cloud Console, vai alla pagina Gestisci risorse.

      Vai a Gestisci risorse

    2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
    3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

    Eliminare il cluster

    • Per eliminare il cluster:
      gcloud dataproc clusters delete --project=${PROJECT} trino-cluster \
          --region=${REGION}
      

    Elimina il bucket

    • Per eliminare il bucket Cloud Storage creato in Prima di iniziare, inclusi i file di dati archiviati nel bucket:
      gsutil -m rm -r gs://${BUCKET_NAME}