Ejecución serverless de trabajos Spark con Amazon EMR Serverless - Procesamiento de big data sin gestión de clústeres

Explicamos la ejecución de trabajos Spark/Hive con EMR Serverless, el diseño de ejecuciones de trabajos y la optimización de costos.

Descripción general de EMR Serverless

EMR Serverless es un servicio de procesamiento de big data que ejecuta trabajos Spark y Hive de forma serverless, con auto-escalado hasta 400 vCPU de recursos worker. A diferencia de EMR on EC2 que requiere configurar tipos de instancia, cantidad de nodos y Auto Scaling, EMR Serverless aprovisiona recursos automáticamente al enviar un trabajo. No se requiere parcheo de clústeres ni actualizaciones de versión, permitiendo concentrar el esfuerzo operativo en el desarrollo de trabajos.

Auto-escalado y modelo de pago por uso

El valor central de EMR Serverless es que los recursos existen solo durante la ejecución del trabajo y se reducen a cero al completarse. Al enviar un trabajo, se especifican límites de vCPU y memoria para drivers y executors, pero durante la ejecución el número de executors aumenta y disminuye con granularidad por segundo según el volumen de datos. La facturación se calcula a partir de los vCPU-segundos y memoria GB-segundos realmente consumidos, y el costo cae a cero cuando el trabajo finaliza. Este mecanismo elimina el desperdicio de mantener clústeres ejecutándose para trabajos ETL batch que se ejecutan solo una vez al día, logrando ahorros significativos en costos para cargas de trabajo de baja utilización comparado con mantener clústeres permanentes con EMR on EC2.

Diseño de aplicaciones e integración con Hive

Las aplicaciones EMR Serverless se crean seleccionando un runtime de Spark o Hive. Las aplicaciones Spark colocan scripts PySpark en S3 y los ejecutan mediante job runs. Las aplicaciones Hive escriben procesamiento ETL en scripts HiveQL usando Glue Data Catalog como metastore. Configurar workers pre-inicializados evita arranques en frío al inicio del trabajo, permitiendo que los trabajos comiencen en segundos. Se pueden especificar individualmente vCPU y memoria para drivers y executors del job run, permitiendo asignación de recursos adaptada a las características del trabajo. Almacenar datos en S3 en formato Parquet con particionamiento optimiza el rendimiento de consultas. Para casos de uso de Spark e insights prácticos, libros relacionados (Amazon) son una referencia útil.

Elección entre EMR on EC2 y Glue

Opciones similares a EMR Serverless incluyen EMR on EC2 y Glue, y la elección depende de las características de la carga de trabajo. EMR on EC2 es ventajoso cuando se necesitan funciones no soportadas por Serverless (instancias GPU, AMIs personalizadas, clústeres Presto/Trino) o cuando la utilización del clúster es alta para aprovechar descuentos de Reserved Instances. Glue ETL permite construir pipelines ETL con un editor visual y destaca en la integración con Data Catalog y job bookmarks (capacidad de reanudación), pero ofrece acceso limitado a parámetros de ajuste de Spark, haciendo EMR Serverless más flexible para cargas de trabajo analíticas Spark SQL a gran escala. Como guía: use EMR Serverless cuando los trabajos se completan con funciones estándar de Spark/Hive y la utilización del clúster es baja; use EMR on EC2 cuando se necesitan frameworks distintos a Spark (Flink, HBase); elija Glue cuando el ETL visual sin código sea la prioridad.

Mejores prácticas de diseño y trampas

Tres puntos clave de diseño aseguran una operación estable con EMR Serverless. Primero, siempre establezca límites máximos de recursos en los job runs para prevenir desbordamiento de costos por escalado ilimitado. Un trabajo sin límites que genera executors masivos debido a data skew puede resultar en cargos inesperados. Segundo, habilite workers pre-inicializados solo cuando la frecuencia de trabajos es alta (múltiples veces por hora). Como incurren en cargos mientras están inactivos, habilitarlos para trabajos batch diarios resulta en 23 horas de costos de inactividad que anulan los beneficios de Serverless. Tercero, planifique una estrategia de compactación cuando use tablas Iceberg. Los archivos pequeños acumulados causan que la cantidad de tareas Spark explote, prolongando los tiempos de inicio de trabajos. Incorporar comandos OPTIMIZE periódicos en los pipelines de trabajos mantiene el rendimiento de consultas.

Precios de EMR Serverless

EMR Serverless cobra por vCPU-hora (aproximadamente 0.052 dólares) y GB-hora de memoria (aproximadamente 0.0057 dólares) consumidos durante la ejecución del trabajo. No hay cargos cuando los trabajos no se ejecutan, mejorando significativamente la eficiencia de costos sobre EMR on EC2 para procesamiento batch esporádico. Los workers pre-inicializados incurren en cargos incluso inactivos, así que habilítelos o deshabilítelos según la frecuencia de trabajos. Establezca límites de recursos en job runs para controlar costos de trabajos descontrolados y use timeouts para terminación automática. El punto de equilibrio con EMR on EC2 tiende a favorecer Serverless cuando la utilización del clúster cae por debajo del 30% aproximadamente.

Resumen

EMR Serverless es un servicio que ejecuta trabajos Spark y Hive sin gestión de clústeres. El precio de pago por uso elimina costos de inactividad, y los workers pre-inicializados evitan arranques en frío. Usando Glue Data Catalog como metastore, permite procesamiento ETL eficiente sobre datos Parquet en S3. Es más rentable que EMR on EC2 en entornos donde la utilización del clúster cae por debajo del 30%, y la gestión adecuada de límites de recursos y workers pre-inicializados es clave para la optimización de costos.