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?
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:
- Exclua manualmente os marcadores de exclusão: Use a API ListObjectVersions para listar os metadados de todas as versões dos objetos no bucket do S3. Nos metadados retornados, localize o versionID do objeto e exclua o marcador de exclusão permanentemente.
- Defina uma configuração de ciclo de vida para excluir os marcadores de exclusão: Você pode usar as políticas de ciclo de vida do S3 para definir as ações que você deseja que o Amazon S3 realize durante a vida útil de um objeto.
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
Vídeos relacionados
Conteúdo relevante
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos