Spark sobre Elastic MapReduce

Amazon Elastic MapReduce (Amazon EMR) es un servicio web para la configuración y depliegue de un cluster basado en instancias de máquinas en el servicio Amazon Elastic Compute Cloud (Amazon EC2) y que es gestionado mediante Hadoop. También se puede ejecutar en Amazon EMR otros marcos de trabajo distribuídos como Spark, e interactuar con los datos en otros almacenes de datos como Amazon S3.

Para poder utilizar Spark sobre EMR es necesario seguir una serie de pasos adicionales al despliegue típico de un cluster EMR. En primer lugar es necesario realizar la instalación de Spark sobre el cluster mediante una acción de lanzamiento (bootstrap action). Además, es necesario modificar la forma en que se lanzan los trabajos, ya que deben ser lanzados sobre Spark y no sobre Hadoop.

Instalar Spark

Para instalar Spark se añade una nueva bootstrap action en el momento de configurar el cluster antes de su despliegue:
emr_bootstrap_new
donde el script a ejecutar es el siguiente (sin argumentos):

s3://support.elasticmapreduce/spark/install-spark

Este script ya lo proporciona el prop Amazon, por lo que es fiable su funcionalidad sobre EMR. Solo añadiendo esta acción ya estará Spark plenamente funcional en el cluster EMR desplegado.

Ejecutar un trabajo

Por defecto, los steps de EMR son ejecutados mediante hadoop. Para evitar esto, amazon proporciona un programa en java para ejecutar scripts fuera de hadoop. De esta forma, para ejecutar un trabajo sobre Spark, se debe añadir un step a modo de Custom Jar:
emr_steps_new
donde las opciones son las siguientes (sustituir los argumentos entre <> por sus valores reales):

  • Step type: Custom JAR
  • JAR Location:

    s3://<CLUSTER_REGION>.elasticmapreduce/libs/script-runner/script-runner.jar
  • Arguments:

    /home/hadoop/spark/bin/spark-submit --deploy-mode cluster --master yarn-cluster --class <MAIN_CLASS> s3://<BUCKET>/<FILE_JAR> <JAR_OPTIONS>

El significado de los argumentos es:

  • /home/hadoop/spark/bin/spark-submit — es el script de ejecución de trabajos sobre spark.
  • –deploy-mode cluster indica el despliegue de spark en modo cluster, aprovechando todos los nodos configurados en hadoop.
  • –master yarn-cluster lanza spark sobre Apache Hadoop NextGen MapReduce.
  • –class <MAIN_CLASS> indica cual es la clase main del programa java. Esto es necesario, ya que un jar almacenado en S3 no hace disponible conocer su clase main.
  • s3://<BUCKET>/<FILE_JAR> es la localización del programa java que realizará el trabajo.
  • <JAR_OPTIONS> son los argumentos necesarios del programa java.

La ejecución del trabajo generará unos logs en el directorio S3 configurado a la hora de desplegar el cluster, conteniendo la salida estandar y la salida estandar de error.

Java 8

La última versión AMI disponible (3.7.0) contiene como versión java 7. Para aquellos que usan java 8 (algo común en este tipo de entorno, por el uso de funciones lambda), pueden instalarlo en el cluster mediante un script ejecutado como bootstrap action. Para ello, solo es necesario almacenar en el contenedor S3 el siguiente script para luego añadirlo como bootstrap action a la hora de lanzar un nuevo cluster.

Referencias

Deixa unha resposta

O teu enderezo electrónico non se publicará Os campos obrigatorios están marcados con *