Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Lance un trabajo de Spark en un EMR clúster transitorio mediante una función Lambda
Creado por Dhrubajyoti Mukherjee () AWS
Entorno: producción | Tecnologías: análisis | Carga de trabajo: código abierto |
AWSservicios: AmazonEMR; AWS Identity and Access Management; AWS Lambda; Amazon VPC |
Resumen
Este patrón usa la EMR RunJobFlow API acción de Amazon para lanzar un clúster transitorio para ejecutar un trabajo de Spark desde una función Lambda. Un EMR clúster transitorio está diseñado para finalizar tan pronto como se complete el trabajo o si se produce algún error. Un clúster transitorio permite ahorrar costos porque solo se ejecuta durante el tiempo de cálculo y proporciona escalabilidad y flexibilidad en un entorno de nube.
El EMR clúster transitorio se lanza mediante el lenguaje de programación Boto3 API y Python en una función Lambda. La función de Lambda, escrita en Python, proporciona la flexibilidad adicional de iniciar el clúster cuando es necesario.
Para demostrar un ejemplo de cálculo y salida por lotes, este patrón lanzará un trabajo de Spark en un EMR clúster desde una función Lambda y ejecutará un cálculo por lotes con los datos de ventas de ejemplo de una empresa ficticia. El resultado del trabajo de Spark será un archivo de valores (CSV) separados por comas en Amazon Simple Storage Service (Amazon S3). El archivo de datos de entrada, el archivo.jar de Spark, un fragmento de código y una AWS CloudFormation plantilla para una nube privada virtual (VPC) y las funciones de AWS Identity and Access Management (IAM) para ejecutar el cálculo se proporcionan como archivos adjuntos.
Requisitos previos y limitaciones
Requisitos previos
Una cuenta activa AWS
Limitaciones
Solo se puede iniciar un trabajo de Spark a partir del código a la vez.
Versiones de producto
Probado en Amazon EMR 6.0.0
Arquitectura
Pila de tecnología de destino
Amazon EMR
AWSLambda
Amazon S3
Apache Spark
Arquitectura de destino
Automatizar y escalar
Para automatizar el cálculo EMR por lotes de Spark, puede utilizar cualquiera de las siguientes opciones.
Implemente una EventBridge regla de Amazon que pueda iniciar la función Lambda en una programación cron. Para obtener más información, consulte el tutorial: AWS Programar funciones Lambda utilizando. EventBridge
Configure las notificaciones de eventos de Amazon S3 para iniciar la función de Lambda al llegar el archivo.
Pase los parámetros de entrada a la función AWS Lambda a través del cuerpo del evento y de las variables de entorno Lambda.
Herramientas
AWSservicios
Amazon EMR es una plataforma de clústeres gestionada que simplifica la ejecución de marcos de big data AWS para procesar y analizar grandes cantidades de datos.
AWSLambda es un servicio informático que le ayuda a ejecutar código sin necesidad de aprovisionar o administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos basado en la nube que le ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
Otras herramientas
Apache Spark
es un motor de análisis en varios idiomas para el procesamiento de datos a gran escala.
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Cree los IAM roles y losVPC. | Si ya tiene las EMR IAM funciones AWS Lambda y Amazon y aVPC, puede omitir este paso. Para ejecutar el código, tanto el EMR clúster como la función Lambda requieren IAM funciones. El EMR clúster también requiere una VPC subred pública o una subred privada con una puerta de enlace. NAT Para crear automáticamente todos los IAM roles y unVPC, implemente la AWS CloudFormation plantilla adjunta tal cual, o bien, puede crear los roles y crearlos VPC manualmente, tal y como se especifica en la sección de información adicional. | Arquitecto de la nube |
Anote las claves AWS CloudFormation de salida de la plantilla. | Una vez que la CloudFormation plantilla se haya desplegado correctamente, vaya a la pestaña Salidas de la AWS CloudFormation consola. Tenga en cuenta las cinco claves de salida:
Utilizará los valores de estas claves cuando cree la función de Lambda. | Arquitecto de la nube |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Subir el archivo.jar de Spark. | Sube el archivo.jar de Spark al bucket de S3 que creó la AWS CloudFormation pila. El nombre del bucket es el mismo que el de la clave de salida | ¿General AWS |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Creación de una función de Lambda. | En la consola Lambda, cree una función de Lambda de Python 3.9+ con un rol de ejecución. La política de funciones de ejecución debe permitir a Lambda lanzar un EMR clúster. (Consulte la AWS CloudFormation plantilla adjunta). | Ingeniero de datos, ingeniero de nube |
Copie y pegue el código. | Sustituya el código del archivo | Ingeniero de datos, ingeniero de nube |
Cambie los parámetros del código. | Siga los comentarios del código para cambiar los valores de los parámetros para que coincidan con su AWS cuenta. | Ingeniero de datos, ingeniero de nube |
Inicie la función para iniciar el clúster. | Inicie la función para iniciar la creación de un EMR clúster transitorio con el archivo.jar de Spark proporcionado. Ejecutará el trabajo de Spark y finalizará automáticamente cuando se complete el trabajo. | Ingeniero de datos, ingeniero de nube |
Comprueba el estado del EMR clúster. | Una vez iniciado el EMR clúster, aparece en la EMR consola de Amazon, en la pestaña Clústeres. Se puede comprobar en consecuencia cualquier error que se produzca al lanzar el clúster o al ejecutar el trabajo. | Ingeniero de datos, ingeniero de nube |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Subir el archivo.jar de Spark. | Descargar el archivo.jar de Spark de la sección de Adjuntos y cárgalo en el bucket de S3. | Ingeniero de datos, ingeniero de nube |
Cargue el conjunto de datos de entrada. | Cargue el archivo | Ingeniero de datos, ingeniero de nube |
Pegue el código de Lambda y cambie los parámetros. | Copie el código de la sección Herramientas y péguelo en una función de Lambda, sustituyendo el archivo de código | Ingeniero de datos, ingeniero de nube |
Iniciar la función y verificar la salida. | Una vez que la función de Lambda inicia el clúster con el trabajo de Spark proporcionado, genera un archivo.csv en el bucket de S3. | Ingeniero de datos, ingeniero de nube |
Recursos relacionados
Información adicional
Código
""" Copy paste the following code in your Lambda function. Make sure to change the following key parameters for the API as per your account -Name (Name of Spark cluster) -LogUri (S3 bucket to store EMR logs) -Ec2SubnetId (The subnet to launch the cluster into) -JobFlowRole (Service role for EC2) -ServiceRole (Service role for Amazon EMR) The following parameters are additional parameters for the Spark job itself. Change the bucket name and prefix for the Spark job (located at the bottom). -s3://your-bucket-name/prefix/lambda-emr/SparkProfitCalc.jar (Spark jar file) -s3://your-bucket-name/prefix/fake_sales_data.csv (Input data file in S3) -s3://your-bucket-name/prefix/outputs/report_1/ (Output location in S3) """ import boto3 client = boto3.client('emr') def lambda_handler(event, context): response = client.run_job_flow( Name='spark_job_cluster', LogUri='s3://your-bucket-name/prefix/logs', ReleaseLabel='emr-6.0.0', Instances={ 'MasterInstanceType': 'm5.xlarge', 'SlaveInstanceType': 'm5.large', 'InstanceCount': 1, 'KeepJobFlowAliveWhenNoSteps': False, 'TerminationProtected': False, 'Ec2SubnetId': 'subnet-XXXXXXXXXXXXXX' }, Applications=[{'Name': 'Spark'}], Configurations=[ {'Classification': 'spark-hive-site', 'Properties': { 'hive.metastore.client.factory.class': 'com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory'} } ], VisibleToAllUsers=True, JobFlowRole='EMRLambda-EMREC2InstanceProfile-XXXXXXXXX', ServiceRole='EMRLambda-EMRRole-XXXXXXXXX', Steps=[ { 'Name': 'flow-log-analysis', 'ActionOnFailure': 'TERMINATE_CLUSTER', 'HadoopJarStep': { 'Jar': 'command-runner.jar', 'Args': [ 'spark-submit', '--deploy-mode', 'cluster', '--executor-memory', '6G', '--num-executors', '1', '--executor-cores', '2', '--class', 'com.aws.emr.ProfitCalc', 's3://your-bucket-name/prefix/lambda-emr/SparkProfitCalc.jar', 's3://your-bucket-name/prefix/fake_sales_data.csv', 's3://your-bucket-name/prefix/outputs/report_1/' ] } } ] )
IAMroles y VPC creación
Para lanzar el EMR clúster en una función Lambda, se necesitan IAM los roles a VPC y. Puede configurar los IAM roles VPC y mediante la AWS CloudFormation plantilla de la sección de adjuntos de este patrón, o puede crearlos manualmente mediante los siguientes enlaces.
Se requieren las siguientes IAM funciones para ejecutar Lambda y Amazon. EMR
Rol de ejecución de Lambda
La función de ejecución de una función Lambda le otorga permiso para acceder a los AWS servicios y recursos.
Función de servicio para Amazon EMR
El EMRrol de Amazon define las acciones permitidas para Amazon EMR al aprovisionar recursos y realizar tareas de nivel de servicio que no se realizan en el contexto de una instancia de Amazon Elastic Compute Cloud (AmazonEC2) que se ejecuta dentro de un clúster. Por ejemplo, la función de servicio se usa para aprovisionar EC2 instancias cuando se lanza un clúster.
Función de servicio para EC2 instancias
La función de servicio para EC2 las instancias de clúster (también denominada perfil de EC2 instancia para AmazonEMR) es un tipo especial de función de servicio que se asigna a todas las EC2 instancias de un EMR clúster de Amazon cuando se lanza la instancia. Los procesos de aplicación que se ejecutan sobre Apache Hadoop asumen esta función en lo que respecta a los permisos para interactuar con otros AWS servicios.
VPCy creación de subredes
Puede crear una VPC desde la VPC consola.
Conexiones
Para acceder al contenido adicional asociado a este documento, descomprima el archivo: attachment.zip