Talend y Apache Spark: manual técnico y descripción general

Talend y Apache Spark: manual técnico y descripción general

  • Petros Nomikos
    I have 3 years of experience with installation, configuration, and troubleshooting of Big Data platforms such as Cloudera, MapR, and HortonWorks. I joined Talend in 2014, and prior to Talend I held positions as manager of technical support, and project manager for data warehouse implementations. In my current role, I assist companies in understanding how to implement Talend in their Big Data Ecosystem.

Durante mis años como técnico de asistencia en Talend, antes de incorporarme al equipo de arquitectos del éxito de clientes, muchas veces los clientes me preguntaban qué capacidades tenía Talend para funcionar con Apache Spark, Al hablar de Spark, lo primero que le viene a uno a la cabeza es el comando Spark submit, que utilizamos para enviar nuestras tareas de Spark. Por lo tanto, es normal que la gente se pregunte en qué se parecen una tarea de Talend Spark y un Spark submit normal y corriente. En este artículo hablaremos de los distintos modos de Apache Spark, los que utiliza Talend y cómo funciona Talend con Apache Spark.

Introducción a las tareas de Apache Spark

Apache Spark tiene dos tipos de tareas distintas que puede enviar. Unas se llaman Spark Batch y las otras Spark Streaming. Spark Batch funciona con un modelo de procesamiento por lotes, en el que se recaba un conjunto de datos durante un tiempo determinado y se envía a un motor de Spark para ser procesados.

Spark Streaming, por contra, funciona con un modelo en streaming en el que los datos se envían a un motor de Spark pieza a pieza y el procesamiento se produce en tiempo real. Talend es compatible con ambos tipos de tareas y le permite crear tareas de Spark para cualquiera de los dos tipos. En Talend Studio, según la licencia que tenga, se le dará la opción «Big Data Batch» para crear tareas en Spark Batch y «Big Data Streaming» para crear tareas en Spark Streaming.

Conozca mejor Talend y Apache Spark

Antes de seguir, veamos algunos conceptos fundamentales que se utilizarán en lo que queda de publicación.

  • Spark Driver (Controlador): Se encarga de enviar su aplicación a Spark Master, generando y ejecutando su Spark Context (Contexto).
  • Spark Master (Maestro): Se encarga de solicitar recursos de YARN tal y como lo defina el Spark Driver y encontrar los hosts que ejecutarán su tarea.
  • Spark Executor (Ejecutor): Un proceso que arranca en los nodos trabajadores que ejecuta su solicitud de tarea en memoria o en disco.

Ante todo, demos un poco de contexto sobre el funcionamiento de las tareas de Spark si utilizamos Spark submit o Talend. En las tareas de Spark siempre hay un «controlador» (driver) que configura y coordina su tarea de Spark. El controlador de Spark, en este caso, establece la configuración que utilizará su tarea, como el Spark Master al que se conectará o cuánta memoria se asignará a sus ejecutores de Spark. Así pues, Talend es equivalente a Spark submit siempre y cuando existe un controlador de Spark que configura y coordina su tarea de Spark.

Bien, cuando realiza un Spark submit desde dentro del clúster de Hadoop, parte de la información de configuración se extrae de los archivos de configuración de su clúster. Como Talend Studio no siempre está en un clúster de Hadoop, tenemos que dar esa información a la tarea en Studio para que sepa qué ajustes utilizar.

En cuanto a la definición de las transformaciones de datos que se producen en la tarea de Spark, en Talend sucede durante la compilación de la tarea, que es idéntico a lo que ocurre cuando se utiliza el procedimiento de Spark submit. De modo parecido a Spark submit, Talend también arranca la tarea como el «controlador» la ha definido más arriba, aunque la tarea no se ejecuta en el controlador, sino en los ejecutores de Spark a nivel del clúster. Una vez iniciada la tarea, Talend la controla escuchando los eventos que ocurran en el clúster de Hadoop para informar del progreso de la tarea, cosa parecida a lo que sucede si usamos Spark submit.

Tanto si utiliza una tarea de Spark submit como de Talend para enviar su tarea a Spark, se le ofrecen tres modalidades, según la configuración de su clúster de Hadoop. Según la documentación de Spark, estos son los tres modos posibles (http://spark.apache.org/docs/latest/cluster-overview.html):

1. Autónomo: En esta modalidad hay un maestro de Spark al que el controlador de Spark envía la tarea y ejecutores de Spark que se ejecutan en el clúster para procesar las tareas.

2. Modo cliente de YARN: Aquí los daemons trabajadores de Spark asignados a cada tarea se inician y detienen en el framework de YARN. El controlador de Spark descrito anteriormente se ejecuta en el mismo sistema desde el que esté ejecutando su tarea de Talend.

3. Modo clúster de YARN: Cuando se utilizan, el maestro y los ejecutores de Spark se ejecutan dentro del framework de YARN. Se inician y detienen con la tarea. En este caso, el controlador de Spark también se ejecuta dentro de YARN a nivel del clúster de Hadoop.

Una vez definidos los modos que prevé Spark, veamos qué ofrece Talend. Estos son los distintos modos previstos en Talend:

1. Local: Cuando se selecciona, la tarea inicializa un framework de Spark localmente para que ejecute la tarea. Su máquina local se utilizará como maestro de Spark y también como un ejecutor de Spark para llevar a cabo las transformaciones de datos.

2. Autónomo: En este modo, como hemos definido antes también, Talend se conectará al maestro de Spark definido en su clúster de Hadoop y luego ejecutará la tarea.

3. Modo cliente de YARN: Como también hemos definido antes, Talend Studio ejecutará el «controlador» de Spark para orquestar su tarea desde el lugar en el que se inicie su tarea y luego enviará la orquestación al framework de YARN para la ejecución y asignación de recursos. Las opciones disponibles para las distribuciones de Hadoop son, por ejemplo, Hortonworks, Cloudera, MapR, Amazon EMR, etc.

4. Clúster de YARN: Actualmente este modo tan solo es compatible con HDInsight y Cloudera Altus en Talend. En esta modalidad, como mencionamos antes, Talend ejecutará el «controlador» de Spark en YARN a nivel del clúster de Hadoop.

Respondemos las tres preguntas más frecuentes sobre Talend y Apache Spark:

  • ¿Talend envía todas las bibliotecas y los archivos necesarios para la tarea al maestro de Spark en un mismo momento o hay cierta información que siempre se ejecuta en Studio?

Respuesta: En ningún momento dado se envían necesariamente todas las bibliotecas al maestro de Spark. Siempre existe la posibilidad de que en ese momento se solicite la acción de los ejecutores en el «controlador» de Spark para enviar las bibliotecas necesarias. En ese caso, el «controlador» sigue ejecutándose mientras se está procesando la tarea para esperar a que termine la tarea y luego informar del estado de la tarea. No obstante, como sucede con cualquier tarea de Spark, parte del procesamiento puede acabar produciéndose en la parte del «controlador». Un buen ejemplo es cuando tienen un tLogRow en su tarea, dado que tendrá que recabar toda la información del clúster y luego imprimirla en la consola, o cuando utiliza los componentes tCacheIn y tCacheOut, en los que el «controlador» guardará la información de los metadatos donde estén ubicados los archivos en la memoria. En este caso, Talend Studio no es distinto a ejecutar un Spark submit.

  • Si quiero escribir un archivo que no esté en el HDFS, sino localmente en Studio o en un servidor de tareas, sin indicar una configuración de almacenamiento, ¿se escribirá el archivo?

Respuesta: Debe indicarse una configuración de almacenamiento para la tarea. Es algo recomendable de cara a la estabilidad de la tarea y es preferible usar una única configuración de almacenamiento para toda la tarea. No es posible usar dos ubicaciones de almacenamiento HDFS para dos clústeres distintos o dos métodos de autenticación distintos. Con el ejemplo de HDFS y S3, sin embargo, funcionaría. El motivo por el que la tarea no puede escribirse en el sistema de archivos local es porque los trabajadores de Spark no tienen visibilidad del sistema de archivos local del «controlador», porque es por ello que el «controlador» de Spark abre un servidor para enviar las bibliotecas al clúster. Si es eso lo que se desea conseguir, la mejor opción es escribir un archivo temporal en el HDFS y luego tener una tarea de DI que utilice tHDFSGet para devolver ese archivo a la máquina local. Este comportamiento tampoco es distinto a Spark submit.

  • ¿Por qué la pestaña Environment (Entorno) de la interfaz web del maestro de Spark me lleva a la dirección de IP de Studio?

Respuesta: Esta pestaña debería llevarle siempre a la dirección de IP del controlador de Spark. Si está ejecutando Spark submit en el clúster, no se dará cuenta del redireccionamiento, pero si no, le resultará obvio. En este caso, Talend Studio no es distinto a un Spark submit.

Espero que toda esta información haya servido para entender que ejecutar tareas en Talend no difiere de realizar un Spark submit. Talend facilita la programación con Spark, le ofrece la posibilidad de escribir tareas tanto de Spark Batch como de Spark Streaming y utilizar las tareas de Spark que diseñe tanto por lotes como en streaming. Le animo a que empiece a escribir sus propias tareas de Spark con Talend y verá lo fácil que resulta ejecutar tareas respecto a su clúster de Hadoop o en Apache Spark autónomo.

Join The Conversation

0 Comments

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *