Usando o Apache Trino
O Apache Trino permite que você execute consultas adhoc e ETL em vários sistemas de arquivos de big data. Por padrão, o Trino é instalado no primeiro nó mestre do cluster e tem os conectores system
, tpch
e hive
instalados.
Para executar a operação CRUD no metastore do Hive, adicione a política HDFS com o caminho do recurso como /tmp,/warehouse
e a permissão como R/W/E
para o usuário do Trino.
Ajuste de Desempenho
O Trino é um mecanismo de consulta SQL distribuído projetado para lidar com grandes volumes de dados em muitas fontes de dados, incluindo armazenamento de objetos em ambientes de nuvem. No entanto, o desempenho do Trino pode ser afetado por vários fatores, como o tamanho e a complexidade dos dados, a largura de banda da rede disponível, a configuração do cluster e os padrões de consulta. Portanto, é importante executar ajustes de desempenho para otimizar o desempenho e a escalabilidade do Trino para casos de uso específicos do cliente.
fs.oci.io.read.ahead.blocksize = 6291456
: Este parâmetro define o tamanho do bloco (em bytes) usado para buffer de leitura antecipada em leituras de armazenamento de objetos. Por padrão, o tamanho do bloco é definido como 262144 (256 KB), mas defini-lo como um valor maior, como 6291456 (6 MB), pode ajudar a melhorar o desempenho de leitura de arquivos grandes, especialmente para leituras sequenciais.fs.oci.io.read.ahead = true
: Este parâmetro controla o mecanismo de buffer de leitura antecipada para leituras de armazenamento de objetos no Trino. Quando o buffer de leitura antecipada está ativado, o Trino lê proativamente dados adicionais além da solicitação de leitura atual, em antecipação a futuras solicitações de leitura. Isso pode ajudar a reduzir o impacto da latência da rede e melhorar o desempenho de cargas de trabalho com leitura pesada.fs.oci.caching.object.parquet = true
: Este parâmetro permite o armazenamento em cache de objetos Parquet no sistema de arquivos local para melhorar o desempenho da consulta ao trabalhar com arquivos Parquet. Quando definido como verdadeiro, o cliente de armazenamento do OCI armazena os objetos Parquet no sistema de arquivos local para leituras subsequentes.fs.oci.caching.filesystem.enabled=true
: Este parâmetro permite o armazenamento em cache de dados do armazenamento de objetos do OCI no cache do HDFS. Isso pode melhorar o desempenho reduzindo a quantidade de dados que precisam ser recuperados do armazenamento de objetos e armazenando no cache os dados acessados com frequência.
Defina as configurações a seguir na IU do Ambari.
- Acesse o Apache Ambari.
- Na barra de ferramentas lateral, em Serviços, selecione Trino.
- Selecione Configurações e, em seguida, atualize/adicione as propriedades das configurações.
Parâmetro | Descrição | Onde s]Definir | Valor Recomendado |
---|---|---|---|
Heap (-Xmx) |
Este parâmetro especifica a quantidade máxima de memória heap que o colaborador Trino pode usar. Recomendamos que você defina esse parâmetro como 80% da memória física disponível na máquina. | jvm.config |
Recomendamos definir este parâmetro para 75-80% da memória física disponível na máquina. Observação: Se outros processos estiverem sendo executados no mesmo nó em que o Trino worker está sendo executado, deixe alguma quantidade de memória física para esses processos. Nesses casos, defina o valor do parâmetro Por exemplo, se outros processos no mesmo nó exigirem 4 GB de memória e o total de memória física disponível no nó for 16 GB, defina o parâmetro |
query.max-memory-per-node |
A memória de um único nó de trabalho. | config.properties |
Defina esse parâmetro para um valor menor ou igual à diferença entre a memória JVM e o valor Memória Efetiva = Total de Heap da JVM - Headroom do Heap Por exemplo, se houver um cenário de usuário concorrente, defina o parâmetro como Memória Efetiva/Consultas Simultâneas. |
query.max-memory |
A memória de todos os nós em um cluster. | config.properties |
Defina esse parâmetro para um valor calculado com base na seguinte fórmula: Valor de query.max-memory-per-node × Número de nós de trabalho. |
query.max-total-memory |
A quantidade total de memória consumida por um cluster, que não deve ser menor que o valor de query.max-memory . |
config.properties |
Se a simultaneidade não for alta, defina esse parâmetro com o mesmo valor que o parâmetro query.max-memory . Se a simultaneidade for alta, o valor do parâmetro query.max-total-memory não poderá exceder a capacidade máxima de memória do cluster, que é igual a 70% da memória JVM multiplicada pelo número de nós de trabalho. Diminua proporcionalmente os valores de query.max-memory e query.max-memory-per-node com base em seus requisitos. Você pode diminuir o valor de query.max-memory para a metade de query.max-total-memory . Nesse caso, você deve definir o parâmetro query.max-memory-per-node com o valor query.max-memory dividido pelo número de nós de trabalho. |
memory.heap-headroom-per-node |
A memória heap reservada da JVM. | config.properties |
A Memória Efetiva deve ser 15% da memória JVM |
task.concurrency
|
Simultaneidade local padrão para operadores paralelos, como junções e agregações. Ajuste esse valor para cima ou para baixo com base na simultaneidade de consultas e na utilização de recursos do colaborador. Valores mais baixos são melhores para clusters que executam muitas consultas simultaneamente, porque o cluster já é utilizado por todas as consultas em execução, portanto, adicionar mais simultaneidade resulta em lentidões por causa da alternância de contexto e outras despesas indiretas. Valores mais altos são melhores para clusters que executam apenas uma ou algumas consultas por vez. | config.properties |
80% da CPU disponível em um nó/VM |