As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Desafios comuns ao escalar workloads do Trino
Os principais benefícios de usar o Amazon S3 com o Trino são a capacidade do S3 de escalar para grandes volumes de dados e a relação custo-benefício do S3. Porém, quando grandes volumes de dados são consultados, vários problemas de performance relacionados pode acontecer de vez em quando. Isso pode resultar da maneira como os dados são armazenados, de configurações que limitam a boa performance ou outros motivos. Quando esses problemas ocorrem, existem medidas eficazes que você pode tomar para evitá-los ou mitigá-los.
Esta seção começa com uma lista de otimizações gerais que você pode implementar para aumentar a performance das consultas em grandes volumes de dados. Em seguida, os problemas comuns são detalhados, e mitigações são fornecidas para cada um.
Este tópico foi extraído da seguinte apresentação da conferência: Acelerar a performance em grande escala: práticas recomendadas para o Trino com o Amazon S3
Otimizar o layout dos dados para conjuntos de dados grandes
Gargalos de performance não são raros quando você está consultando grandes conjuntos de dados. Porém, existem práticas recomendadas que você pode implementar para ter uma vantagem inicial ao usar o Trino para consultar dados no Amazon S3. Incluindo o seguinte:
Particionamento: Particionamento significa organizar dados em uma hierarquia e armazenar dados relacionados juntos, com base em atributos relacionados. O particionamento faz com que as consultas não precisem verificar tantos dados irrelevantes, e isso resulta em uma melhor performance de consultas. É possível usar várias estratégias de particionamento, como organizar dados de origem com prefixos, especificamente por intervalos de datas, regiões ou outros atributos. Para obter informações mais detalhadas sobre dados de particionamento no Amazon S3 para aumentar o desempenho, consulte a postagem do blog Comece a gerenciar partições para tabelas do Amazon S3 apoiadas AWS pelo Glue Data Catalog ou a
postagem Top 10 Performance Tuning Tips for. Amazon Athena Armazenamento em bucket: armazenamento em bucket refere-se ao agrupamento de dados relacionados em arquivos comuns. Por exemplo, se você consulta dados de acordo com uma região geográfica, como um estado, pode aumentar a performance das consultas agrupando todos os dados de um determinado estado no mesmo arquivo ou grupo de arquivos. Para que isso funcione melhor, baseie seu agrupamento em um atributo de dados com alta cardinalidade, como um estado ou província, por exemplo. Além disso, você pode levar seus padrões de consulta em consideração. Um exemplo disso poderia ser agrupar os dados da Califórnia e do Oregon, se suas consultas normalmente leem dados desses estados juntos.
Gerenciamento de prefixos do S3: é possível usar prefixos do Amazon S3 para implementar uma estratégia de particionamento. Se você usar apenas um prefixo para um bucket do Amazon S3, como uma data específica, por exemplo, isso pode resultar em um grande número de solicitações e em um erro HTTP 503. Recomendamos o uso de prefixos para adicionar outras condições e organizar os dados de origem com mais eficiência. Para obter mais informações, consulte Organizar objetos usando prefixos, na documentação do Amazon S3. O breve exemplo a seguir mostra um prefixo que resulta em um throughput de solicitações melhor:
s3://bucket/country=US/dt=2024-06-13. Neste exemplo, o país e a data são incluídos no prefixo, o que resulta em menos leituras do que em um caso onde o prefixo inclui somente a data.A mitigação de erros HTTP 503 é discutida com mais detalhes na seção sobre desaceleração do HTTP mais adiante.
Otimizar o tamanho dos dados: é possível executar o comando OPTIMIZE para definir uma configuração que resulte em consultas com melhor performance. Para executá-lo em tabelas externas do Hive, siga estas etapas:
Use
OPTIMIZEcom o seguinte parâmetro:hive.non-managed-table-writes-enabled=true. Para obter mais informações sobre essa propriedade, consulte Propriedades gerais de configuração do Hive. Defina o seguinte parâmetro de sessão:
SET SESSIONcatalog.non_transactional_optimize_enabled=trueExecute o comando
OPTIMIZE:ALTER TABLE. Nesse caso,catalog.schema.tableEXECUTE optimize(file_size_threshold => '128MB')file_size_thresholdé de 100 MB por padrão. Aumentar esse limite, como mostra o exemplo, fará com que arquivos abaixo de 128 MB sejam mesclados.
Configurar novas tentativas: é possível aumentar o limite de novas tentativas, o que pode reduzir a chance de erros HTTP 503, definindo o seguinte:
s3.max-error-retries. Isso se aplica quando você usa a TrinoFileSystem API e a versão 449 do Trino ou posterior. Por outro lado, ao usar o Amazon EMR com Trino, você usa o EMRFS para acessar o Amazon S3. Com o EMRFS, é possível aumentar o número de retiradas alterando o parâmetrofs.s3.maxRetries.Escolha uma classe de armazenamento do Amazon S3: escolher a classe de armazenamento apropriada para dados em diferentes pontos do ciclo de vida pode ajudar tanto na performance quanto no custo, com base nos seus requisitos para coleções de dados específicas. Para ter mais informações, consulte Compreender e gerenciar classes de armazenamento do Amazon S3 na documentação do Amazon S3.
Migrar para o Iceberg: outra solução para mitigar problemas de performance, especificamente em relação à execução de consultas em arquivos pequenos, é migrar para tabelas do Iceberg. O Iceberg possui recursos que lidam bem com arquivos pequenos.
Use compactação automática de dados — Se você utiliza tabelas Iceberg, a compactação automática de dados com o AWS Glue Data Catalog pode otimizar o tamanho dos dados e resultar em melhor desempenho de consultas.
Desafios comuns ao consultar conjuntos grandes de dados
Esta seção apresenta uma coleção de problemas comuns que podem ocorrer quando você acumula um grande conjunto de dados no Amazon S3 e o consulta com o Trino. Cada seção mostra maneiras de resolver o problema ou reduzir seu impacto nas consultas. Cada um dos problemas descritos nas seções a seguir foi reproduzido e testado usando um conector do Hive.
Varreduras de dados grandes
Quando sua consulta precisa verificar grandes conjuntos de dados, isso pode resultar em problemas como baixa performance de consultas e maior custo de armazenamento. Volumes grandes de dados podem ser gerados devido a um rápido crescimento ou planejamento de dados que não resulta na movimentação de dados legados dentro de um cronograma adequado. Isso pode gerar consultas mais lentas.
Para reduzir o impacto na performance causado pela verificação de conjuntos de dados grandes, recomendamos o uso do particionamento e da compartimentação:
O particionamento agrupa dados relacionados com base em seus atributos. Usar o particionamento de maneira eficiente pode melhorar muito a performance das consultas.
Compartimentação refere-se ao agrupamento de dados em arquivos ou buckets de acordo com colunas de dados específicas e relacionadas. Em geral, a compartimentação significa manter fisicamente os arquivos de dados de origem relacionados juntos.
Para ilustrar como a atenuação pode funcionar para grandes verificações de dados, suponha que você armazene e consulte dados que tenham registros com um atributo de estado, que pode ser atribuído à Califórnia ou ao Alasca, e esse atributo de estado seja uma das suas condições de consulta. É possível melhorar a performance da consulta armazenando dados de cada estado em um bucket do S3 separado ou particionando seus dados com base no estado, usando um prefixo do S3. O particionamento e a compartimentação também podem melhorar a performance se você os basear em uma coluna adicional, como um atributo de data, por exemplo.
nota
Se uma coluna tiver alta cardinalidade e você quiser usá-la para agrupar dados, recomendamos o uso da compartimentação nesse caso. Por outro lado, geralmente, as chaves de partição devem ter menor cardinalidade.
Usar vários tipos de armazenamento do S3
Em geral, você escolhe os tipos de armazenamento com base nos requisitos de performance, acesso a dados, resiliência e custo para suas workloads. Pode haver compensações entre custo e performance. É importante escolher a classe de armazenamento apropriada do Amazon S3 que corresponda aos seus padrões de acesso a dados. Há dois padrões principais de acesso:
Dados que são acessados de forma conhecida ou previsível. Em geral, se você tem dados que são acessados com pouca frequência, o S3 Standard IA pode ser uma boa escolha, pois ajuda a reduzir os custos. Se você acessa dados com frequência, o S3 Standard é melhor para acessar com o Amazon EMR e o Trino.
Dados que são acessados de maneira desconhecida ou imprevisível. Isso pode exigir o uso de outras classes de armazenamento do Amazon S3. Há vantagens e desvantagens entre as classes de armazenamento do Amazon S3. Isso inclui latência, custo e disponibilidade de armazenamento. Você pode escolher um tipo de armazenamento do S3 apropriado, com base em suas workloads e padrões de acesso. Para obter descrições dos benefícios de cada classe, consulte Classes de armazenamento do Amazon S3.
Usar a compactação
Você também pode usar a compactação automática do Iceberg, se usar tabelas do Iceberg, o que resulta em tamanhos de arquivo mais otimizados, para aumentar a eficiência das consultas. Para obter mais informações, consulte O Catálogo de dados do AWS Glue agora oferece suporte para a compactação automática de tabelas do Apache Iceberg
Erros de lentidão de HTTP
Isso acontece quando a taxa de solicitação excede um limite pré-configurado em um prefixo do Amazon S3. O erro HTTP que ocorre com mais frequência quando esse estado é atingido é: Erro 503: reduza sua taxa de solicitações. A origem desse problema pode estar enraizada na presença de um grande número de arquivos pequenos, devido ao número de divisões que devem ser criadas para ler os dados. Há algumas maneiras de atenuar o problema:
Aumente o limite de novas tentativas para solicitações do Amazon S3 no Trino. Esse limite é definido para o EMRFS usando
fs.s3.maxretriesno Trino 449.Otimize os tamanhos dos arquivos, o que também pode resultar em uma menor taxa de solicitações.
Para obter mais informações sobre como o Trino determina o número de divisões em um conjunto de dados a serem consultados, consulte Propriedades de configuração de ajuste da performance
Dificuldade em consultar arquivos pequenos
Consultar muitos arquivos pequenos pode resultar em uma I/O sobrecarga pesada, devido ao alto número de solicitações GET e LIST, e, consequentemente, afetar negativamente o desempenho da consulta. A otimização do tamanho dos arquivos pode melhorar a performance das consultas. Existem algumas maneiras de fazer isso:
Consolide os dados em menos arquivos maiores. (Em geral, recomendamos manter tamanhos de arquivos em torno de 128 MB.) Isso pode ser feito com ferramentas ao ingerir dados, como em um pipeline de ETL, ou você consolidar dados manualmente. Se essas soluções não estiverem disponíveis para você, as opções restantes poderão ser mais adequadas.
Execute o comando
OPTIMIZE.Defina o parâmetro
SESSION.
Observe que o Iceberg tem um recurso disponível para mesclar arquivos pequenos em arquivos maiores, que é a compactação automática. Ele funciona com arquivos gerenciados com o AWS Glue Data Catalog. Para obter mais informações, consulte O Catálogo de dados do AWS Glue agora oferece suporte para a compactação automática de tabelas do Apache Iceberg
Consultas que incluem dados que não são necessários
É comum que os dados cresçam, o que torna imperativo rastrear seus padrões de acesso aos dados e movê-los adequadamente à medida que envelhecem ou se tornam irrelevantes. Isso ocorre porque, à medida que os dados aumentam, a performance da consulta pode diminuir com o tempo, principalmente devido ao grande volume de dados a serem verificados quando uma consulta é executada. O Amazon S3 e outros serviços oferecem orientação para a migração do ciclo de vida dos dados, que mostra estratégias para mover dados para diferentes locais de armazenamento à medida que esfriam. Também há um benefício de custo de armazenamento em fazer isso.
Além da migração de dados, você pode usar outras estratégias, como remover dados de origem que não são relevantes para as consultas que você está executando. Isso pode dar um certo trabalho, pois pode significar alterar seu esquema de dados de origem. Porém, seu resultado positivo é reduzir o volume de dados e resultar em consultas mais rápidas. Para mais informações, consulte Gerenciar o ciclo de vida dos objetos.