¿Cómo soluciono el error de consulta de Athena «HIVE_CANNOT_OPEN_SPLIT»?

5 minutos de lectura
0

Mi consulta de Amazon Athena falló y se produjo el error «HIVE_CANNOT_OPEN_SPLIT».

Descripción corta

Un bucket de Amazon Simple Storage Service (Amazon S3) solo puede gestionar 3500 solicitudes PUT/COPY/POST/DELETE o 5500 solicitudes GET/HEAD por segundo por prefijo en un bucket. Este límite estricto se combina entre todos los usuarios y servicios de una cuenta de AWS. 

De forma predeterminada, Amazon S3 se escala automáticamente para admitir tasas de solicitud altas. Cuando la tasa de solicitudes escala a una posición más alta, el bucket de S3 se particiona automáticamente para admitir tasas de solicitudes más altas. Sin embargo, si se supera el umbral de solicitud, recibirá el error «5xx Slow Down».

Por ejemplo, ejecuta una consulta de Athena en un prefijo que contiene 10 000 archivos. Athena usó las solicitudes GET/HEAD para intentar leer los 10 000 archivos al mismo tiempo. Sin embargo, dado que el prefijo solo admite hasta 5500 solicitudes GET/HEAD por segundo, las solicitudes de S3 se limitan y aparece el error «5xx Slow Down».

Resolución

Use uno o más de los siguientes métodos para que las solicitudes no se limiten.

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

Para ayudarle a distribuir los objetos y las solicitudes en varios prefijos, divida los datos. No almacene una gran cantidad de archivos en un solo prefijo S3. En su lugar, utilice varios prefijos para distribuir los objetos de S3 entre estos prefijos. Para obtener más información, consulte Particiones de datos en Athena.

Por ejemplo, no guarde todos los archivos en s3://my-athena-bucket/my-athena-data-files. En su lugar, divida los datos y almacénelos con los siguientes prefijos individuales:

s3://my-athena-bucket/jan

s3://my-athena-bucket/feb

s3://my-athena-bucket/mar

Puede particionar aún más los datos de estos archivos para aumentar la distribución de los objetos, por ejemplo, s3://my-athena-bucket/jan/01.

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

Es posible que aparezca el error «HIVE\ _CANNOT\ _OPEN\ _SPLIT» al consultar un bucket de S3 que tiene un gran número 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, para 1000 archivos de 100 KB cada uno, Athena debe realizar 1000 solicitudes GET para leer los mismos 100 MB de datos. Por tanto, las solicitudes superan 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 la Optimize file sizes en Top 10 performance tuning tips for Amazon Athena.

Ejemplo de comando:

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

Nota: En el comando anterior, sustituya my_athena_bucket_source por el bucket S3 de origen donde se encuentran los archivos pequeños. Sustituya también my_athena_bucket_target por el bucket de S3 de destino donde se almacenará la salida.

Para optimizar el rendimiento y el coste de las consultas, utilice la opción groupBy para agregar archivos pequeños en menos archivos grandes.

Nota: S3DistCp no admite la concatenación de archivos de Apache 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á activado para su bucket de S3

Cuando elimina objetos de un bucket de S3 que usa el control de versiones, Amazon S3 no elimina el objeto de forma permanente. En su lugar, Amazon S3 inserta un marcador de eliminación. Si muchos archivos de su bucket de S3 tienen marcadores de eliminación, es posible que reciba el error «HIVE_CANNOT_OPEN_SPLIT». Cuando ejecuta una consulta en un bucket que tiene activado el control de versiones, Athena debe comprobar las diferentes versiones de cada objeto. Luego, a medida que se procesa la consulta, Athena decide si incluir un objeto en particular.

Para resolver este problema, elimina los marcadores de eliminación de tu bucket de S3. Para eliminar los marcadores de eliminación, realice una de las siguientes acciones:

Compruebe si otras aplicaciones utilizan el mismo prefijo S3

Utilice la métrica 5xxErrors de Amazon CloudWatch y los registros de acceso al servidor S3 para comprobar si otras aplicaciones usaron el mismo prefijo S3 cuando ejecutó la consulta de Athena. Varias aplicaciones que intentaron leer los datos del mismo prefijo S3 pueden provocar una limitación de las solicitudes. 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.

Creación de una configuración de métricas de CloudWatch para todos los objetos del bucket 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. Active las métricas de solicitud de S3 para un prefijo para conocer la tasa general de llamadas a la API de un prefijo en un momento determinado. Utilice esta información junto con los registros de acceso al servidor S3 para buscar la aplicación que utilizó la llamada a la API para el prefijo.

Para particionar los datos en una sola partición, también puede agrupar los datos en cubos. Para obtener más información, consulte ¿Qué es la asignación de buckets?

Información relacionada

¿Cómo puedo solucionar un error HTTP 500 o 503 de Amazon S3?

Solución de problemas en Athena

Mejora del rendimiento en Athena

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año