Como faço para resolver o “HIVE_CANNOT_OPEN_SPLIT: Erro ao abrir o Hive split s3://awsdoc-example-bucket/: Diminuir velocidade (Serviço: Amazon S3; Código de status: 503; Código de erro: 503 Diminuir velocidade;” erro no Athena?

6 minuto de leitura
0

Minha consulta do Amazon Athena falha com um dos seguintes erros: "HIVE_CANNOT_OPEN_SPLIT: Erro ao abrir o Hive split s3://awsdoc-example-bucket/date=2020-05-29/ingest_date=2020-04-25/part-00000.snappy.parquet (offset=0, length=18614): Diminuir velocidade (Serviço: Amazon S3; Código de status: 503; Código de erro: 503 Diminuir velocidade;” -ou- “Falha desconhecida (código de status = 1003, java.sql.SQLException: [Simba]AthenaJDBC Um erro foi gerado pelo AWS Athena client.HIVE_CANNOT_OPEN_SPLIT: Erro ao abrir o Hive split s3://awsdoc-example-bucket/date=2020-05-29/ingest_date=2020-04-25/part-00000.snappy.parquet (offset=0, length=18614): Diminuir velocidade (Serviço: Amazon S3; Código de status: 503; Código de erro: 503 Diminuir velocidade;”

Descrição resumida

Um bucket do Amazon Simple Storage Service (Amazon S3) pode lidar com 3.500 solicitações PUT/COPY/POST/DELETE ou 5.500 solicitações GET/HEAD por segundo por prefixo em um bucket. Esses erros ocorrem quando esse limite de solicitação é excedido. Esse limite é combinado entre todos os usuários e serviços de uma conta.

Por padrão, o Amazon S3 é escalado automaticamente para oferecer suporte a taxas de solicitação muito altas. Quando a taxa de solicitação é escalada, seu bucket do S3 é automaticamente particionado para oferecer suporte a taxas de solicitação mais altas. No entanto, se o limite de solicitação for excedido, você receberá erros de 5xx solicitando que diminua a velocidade ou tente mais tarde.

Por exemplo, o prefixo s3://my-athena-bucket/month=jan/ pode oferecer suporte a somente 3.500 solicitações PUT/COPY/POST/DELETE por segundo ou 5.500 solicitações GET/HEAD por segundo. Se você tiver 10.000 arquivos dentro desse prefixo e executar uma consulta do Athena com esse prefixo, receberá o erro 503 Slow Down. Isso ocorre porque o Athena tenta ler todos os 10.000 arquivos no prefixo ao mesmo tempo usando as solicitações GET/HEAD, mas o prefixo somente pode oferecer suporte a até 5.500 solicitações GET/HEAD por segundo. Isso pode fazer com que suas solicitações do S3 sejam limitadas e resultem no erro 503 Slow Down.

Resolução

Use um ou mais dos seguintes métodos para evitar o controle de utilização de solicitações:

Distribua objetos e solicitações do S3 entre vários prefixos

O particionamento dos dados pode ajudar a distribuir os objetos e as solicitações entre vários prefixos. Evite armazenar muitos arquivos em um único prefixo S3. Considere o uso de vários prefixos para poder distribuir os objetos do S3 entre esses prefixos. Ao particionar seus dados, você pode reduzir a quantidade de dados digitalizados para cada consulta. Para obter mais informações, consulte Particionamento de dados.

Por exemplo, em vez de armazenar todos os arquivos em s3://my-athena-bucket/my-athena-data-files, particione os dados e armazene-os nos seguintes prefixos individuais:

s3://my-athena-bucket/jan

s3://my-athena-bucket/feb

s3://my-athena-bucket/mar

Os dados nesses arquivos podem ser particionados posteriormente para aumentar a distribuição dos objetos (exemplo: s3://my-athena-bucket/jan/01).

Para obter mais informações sobre como decidir sua estrutura de pastas de partições do Athena, consulte Dicas e truques de performance do Amazon S3.

Reduza o número de arquivos em cada prefixo

Você pode receber esse erro ao consultar um bucket do S3 com um grande número de objetos pequenos. Por exemplo, se houver um arquivo de 100 MB em um bucket do S3, o Athena deverá fazer 1 solicitação GET para ler o arquivo. No entanto, se houver 1.000 arquivos com 100 KB cada, o Athena deverá fazer 1.000 solicitações GET para ler os mesmos 100 MB de dados. Isso faz com que as solicitações excedam os limites do S3.

Para reduzir o número de solicitações do Amazon S3, reduza o número de arquivos. Por exemplo, use a ferramenta S3DistCp para mesclar um grande número de arquivos pequenos (menos de 128 MB) em um número menor de arquivos grandes. Para obter mais informações, consulte as 10 principais dicas de ajuste de performance do Amazon Athena e confira a seção 4. Otimizar tamanhos de arquivo.

Exemplo:

s3-dist-cp --src=s3://my_athena_bucket_source/smallfiles/ --dest=s3://my_athena_bucket_target/largefiles/ --groupBy='.*(.csv)'

Substitua o seguinte no comando acima:

  • my_athena_bucket_source com o bucket do S3 de origem onde estão os arquivos pequenos.
  • my_athena_bucket_target com o bucket do S3 de destino onde a saída será armazenada.

Você pode usar a opção groupBy para agregar arquivos pequenos em uma quantidade menor de arquivos grandes do tamanho que você escolher. Isso pode ajudar você a otimizar a performance e o custo da consulta.

Observação: o S3DistCp não oferece suporte a concatenação de arquivos Parquet. Em vez disso, use o PySpark. Para obter mais informações, consulte Como posso concatenar arquivos Parquet no Amazon EMR?

Verifique se o versionamento está habilitado para seu bucket do S3

Quando você exclui objetos de um bucket habilitado para versão, o Amazon S3 insere um marcador de exclusão em vez de remover o objeto permanentemente. Se você tiver muitos arquivos em seu bucket do S3 com marcadores de exclusão, poderá receber esse erro. Quando você executa uma consulta em um bucket habilitado para versão, o Athena deve verificar as diferentes versões de cada objeto. Em seguida, o Athena decide se deseja incluir um objeto específico durante o processamento da consulta.

Para resolver esse erro, considere remover os marcadores de exclusão do seu bucket do S3. Você pode remover os marcadores de exclusão fazendo o seguinte:

Verifique se outras aplicações estão usando o mesmo prefixo do S3

Use a métrica do Amazon CloudWatch 5xxErrors e os logs de acesso ao servidor do S3 para verificar se outras aplicações, como o Hive no EMR, Spark ou AWS Glue, estavam usando o mesmo prefixo do S3 quando você executou a consulta do Athena. Várias aplicações tentando ler os dados do mesmo prefixo do S3 podem fazer com que as solicitações sejam limitadas e as consultas falhem com o erro Diminuir velocidade. Evite programar aplicações que acessem o mesmo prefixo ao mesmo tempo. Além disso, use prefixos diferentes do S3 para a fonte de dados do Athena e da aplicação.

Você pode criar uma configuração de métricas do CloudWatch para todos os objetos no bucket do S3. Use essas métricas para monitorar as métricas de taxa de chamadas da API para um prefixo específico em um determinado momento. Ativar métricas de solicitação do S3 para um prefixo pode ajudar a entender a taxa geral de acertos da API para um prefixo em um determinado momento. Você pode usar essas informações junto com os logs de acesso do servidor do S3 para descobrir qual aplicação estava usando a chamada de API para o prefixo.


Informações relacionadas

Como posso aumentar os limites de solicitação do Amazon S3 para evitar o controle de utilização do meu bucket do Amazon S3?

Solução de problemas no Athena

Ajuste de performance no Athena

AWS OFICIAL
AWS OFICIALAtualizada há 3 anos