Menú Cerrar

Using Bootstrap Actions in EMR – Amazon (AWS)

Dentro del conjunto de herramientas que ofrece AWS para Big Data, EMR es una de las más versátiles y poderosas, brindando al usuario un sinfín de opciones de hardware y software con el propósito de enfrentar cualquier desafío -y tener éxito- relacionado con el procesamiento de grandes volúmenes de datos.

Sin embargo, un usuario que trabaje con la consola EMR por primera vez encontrará que las opciones están empaquetadas en una lista generosa, pero limitada, de configuraciones de software y hardware, y puede llegar a la conclusión -¡equivocada!- de que EMR no tiene lo que se necesita para la tarea.

Incorporando Acciones de Bootstrap en EMR - Amazon (AWS)

Consola Web: Creando un Cluster de EMR

En este artículo nos centraremos en estudiar cómo incluir elementos de software adicionales y/o diferentes a los que se ofrecen en el paquete de la consola Web, y dejaremos la configuración del Hardware y otras opciones para otro momento.

Maestro contra esclavo

Uno de los primeros desafíos para comprender cómo incorporar realmente el software en EMR es tener claro la infraestructura de hardware y software que admite EMR. En términos muy simples, solo hay 2 categorías: Master y Slave (Master + Slaves = Cluster).

Map-Reduce es un modelo de programación que se beneficia de la capacidad de “divide para vencer”, estableciendo cargas de trabajo para los múltiples nodos del clúster, distribuyendo y organizando las tareas de cada nodo para que un gran trabajo se convierta en pequeños trabajos múltiples, generalmente más fáciles y rápidos de realizar. completo en comparación con tratar de asumir el trabajo como una unidad completa.

Incorporando Acciones de Bootstrap en EMR - Amazon (AWS)

Modelo programático EMR

En este modelo cada nodo recibe una carga de trabajo, para luego trabajar sobre ella, y finalmente entregar un resultado consolidado por el nodo maestro.

Incorporando Acciones de Bootstrap en EMR - Amazon (AWS)

Clúster EMR: Master Node y Slave Node trabajando juntos para resolver el trabajo de acuerdo con los algoritmos Map-Reduce.

Para que todo esto funcione, el software incorporado en los nodos esclavos debe “corresponder” al software del nodo maestro, y así poder “hablar” correctamente durante la ejecución del trabajo del clúster.

Cuando nos conectamos al clúster, normalmente lo que hacemos es conectarnos al nodo líder, ya través de este llevamos a cabo la ejecución de la obra. Es en este mismo nodo líder donde podemos tomar control remoto vía SSH, y realizar actividades a nivel de sistema operativo, como, por ejemplo, instalar nuevo software, o alterar la configuración del software ya instalado.

Sin embargo, es fundamental tener en cuenta que el nodo líder no replica ni distribuye estas modificaciones al resto de nodos del clúster, por lo que si instalamos una nueva biblioteca, como Boto3, solo estará disponible en el nodo Líder, dejando a los nodos esclavos incapaces de abordar las tareas que requieren esta biblioteca, y luego cualquier trabajo que la requiera no se ejecutará.

La lección que debemos aprender es muy simple: el software debe instalarse y configurarse ANTES de que exista el clúster. De lo contrario, los cambios de configuración y el software instalado solo estarán disponibles en el nodo maestro.

¿Cómo? Muy simple: con acciones de arranque.

arranque

Bueno, puede que no sea tan simple al principio, especialmente si no está acostumbrado a ejecutar scripts Bash en Linux. Sin embargo, ese es, en términos generales, el único desafío para comenzar a trabajar con EMR y Bootstrap Actions.

Las acciones Bootstrap son esencialmente scripts Bash para Linux, que automatizan la ejecución de los pasos de instalación o la manipulación de la configuración del software instalado y del sistema operativo en general.

Una supersimplificación del punto anterior es: cada paso que realizaría un humano con el mando de una consola de SSH en Linux, se lo puede llevar a una línea de un script de Bash, que se puede ejecutar de forma automática. , sin supervisión humana.

Por ejemplo, para instalar Boto3:

sudo pip install -U\
awscli\
boto

Luego, se convierte en un script Bash. Llamaremos a este archivo install_boto3.sh:

#!/bin/bash
sudo pip install -U \
awscli \
boto

Y finalmente lo guardamos en S3:

s3://mi_bucket/scripts/install_boto3.sh

Sencillo, ¿no?

Ahora solo necesita hacer referencia a este script en una acción de Bootstrap desde la configuración durante la creación del clúster. Básicamente hay 2 opciones para hacer esto (hay más opciones para lanzar un clúster, pero estas son las más utilizadas):

1. Uso de la consola web

Siguiendo las opciones avanzadas, en el paso 3 de la configuración durante la creación del clúster, abra la sección “Acciones de Bootstrap”

Incorporando Acciones de Bootstrap en EMR - Amazon (AWS)

Aparecerán las opciones para referenciar el script ya guardado en S3:

Incorporando Acciones de Bootstrap en EMR - Amazon (AWS)

Y finalmente solo queda lanzar la creación del clúster, siguiendo los pasos restantes de la configuración.

2. Uso de la CLI de AWS

Esta opción es la más fácil de controlar y ejecutar. Requiere tener instalado y configurado correctamente AWS CLI con nuestra cuenta de AWS. Simplemente ejecute en nuestra CLI la siguiente línea de comandos:

aws emr create-cluster
–applications Name=Hadoop Name=Hive Name=Pig Name=Hue Name=Spark Name=Zeppelin
–ec2-attributes ‘{“KeyName”:”mi_cluster”,”InstanceProfile”:”EMR_EC2_Profile”,” SubnetId”:”subnet-XXXXXXXXX”,”EmrManagedSlaveSecurityGroup”:”sg-XXXXXXXXX”,”EmrManagedMasterSecurityGroup”:”sg-XXXXXXXXX”}’
–release-label emr-5.12.0
–log-uri ‘s3n:// aws-logs-XXXXXXXXXXXXXXX-us-east-1/elasticmapreduce/’
–steps ‘[{“Args”:[“spark-submit”,”–deploy-mode”,”cluster”,”–driver-cores “,”1″,”–maximizeResourceAllocation”,”s3://mi_bucket/scripts/mi_script_python.py”],”Tipo”:”CUSTOM_JAR”,
“ActionOnFailure”:”CANCEL_AND_WAIT”,”Jar”:”command-runner.jar”,”Properties”:””,”Name”:”Mi Programa Spark”}]’ –instance-groups ‘[{“InstanceCount” :4,”EbsConfiguration”:{“EbsBlockDeviceConfigs”:[{“VolumeSpecification”:{“SizeInGB”:32,”VolumeType”:”gp2″},”VolumesPerInstance”:1}]},”InstanceGroupType”:”CORE” ,”InstanceType”:
“r4.xlarge”,”Name”:”Core – 2″},{“InstanceCount”:1,”EbsConfiguration”:{“EbsBlockDeviceConfigs”:[{“VolumeSpecification”:{“SizeInGB”:32 ,”VolumeType”:”gp2″},”VolumesPerInstance”:1}]},”InstanceGroupType”:”MASTER”,”InstanceType”:
“r4.xlarge”,”Name”:”Master – 1″}]’
–bootstrap-actions ‘[{“Path”:”s3://mi_bucket/scripts/install-boto3. sh”,”Name”:”Instalar Boto3″}]’
–ebs-root-volume-size 50
–service-role EMR_Role
–enable-debugging
–name ‘mi_aplicacion’
–scale-down-behavior TERMINATE_AT_TASK_COMPLETION
–region us-east-1

Vale la pena señalar que este comando es una sola línea de texto , que se ha dividido aquí para facilitar la lectura.

Hay parámetros que son opcionales (es decir  , –enable-debugging ) y otros que dependen de los recursos de infraestructura de su propia cuenta de AWS (es decir, ID de grupos de seguridad, nombres de perfiles de instancia como ” EMR_EC2_Profile ” y roles de servicio, como –service- rol EMR_Role , entre otros).

Puede parecer un poco difícil de manejar al principio, pero en la práctica es la opción más fácil y rápida para lanzar un clúster, y con el tiempo es fácil acostumbrarse.

3. Recursos públicos

Como no siempre somos los primeros en enfrentar un problema, la mayoría de las veces es posible encontrar a alguien que haya resuelto el problema antes que nosotros. Y una buena parte de esas veces, que alguien ha sido tan amable de poner la solución a disposición para ser reutilizada. Es así como encontramos scripts de arranque para AWS EMR que se pueden usar directamente, para lograr ciertos objetivos, como instalar Jupyter Notebook en nuestro clúster EMR .

El script se actualiza constantemente y se puede encontrar en la ruta S3:

s3://aws-bigdata-blog/artifacts/aws-blog-emr-jupyter/install-jupyter-emr5.sh

Espero que encuentre útil esta información y le facilite el acceso a esta genial tecnología de AWS.

¡Saludos!
marcelo 

Publicado en Sin categoría

Artículos relacionados