EMR = Elastic Map Reduce.
Cuando hablemos de EMR, pensemos en un clúster en el cual podemos correr cargas de trabajo muy grandes; es obvio que al ser un clúster tendremos unas instancias dedicadas, mayor administración sobre nuestro clúster y mayor flexibilidad.
EMR es un servicio que nos permite crear clústers que por detrás serán instancias EC2 basadas en Hadoop; en estos clústers podremos ejecutar diferentes cargas de trabajo. Estas cargas de trabajo pueden ser MapReduce, Spark, Pig, Presto, Hive, Impala, Flink, TensorFlow, Zeppelin, diferentes y muchas alternativas de Open Source pueden correr en estos proyectos, y cuando configuremos el clúster podremos seleccionar cuáles de ellos necesitamos.
Este servicio nos provee integraciones con diferentes servicios de AWS como S3, RedShift, DynamoDB y Kinesis.
En el clúster desplegado por este servicio, podemos correr cualquier tipo de tareas basadas en Spark; es decir, podrÃamos correr los ETLs que hacemos en Glue, pero cambiarÃan algunas cosas en la configuración debido a que Glue utiliza dynamic frames (son más propios de AWS para manejar Glue) mientras que EMR usa otro concepto que es data frames que es más propio de Spark. Habiendo dicho esto, podrÃamos también hacer aquà transformaciones, y podrÃamos conectarnos a Notebooks para consultar nuestra información desde EMR.
Conceptos
- Bootstrap actions: Al momento de desplegar el clúster, podemos especificar ciertas acciones que necesitemos que se ejecuten al inicio; acciones como ejecuciones de scripts particulares, cambiar los puertos de conexión, o agregarle configuraciones muy personalizadas al clúster. Estas tareas se ejecutan antes de que el clúster esté completamente productivo.
- Steps: Nos permiten ejecutar nuestras cargas de trabajo en los clústers de EMR de forma ordenada.
- Clúster: Está compuesto de un Master Node, quien orquestará a los otros Nodes; Core Nodes que se encargan de distribuir la información cuando usamos un sistema de archivos como HDFS (Sistema de archivos distribuido), y Task Nodes que son los encargados del procesamiento.
<imagen>
Recomendaciones
- A nivel de instancias, utilizar instancias tipo Spot para los Core Nodes y los Task Nodes.
- El Master Node no debe ser desplegado en una instancia Spot.
Es asà como EMR es un servicio muy importante donde podemos correr cargas de trabajo gigantescas, porque tenemos la libertad de crear las instancias, elegir el tipo y la cantidad.
En situaciones como que en Glue hay un lÃmite de 100 DPUs, pero nuestro job es muy grande, AWS recomienda dividir nuestro job en jobs más pequeños para no consumir tantas DPUs o trabajar con EMR en donde tenemos más capacidad pero nuestra carga de información y nuestra carga administrativa aumentará.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?