Trino mit Dataproc verwenden


Trino (früher Presto) ist eine verteilte SQL-Abfrage-Engine zum Abfragen großer Datasets, die über eine oder mehrere heterogene Datenquellen verteilt sind. Trino kann Hive, MySQL, Kafka und andere Datenquellen über Connectors abfragen. In dieser Anleitung wird Folgendes beschrieben:

  • Trino-Dienst in einem Dataproc-Cluster installieren
  • Öffentliche Daten von einem Trino-Client abfragen, der auf Ihrem lokalen Computer installiert ist und mit einem Trino-Dienst auf dem Cluster kommuniziert
  • Abfragen von einer Java-Anwendung ausführen, die über den Trino Java JDBC-Treiber mit dem Trino-Dienst in Ihrem Cluster kommuniziert.

Lernziele

  • Dataproc-Cluster mit installiertem Trino erstellen
  • Daten vorbereiten. In dieser Anleitung wird das öffentliche Dataset Chicago Taxi Trips verwendet, das in BigQuery verfügbar ist.
    1. Daten aus BigQuery extrahieren
    2. Daten in Cloud Storage als CSV-Dateien laden
    3. Daten transformieren:
      1. Sie machen die Daten als externe Hive-Tabelle verfügbar, damit sie von Trino abgefragt werden können.
      2. Daten aus dem CSV-Format in das Parquet-Format konvertieren, um die Abfrage zu beschleunigen
  • Abfragen über die Trino-Befehlszeile oder mit Anwendungscode jeweils mit einem SSH-Tunnel bzw. Trino JDBC-Treiber an den Trino-Koordinator senden, der auf dem Cluster ausgeführt wird
  • Logs prüfen und den Trino-Dienst über die Trino-Web-UI im Blick behalten
  • Kosten

    In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

    Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

    Hinweise

    Erstellen Sie ein Google Cloud-Projekt und einen Cloud Storage-Bucket für die in dieser Anleitung verwendeten Daten, sofern noch nicht geschehen. 1. Projekt einrichten
    1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
    2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

      Zur Projektauswahl

    3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

    4. Dataproc, Compute Engine, Cloud Storage, and BigQuery APIs aktivieren.

      Aktivieren Sie die APIs

    5. Installieren Sie die Google Cloud CLI.
    6. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

      gcloud init
    7. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

      Zur Projektauswahl

    8. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

    9. Dataproc, Compute Engine, Cloud Storage, and BigQuery APIs aktivieren.

      Aktivieren Sie die APIs

    10. Installieren Sie die Google Cloud CLI.
    11. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

      gcloud init
    1. Erstellen Sie einen Cloud Storage-Bucket in Ihrem Projekt, der die in dieser Anleitung verwendeten Daten enthalten soll.
    1. Wechseln Sie in der Google Cloud Console zur Cloud Storage-Seite Buckets.

      Zur Seite „Buckets“

    2. Klicken Sie auf Bucket erstellen.
    3. Geben Sie auf der Seite Bucket erstellen die Bucket-Informationen ein. Klicken Sie auf Weiter, um mit dem nächsten Schritt fortzufahren.
      • Geben Sie unter Bucket benennen einen Namen ein, der den Anforderungen für Bucket-Namen entspricht.
      • Gehen Sie unter Speicherort für Daten auswählen folgendermaßen vor:
        • Wählen Sie eine Option für Standorttyp aus.
        • Wählen Sie eine Standort-Option aus.
      • Wählen Sie unter Standardspeicherklasse für Ihre Daten auswählen eine Speicherklasse aus.
      • Wählen Sie unter Zugriffssteuerung für Objekte auswählen eine Option für die Zugriffssteuerung aus.
      • Geben Sie für Erweiterte Einstellungen (optional) eine Verschlüsselungsmethode, eine Aufbewahrungsrichtlinie oder Bucket-Labels an.
    4. Klicken Sie auf Erstellen.

    Dataproc-Cluster erstellen

    Erstellen Sie einen Dataproc-Cluster mit dem Flag optional-components (verfügbar ab Image-Version 2.1), um die optionale Trino-Komponente im Cluster zu installieren, und mit dem Flag enable-component-gateway, um Component Gateway zu aktivieren und Ihnen den Zugriff auf die Trino-Web-UI über die Google Cloud Console zu ermöglichen.

    1. Legen Sie Umgebungsvariablen fest:
      • PROJECT: Ihre Projekt-ID
      • BUCKET_NAME: Der Name des Cloud Storage-Buckets, den Sie unter Hinweise erstellt haben
      • REGION: Die Region, in der der Cluster für diese Anleitung erstellt wird, z. B. "us-west1"
      • WORKERS: Für diese Anleitung werden drei bis fünf Worker empfohlen.
      export PROJECT=project-id
      export WORKERS=number
      export REGION=region
      export BUCKET_NAME=bucket-name
      
    2. Führen Sie die Google Cloud CLI auf Ihrem lokalen Computer aus, um den Cluster zu erstellen.
      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
      

    Daten vorbereiten

    Exportieren Sie das bigquery-public-data-Dataset chicago_taxi_trips als CSV-Dateien in Cloud Storage und erstellen Sie dann eine externe Hive-Tabelle, um auf die Daten zu verweisen.

    1. Führen Sie auf Ihrem lokalen Computer den folgenden Befehl aus, um die Taxidaten aus BigQuery als CSV-Dateien ohne Header in den Cloud Storage-Bucket zu importieren, den Sie unter Vorbereitung erstellt haben.
      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. Erstellen Sie externe Hive-Tabellen, die von den CSV- und Parquet-Dateien in Ihrem Cloud Storage-Bucket unterstützt werden.
      1. Erstellen Sie die externe Hive-Tabelle 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. Prüfen Sie die Erstellung der externen Hive-Tabelle.
        gcloud dataproc jobs submit hive \
            --cluster trino-cluster \
            --region=${REGION} \
            --execute "SELECT COUNT(*) FROM chicago_taxi_trips_csv;"
        
      3. Erstellen Sie eine weitere externe Hive-Tabelle chicago_taxi_trips_parquet mit denselben Spalten, aber mit Daten, die im Parquet-Format gespeichert sind, um die Abfrageleistung zu verbessern.
        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. Laden Sie die Daten aus der Hive-CSV-Tabelle in die Hive Parquet-Tabelle.
        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. Überprüfen Sie, ob die Daten korrekt geladen wurden.
        gcloud dataproc jobs submit hive \
            --cluster trino-cluster \
            --region=${REGION} \
            --execute "SELECT COUNT(*) FROM chicago_taxi_trips_parquet;"
        

    Abfragen ausführen

    Sie können Abfragen lokal über die Trino-Befehlszeile oder über eine Anwendung ausführen.

    Abfragen über die Trino-Befehlszeile

    In diesem Abschnitt wird gezeigt, wie Sie das Hive Parquet-Taxi-Dataset über die Trino CLI abfragen.

    1. Führen Sie den folgenden Befehl auf Ihrem lokalen Computer aus, um eine SSH-Verbindung zum Masterknoten des Clusters herzustellen. Das lokale Terminal reagiert während der Ausführung des Befehls nicht mehr.
      gcloud compute ssh trino-cluster-m
      
    2. Führen Sie im SSH-Terminalfenster auf dem Masterknoten des Clusters die Trino-Befehlszeile aus, die eine Verbindung zum Trino-Server herstellt, der auf dem Masterknoten ausgeführt wird.
      trino --catalog hive --schema default
      
    3. Prüfen Sie an der trino:default-Eingabeaufforderung, ob Trino die Hive-Tabellen finden kann.
      show tables;
      
      Table
      ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
       chicago_taxi_trips_csv
       chicago_taxi_trips_parquet
      (2 rows)
      
    4. Führen Sie Abfragen über die trino:default-Eingabeaufforderung aus und vergleichen Sie die Leistung beim Abfragen von Parquet-Daten mit CSV-Daten.
      • Parquet-Datenabfrage
        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]
      • CSV-Datenabfrage
        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]

    Java-Anwendungsabfragen

    So führen Sie Abfragen aus einer Java-Anwendung über den Trino Java-JDBC-Treiber aus: 1. Laden Sie den Trino Java-JDBC-Treiber herunter. 1. Fügen Sie eine trino-jdbc-Abhängigkeit in die Maven-pom.xml ein.

    <dependency>
      <groupId>io.trino</groupId>
      <artifactId>trino-jdbc</artifactId>
      <version>376</version>
    </dependency>
    
    Java-Beispielcode
    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 und Monitoring

    Logging

    Die Trino-Logs befinden sich unter /var/log/trino/ auf den Master- und Worker-Knoten des Clusters.

    Web-UI

    Unter Component Gateway-URLs ansehen und darauf zugreifen wird beschrieben, wie Sie die auf dem Masterknoten des Clusters ausgeführte Trino-Web-UI in Ihrem lokalen Browser öffnen.

    Monitoring

    Trino stellt Informationen zur Clusterlaufzeit über Laufzeittabellen bereit. Führen Sie in einer Trino-Sitzung über die Eingabeaufforderung trino:default die folgende Abfrage aus, um Laufzeittabellendaten anzusehen:

    select * FROM system.runtime.nodes;
    

    Bereinigen

    Nachdem Sie die Anleitung abgeschlossen haben, können Sie die erstellten Ressourcen bereinigen, damit sie keine Kontingente mehr nutzen und keine Gebühren mehr anfallen. In den folgenden Abschnitten erfahren Sie, wie Sie diese Ressourcen löschen oder deaktivieren.

    Projekt löschen

    Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.

    So löschen Sie das Projekt:

    1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

      Zur Seite „Ressourcen verwalten“

    2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
    3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

    Cluster löschen

    • So löschen Sie den Cluster:
      gcloud dataproc clusters delete --project=${PROJECT} trino-cluster \
          --region=${REGION}
      

    Bucket löschen

    • So löschen Sie den Cloud Storage-Bucket, den Sie unter Vorbereitung erstellt haben, einschließlich der im Bucket gespeicherten Datendateien:
      gsutil -m rm -r gs://${BUCKET_NAME}