Quiero resolver el error «Código de error: 503 Ralentización» que provoca que mi trabajo S3DistCp falle en Amazon EMR.
Resolución
Cuando los datos utilizan particiones tipo Apache Hive y superan la tasa de solicitudes de Amazon Simple Storage Service (Amazon S3), se muestra el siguiente error:
«mapreduce.Job: ID de tarea: attempt_######_0012_r_000203_0, estado: ERROR Error: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Ralentización (Servicio: Amazon S3; Status Code: 503; Error Code: 503 Ralentización; ID de solicitud: D27E827C847A8304; ID de solicitud extendida de S3: XWxtDsEZ40GLEoRnSIV6+HYNP2nZiG4MQddtNDR6GMRzlBmOZQ/LXlO5zojLQiy3r9aimZEvXzo=), ID de solicitud extendida de S3: XWxtDsEZ40GLEoRnSIV6+HYNP2nZiG4MQddtNDR6GMRzlBmOZQ/LXlO5zojLQiy3r9aimZEvXzo= en com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1712)»
Por ejemplo, las siguientes rutas de Amazon S3 utilizan el mismo prefijo, /year=2019/:
- s3://awsexamplebucket/year=2019/month=11/day=01/mydata.parquet
- s3://awsexamplebucket/year=2019/month=11/day=02/mydata.parquet
- s3://awsexamplebucket/year=2019/month=11/day=03/mydata.parquet
La cuota de solicitudes es de 3500 solicitudes de escritura o 5500 solicitudes de lectura por segundo. Todas las operaciones incluidas en un prefijo se tienen en cuenta para las cuotas.
Si no puede aumentar la cantidad de particiones, utilice una de las siguientes opciones para resolver los errores de limitación en los trabajos de S3DistCp.
Disminución de la cantidad de tareas reducidas
El parámetro mapreduce.job.reduces establece el número de reducciones del trabajo. Amazon EMR configura automáticamente mapreduce.job.reduces en función del número de nodos del clúster y de los recursos de memoria del clúster.
Ejecute el siguiente comando para comprobar el número predeterminado de tareas de reducción por trabajos de su clúster:
hdfs getconf -confKey mapreduce.job.reduces
Para establecer un nuevo valor para mapreduce.job.reduces, ejecute el siguiente comando:
s3-dist-cp -Dmapreduce.job.reduces=10 --src s3://awsexamplebucket/data/ --dest s3://awsexamplebucket2/output/
Nota: Sustituya 10 por el número que desea establecer para reducir las tareas. Además, sustituya los valores del ejemplo por sus valores.
Aumento del límite de reintentos del EMRFS
De forma predeterminada, el límite de reintentos del EMRFS está establecido en 4.
Ejecute el siguiente comando para comprobar la cuota de reintentos del clúster:
hdfs getconf -confKey fs.s3.maxRetries
Para aumentar la cuota de reintentos de un trabajo de s3-dist-cp, ejecute el siguiente comando:
s3-dist-cp -Dfs.s3.maxRetries=20 --src s3://awsexamplebucket/data/ --dest s3://awsexamplebucket2/output/
Nota: Sustituya 20 por la cuota que desea establecer para los reintentos. Además, sustituya los valores del ejemplo por sus valores.
Para aumentar la cuota de reintentos en un clúster nuevo, agregue un objeto de configuración al iniciar un clúster. Para aumentar la cuota de reintentos en un clúster en ejecución, use el objeto de configuración para anular la configuración del clúster para el grupo de instancias.
Ejemplo de objeto de configuración para las versiones 5.21.0 y posteriores de Amazon EMR:
[
{
"Classification": "emrfs-site",
"Properties": {
"fs.s3.maxRetries": "20"
}
}
]
Al aumentar la cuota de reintentos del clúster, las aplicaciones de Apache Spark y Hive también pueden usar la nueva cuota. El siguiente ejemplo de sesión de shell de Spark usa la cuota de reintentos más alta:
spark> sc.hadoopConfiguration.set("fs.s3.maxRetries", "20")
spark> val source_df = spark.read.csv("s3://awsexamplebucket/data/")
spark> source_df.write.save("s3://awsexamplebucket2/output/")
Información relacionada
Prácticas recomendadas para patrones de diseño: optimizar el rendimiento de Amazon S3
¿Por qué mi trabajo de Spark o Hive en Amazon EMR falla con una AmazonS3Exception HTTP 503 de «Ralentización»?