¿Cómo puedo resolver el error «HIVE_CANNOT_OPEN_SPLIT: Error opening Hive split s3://awsdoc-example-bucket/: Slow Down (Service: Amazon S3; Status Code: 503; Error Code: 503 Slow Down» en Athena?

6 minutos de lectura
0

Mi consulta de Amazon Athena falla y se produce uno de los siguientes errores: «HIVE_CANNOT_OPEN_SPLIT: Error opening Hive split s3://awsdoc-example-bucket/date=2020-05-29/ingest_date=2020-04-25/part-00000.snappy.parquet (offset=0, length=18614): Slow Down (Service: Amazon S3; Status Code: 503; Error Code: 503 Slow Down» o «Unknown Failure (status code = 1003, java.sql.SQLException: [Simba]AthenaJDBC An error has been thrown from the AWS Athena client.HIVE_CANNOT_OPEN_SPLIT: Error opening Hive split s3://awsdoc-example-bucket/date=2020-05-29/ingest_date=2020-04-25/part-00000.snappy.parquet (offset=0, length=18614): Slow Down (Service: Amazon S3; Status Code: 503; Error Code: 503 Slow Down».

Descripción corta

Un bucket de Amazon Simple Storage Service (Amazon S3) puede gestionar 3500 solicitudes PUT/COPY/POST/DELETE o 5500 solicitudes GET/HEAD por segundo por prefijo en un bucket. Estos errores se producen cuando se supera este umbral de solicitud. Este límite es una combinación de todos los usuarios y servicios de una cuenta.

De forma predeterminada, Amazon S3 escala automáticamente para admitir tasas de solicitudes muy altas. Cuando la tasa de solicitudes escala, el bucket de S3 se particiona automáticamente para admitir tasas de solicitudes más altas. Sin embargo, si se supera el umbral de solicitudes, recibirá errores 5xx en los que se le pedirá que reduzca el número de solicitudes o que lo intente más tarde.

Por ejemplo, el prefijo s3://my-athena-bucket/month=jan/ solo admite 3500 solicitudes PUT/COPY/POST/DELETE por segundo o 5500 solicitudes GET/HEAD por segundo. Si tiene 10 000 archivos dentro de este prefijo y ejecuta una consulta de Athena con este prefijo, aparecerá el error 503 Slow Down. Esto se debe a que Athena intenta leer los 10 000 archivos del prefijo al mismo tiempo mediante las solicitudes GET/HEAD, pero el prefijo solo admite hasta 5500 solicitudes GET/HEAD por segundo. Esto puede causar una limitación de las solicitudes de S3 y desencadenar el error «503 Slow Down».

Resolución

Utilice uno o más de los siguientes métodos para evitar la limitación de solicitudes:

Distribución de los objetos y las solicitudes de S3 entre varios prefijos

Particionar los datos puede ayudar a distribuir los objetos y las solicitudes entre varios prefijos. Evite almacenar muchos archivos con un único prefijo de S3. Considere la posibilidad de utilizar varios prefijos para poder distribuir los objetos de S3 entre estos prefijos. Al particionar los datos, puede reducir la cantidad de datos escaneados por cada consulta. Para obtener más información, consulte Particiones de datos.

Por ejemplo, en lugar de almacenar todos los archivos en s3://my-athena-bucket/my-athena-data-files, divida los datos y guárdelos con los siguientes prefijos individuales:

s3://my-athena-bucket/jan

s3://my-athena-bucket/feb

s3://my-athena-bucket/mar

Los datos de estos archivos se pueden particionar aún más para aumentar la distribución de los objetos (ejemplo: s3://my-athena-bucket/jan/01).

Para obtener más información sobre cómo decidir la estructura de carpetas de particiones de Athena, consulte Sugerencias y trucos para el rendimiento de Amazon S3.

Reducción del número de archivos en cada prefijo

Es posible que aparezca este error al consultar un bucket de S3 con una gran cantidad de objetos pequeños. Por ejemplo, si hay un archivo de 100 MB en un bucket de S3, Athena debe realizar 1 solicitud GET para leer el archivo. Sin embargo, si hay 1000 archivos de 100 KB cada uno, Athena debe realizar 1000 solicitudes GET para leer los mismos 100 MB de datos. Esto hace que las solicitudes superen los límites de solicitudes de S3.

Para reducir el número de solicitudes de Amazon S3, reduzca el número de archivos. Por ejemplo, utilice la herramienta S3DistCp para combinar una gran cantidad de archivos pequeños (menos de 128 MB) en una cantidad menor de archivos grandes. Para obtener más información, consulte Los 10 mejores consejos para mejorar el rendimiento de Amazon Athena y revise la sección 4. Optimización del tamaño de los archivos.

Ejemplo:

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

Asegúrese de reemplazar lo siguiente en el comando anterior:

  • my_athena_bucket_source por el bucket de S3 de origen donde se encuentran los archivos pequeños.
  • my_athena_bucket_target por el bucket de S3 de destino donde se almacenará la salida.

Puede utilizar la opción groupBy para agregar archivos pequeños en menos archivos grandes del tamaño que elija. Esto puede ayudarle a optimizar tanto el rendimiento como el coste de las consultas.

Nota: S3DistCp no admite la concatenación de archivos Parquet. Utilice PySpark. Para obtener más información, consulte ¿Cómo puedo concatenar archivos Parquet en Amazon EMR?

Comprobar si el control de versiones está habilitado para su bucket de S3

Al eliminar objetos de un bucket con versiones habilitadas, Amazon S3 inserta un marcador de eliminación en lugar de eliminar el objeto de forma permanente. Si tiene muchos archivos en su bucket de S3 con marcadores de eliminación, es posible que aparezca este error. Al ejecutar una consulta en un bucket con versiones habilitadas, Athena debe comprobar las diferentes versiones de cada objeto. A continuación, Athena decide si incluir un objeto concreto durante el procesamiento de la consulta.

Para resolver este error, considere la posibilidad de eliminar los marcadores de eliminación de su bucket de S3. Para eliminar los marcadores de eliminación, realice una de las siguientes acciones:

Comprobar si otras aplicaciones utilizan el mismo prefijo de S3

Utilice la métricas 5xxErrors de Amazon CloudWatch y los registro de acceso al servidor de S3 para comprobar si otras aplicaciones, como Hive on EMR, Spark o AWS Glue, utilizaban el mismo prefijo de S3 cuando ejecutó la consulta de Athena. Si varias aplicaciones intentan leer los datos del mismo prefijo de S3, las solicitudes se limitan y las consultas fallan con el error «Slow Down». Evite programar aplicaciones que accedan al mismo prefijo al mismo tiempo. Además, utilice diferentes prefijos de S3 para el origen de datos de Athena y el origen de datos de la aplicación.

Puede crear una configuración de métricas de CloudWatch para todos los objetos del bucket de S3. Use estas métricas para supervisar las métricas de frecuencia de llamadas a la API para un prefijo específico en un momento determinado. Habilitar las métricas de solicitud de S3 para un prefijo puede ayudar a comprender la tasa general de aciertos de la API para un prefijo en un momento determinado. Puede utilizar esta información junto con los registros de acceso al servidor de S3 para averiguar qué aplicación utilizaba la llamada a la API para el prefijo.


Información relacionada

¿Cómo puedo aumentar los límites de solicitudes de Amazon S3 para evitar que se limite el bucket de Amazon S3?

Solución de problemas en Athena

Mejora del rendimiento en Athena

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 años