Trino (ehemals Presto) ist eine verteilte SQL-Abfrage Engine für die Abfrage 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 erläutert:
- Den Trino-Dienst in einem Managed Service for Apache Spark-Cluster installieren
- Öffentliche Daten über einen Trino-Client abfragen, der auf Ihrem lokalen Computer installiert ist und mit einem Trino-Dienst im Cluster kommuniziert
- Abfragen mit einer Java-Anwendung ausführen, die über den Java-JDBC-Treiber für Trino mit dem Trino-Dienst im Cluster kommuniziert
Ziele
- Daten aus BigQuery extrahieren
- Daten in Cloud Storage als CSV-Dateien laden
- Daten transformieren:
- Daten als externe Hive-Tabelle zur Verfügung stellen, damit sie von Trino abgefragt werden können
- Daten aus dem CSV-Format in das Parquet-Format konvertieren, um die Abfrage zu beschleunigen
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.
Verwenden Sie den Preisrechner.
Hinweis
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- Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Google Cloud-Kunde sind, erstellen Sie ein Konto, um zu sehen, wie sich unsere Produkte in realen Szenarien schlagen. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc, Compute Engine, Cloud Storage, and BigQuery APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc, Compute Engine, Cloud Storage, and BigQuery APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
- Wechseln Sie in der Google Cloud Console unter „Cloud Storage“ zur Seite Buckets.
- Klicken Sie auf Erstellen.
- Geben Sie auf der Seite Bucket erstellen die Bucket-Informationen ein. Klicken Sie auf Weiter, um mit dem nächsten
Schritt fortzufahren.
-
Gehen Sie im Abschnitt Erste Schritte so vor:
- Geben Sie einen global eindeutigen Namen ein, der den Anforderungen für Bucket-Namen entspricht.
- So fügen Sie ein
Bucket-Label hinzu:
Maximieren Sie den Abschnitt Label (),
klicken Sie auf add_box
Label hinzufügen und geben Sie einen
keyund einenvaluefür Ihr Label an.
-
Gehen Sie im Abschnitt Speicherort für Daten auswählen so vor:
- Wählen Sie einen Standorttyp aus.
- Wählen Sie im Drop-down-Menü Standorttyp einen Standort aus, an dem die Daten Ihres Buckets dauerhaft gespeichert werden sollen.
- Wenn Sie den Standorttyp Dual-Region auswählen, können Sie auch die Turboreplikation aktivieren, indem Sie das entsprechende Kästchen anklicken.
- Wenn Sie die Bucket-übergreifende Replikation einrichten möchten, wählen Sie
Bucket-übergreifende Replikation über Storage Transfer Service hinzufügen aus und
führen Sie die folgenden Schritte aus:
Bucket-übergreifende Replikation einrichten
- Wählen Sie im Menü Bucket einen Bucket aus.
Klicken Sie im Bereich Replikationseinstellungen auf Konfigurieren , um die Einstellungen für den Replikationsjob zu konfigurieren.
Der Bereich Bucket-übergreifende Replikation konfigurieren wird angezeigt.
- Wenn Sie die zu replizierenden Objekte nach dem Objektnamenspräfix filtern möchten, geben Sie ein Präfix ein, mit dem Sie Objekte ein- oder ausschließen möchten, und klicken Sie dann auf Präfix hinzufügen.
- Wenn Sie eine Speicherklasse für die replizierten Objekte festlegen möchten, wählen Sie im Menü Speicherklasse eine Speicherklasse aus. Wenn Sie diesen Schritt überspringen, verwenden die replizierten Objekte standardmäßig die Speicherklasse des Ziel-Buckets.
- Klicken Sie auf Fertig.
-
Gehen Sie im Abschnitt Speicherort für Daten auswählen so vor:
- Wählen Sie eine Standardspeicherklasse für den Bucket oder Autoclass für die automatische Speicherklassenverwaltung der Daten Ihres Buckets aus.
- Wenn Sie den hierarchischen Namespace aktivieren möchten, wählen Sie im Abschnitt Speicher für datenintensive Arbeitslasten optimieren die Option Hierarchischen Namespace für diesen Bucket aktivieren aus.
- Im Abschnitt Zugriff auf Objekte steuern wählen Sie aus, ob der Bucket Verhinderung des öffentlichen Zugriffs durchsetzt, und wählen Sie eine Methode für die Zugriffssteuerung für die Objekte Ihres Buckets aus.
-
Gehen Sie im Bereich Auswählen, wie Objektdaten geschützt werden so vor:
- Wählen Sie eine der Optionen unter Datenschutz aus, die Sie
für Ihren Bucket festlegen möchten.
- Wenn Sie das vorläufige Löschen aktivieren möchten, klicken Sie das Kästchen Richtlinie für vorläufiges Löschen (zur Datenwiederherstellung) an, und geben Sie die Anzahl der Tage an, die Objekte nach dem Löschen aufbewahrt werden sollen.
- Wenn Sie die Objektversionierung festlegen möchten, klicken Sie das Kästchen Objektversionierung (zur Versionsverwaltung) an und geben Sie die maximale Anzahl der Versionen pro Objekt und die Anzahl der Tage an, nach denen die nicht aktuellen Versionen ablaufen.
- Wenn Sie die Aufbewahrungsrichtlinie für Objekte und Buckets aktivieren möchten, klicken Sie das Kästchen Aufbewahrung (für Compliance) an und gehen Sie so vor:
- Wenn Sie die Objektaufbewahrungssperre aktivieren möchten, klicken Sie das Kästchen Objektaufbewahrung aktivieren an.
- Wenn Sie die Bucket-Sperre aktivieren möchten, klicken Sie das Kästchen Aufbewahrungsrichtlinie für Bucket festlegen an und wählen Sie eine Zeiteinheit und eine Zeitdauer für die Aufbewahrungsdauer aus.
- Wenn Sie auswählen möchten, wie Ihre Objektdaten verschlüsselt werden, maximieren Sie den Datenverschlüsselung-Bereich () und wählen Sie eine Datenverschlüsselung-Methode aus.
- Wählen Sie eine der Optionen unter Datenschutz aus, die Sie
für Ihren Bucket festlegen möchten.
-
Gehen Sie im Abschnitt Erste Schritte so vor:
- Klicken Sie auf Erstellen.
Managed Service for Apache Spark-Cluster erstellen
Erstellen Sie einen Managed Service for Apache Spark-Cluster mit dem optional-components Flag
(verfügbar ab Image-Version 2.1), um die
optionale Komponente „Trino“ im
Cluster zu installieren, und mit dem enable-component-gateway Flag, um das
Component Gateway zu aktivieren, damit
Sie über die Google Cloud Console auf die Trino-Web-UI zugreifen können.
- Umgebungsvariablen festlegen:
- 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
- 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.
- Führen Sie den folgenden Befehl auf Ihrem lokalen Computer 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 - Erstellen Sie externe Hive-Tabellen, die von den CSV- und Parquet-Dateien im Cloud Storage-Bucket unterstützt werden.
- 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/';" - 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;" - Erstellen Sie eine weitere externe Hive-Tabelle
chicago_taxi_trips_parquetmit denselben Spalten, aber mit Daten im Parquet-Format, 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/';" - 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;" - Prü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;"
- Erstellen Sie die externe Hive-Tabelle
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 mithilfe der Trino-Befehlszeile abfragen.
- 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
- 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 Master
Knoten ausgeführt wird.
trino --catalog hive --schema default
- Prüfen Sie an der Eingabeaufforderung
trino:default, ob Trino die Hive-Tabellen finden kann.show tables;
Table ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ chicago_taxi_trips_csv chicago_taxi_trips_parquet (2 rows)
- Führen Sie Abfragen an der Eingabeaufforderung
trino:defaultaus und vergleichen Sie die Leistung von Parquet-Datenabfragen mit CSV-Datenabfragen.- 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]
- Parquet-Datenabfrage
Java-Anwendungsabfragen
So führen Sie Abfragen mit einer Java-Anwendung über den Java-JDBC-Treiber für Trino aus: 1. Laden Sie den
Java-JDBC-Treiber für Trino herunter.
1. Fügen Sie eine trino-jdbc Abhängigkeit in
die Maven-Datei pom.xml ein.
<dependency> <groupId>io.trino</groupId> <artifactId>trino-jdbc</artifactId> <version>376</version> </dependency>
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 auf den Master- und Worker-Knoten des Clusters unter /var/log/trino/.
Web-UI
Unter Komponenten-Gateway-URLs ansehen und auf diese zugreifen erfahren Sie, 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 an der Eingabeaufforderung trino:default die folgende Abfrage aus, um die Daten der Laufzeittabelle anzuzeigen:
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:
- Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Herunterfahren), 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
Hinweise erstellt haben, einschließlich der Datendateien
im Bucket:
gcloud storage rm gs://${BUCKET_NAME} --recursive