Trino (antigo Presto) é uma consulta SQL distribuída mecanismo projetado para consultar grandes conjuntos de dados distribuídos em um ou mais em fontes de dados heterogêneas. O Trino pode consultar dados Hive, MySQL, Kafka e outros dados fontes por meio de conectores. Neste tutorial, mostramos como fazer as seguintes tarefas:
- Instalar o serviço Trino em um cluster do Dataproc
- Consulte dados públicos de um cliente Trino instalado na máquina local que se comunica com um serviço do Trino no seu cluster
- Executar consultas a partir de um aplicativo Java que se comunica com o Serviço do Trino no cluster por meio do driver JDBC do Java para Trino.
Objetivos
- Extrair os dados do BigQuery
- Carregar os dados no Cloud Storage como arquivos CSV
- Transformar dados:
- Expor os dados como uma tabela externa Hive para torná-los consultáveis pelo Trino
- Converter os dados do formato CSV para o formato Parquet para agilizar as consultas
![](https://cloud.google.com/static/dataproc/images/presto-tutorial.png?authuser=7&hl=pt)
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
Se você ainda não tiver feito isso, crie um projeto do Google Cloud e um bucket do Cloud Storage para armazenar os dados usados neste tutorial. 1. Como configurar o projeto- Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Dataproc, Compute Engine, Cloud Storage, and BigQuery.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Dataproc, Compute Engine, Cloud Storage, and BigQuery.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- No console do Cloud, acesse a página Buckets do Cloud Storage.
- Clique em Criar bucket.
- Na página Criar um bucket, insira as informações do seu bucket. Para ir à próxima
etapa, clique em Continuar.
- Em Nomear o bucket, insira um nome que atenda aos requisitos de nomenclatura de bucket.
-
Em Escolha um local para armazenar seus dados, faça o seguinte:
- Selecione uma opção de Tipo de local.
- Escolha uma opção de Local.
- Em Escolher uma classe de armazenamento padrão para seus dados, selecione uma classe de armazenamento.
- Em Escolha como controlar o acesso a objetos, selecione uma opção de Controle de acesso.
- Em Configurações avançadas (opcional), especifique um método de criptografia, uma política de retenção ou rótulos de bucket.
- Clique em Criar.
Criar um cluster do Dataproc
Criar um cluster do Dataproc usando a sinalização optional-components
(disponível a partir da versão 2.1 da imagem) para instalar a
Componente opcional do Trino na
cluster e a sinalização enable-component-gateway
para ativar o
o Gateway de Componentes, para permitir
acessar a IU da Web do Trino no console do Google Cloud.
- Defina variáveis de ambiente.
- PROJECT: ID do projeto
- BUCKET_NAME: o nome do bucket do Cloud Storage que você criou em Antes de começar
- REGION: região onde o cluster usado neste tutorial será criado, por exemplo, "us-west1"
- WORKERS: 3 a 5 workers são recomendados para este tutorial
export PROJECT=project-id export WORKERS=number export REGION=region export BUCKET_NAME=bucket-name
- Execute a Google Cloud CLI na sua máquina local para
criar o 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
Preparar dados
Exporte o conjunto de dados bigquery-public-data
chicago_taxi_trips para o Cloud Storage como arquivos CSV e crie uma tabela externa Hive para fazer referência aos dados.
- Na máquina local, execute o comando a seguir para importar os dados de táxi de
BigQuery como arquivos CSV sem cabeçalhos no Cloud Storage
criado em Antes de começar.
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
- Crie tabelas externas do Hive com backup dos arquivos CSV e Parquet em seu bucket do Cloud Storage.
- Crie a tabela externa do 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/';"
- Verifique a criação da tabela externa Hive.
gcloud dataproc jobs submit hive \ --cluster trino-cluster \ --region=${REGION} \ --execute "SELECT COUNT(*) FROM chicago_taxi_trips_csv;"
- Crie outra tabela externa Hive
chicago_taxi_trips_parquet
com as mesmas colunas, mas com dados armazenados Formato Parquet para melhorar o desempenho das consultas.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/';"
- Carregue os dados da tabela CSV Hive no
Tabela Parquet Hive.
gcloud dataproc jobs submit hive \ --cluster trino-cluster \ --region=${REGION} \ --execute " INSERT OVERWRITE TABLE chicago_taxi_trips_parquet SELECT * FROM chicago_taxi_trips_csv;"
- Verifique se os dados foram carregados corretamente.
gcloud dataproc jobs submit hive \ --cluster trino-cluster \ --region=${REGION} \ --execute "SELECT COUNT(*) FROM chicago_taxi_trips_parquet;"
- Crie a tabela externa do Hive
Executar consultas
É possível executar consultas localmente a partir da CLI do Trino ou de um aplicativo.
Consultas da CLI do Trino
Esta seção demonstra como consultar o conjunto de dados de táxi Hive Parquet usando o CLI do Trino.
- Execute o seguinte comando na máquina local para SSH no nó mestre do cluster. O terminal local deixará de responder durante a execução do comando.
gcloud compute ssh trino-cluster-m
- Na janela do terminal SSH no nó mestre do cluster, execute o
CLI do Trino, que se conecta ao servidor do Trino em execução no mestre
nó.
trino --catalog hive --schema default
- No prompt
trino:default
, verifique se o Trino consegue encontrar as tabelas do Hive.show tables;
Table ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ chicago_taxi_trips_csv chicago_taxi_trips_parquet (2 rows)
- Execute consultas a partir do prompt
trino:default
e compare o desempenho da consulta de dados Parquet x CSV.- Consulta de dados Parquet
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] - Consulta de dados 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]
- Consulta de dados Parquet
Consultas de aplicativos Java
Para executar consultas de um aplicativo Java por meio do driver JDBC do Trino para Java:
1: Faça o download do
Driver JDBC do Java para Trino (em inglês).
1. Adicione uma dependência trino-jdbc
ao
pom.xml do Maven (em inglês).
<dependency> <groupId>io.trino</groupId> <artifactId>trino-jdbc</artifactId> <version>376</version> </dependency>Exemplo de código 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();
}
}
}
Geração de registros e monitoramento
Geração de registros
Os registros do Trino estão localizados em /var/log/trino/
no mestre do cluster.
nós de trabalho.
IU da Web
Consulte Como visualizar e acessar URLs do Gateway de componentes para abrir a interface da Web do Trino em execução no nó mestre do cluster no navegador local.
Monitoramento
O Trino expõe informações do ambiente de execução do cluster usando tabelas de ambiente de execução.
Em uma sessão do Trino (do trino:default
),
execute a seguinte consulta para visualizar os dados da tabela do ambiente de execução:
select * FROM system.runtime.nodes;
Limpar
Depois de concluir o tutorial, você pode limpar os recursos que criou para que eles parem de usar a cota e gerar cobranças. Nas seções a seguir, você aprenderá a excluir e desativar esses recursos.
Exclua o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto, faça o seguinte:
- No Console do Google Cloud, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
Excluir o cluster
- Para excluir o cluster:
gcloud dataproc clusters delete --project=${PROJECT} trino-cluster \ --region=${REGION}
Excluir o bucket
- Para excluir o bucket do Cloud Storage criado em
Antes de começar, incluindo os arquivos de dados
armazenadas no bucket:
gcloud storage rm gs://${BUCKET_NAME} --recursive