Capítulo 4. Configuración de un entorno de desarrollo para Apache Flink
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
Ahora que tenemos todos esos conocimientos, ¡es hora de ensuciarnos las manos y empezar a desarrollar aplicaciones Flink! En este capítulo aprenderás a configurar un entorno para desarrollar, ejecutar y depurar aplicaciones Flink. Empezaremos hablando del software necesario y de dónde puedes conseguir los ejemplos de código de este libro. Utilizando estos ejemplos, mostraremos cómo se ejecutan y depuran las aplicaciones Flink en un IDE. Por último, mostraremos cómo arrancar un proyecto Flink Maven, el punto de partida de una nueva aplicación.
Software necesario
En primer lugar, hablemos del software que necesitas para desarrollar aplicaciones Flink. Puedes desarrollar y ejecutar aplicaciones Flink en Linux, macOS y Windows. Sin embargo, las configuraciones basadas en UNIX disfrutan del soporte de herramientas más rico, ya que este entorno es el preferido por la mayoría de los desarrolladores de Flink. Asumiremos una configuración basada en UNIX en el resto de este capítulo. Como usuario de Windows, puedes utilizar el subsistema Windows para Linux (WSL), Cygwin o una máquina virtual Linux para ejecutar Flink en un entorno UNIX.
La API DataStream de Flink está disponible para Java y Scala. Por lo tanto, se necesita un JDK de Java para implementar aplicaciones Flink DataStream-Java JDK 8 (o superior). No basta con un JRE de Java.
Suponemos que también está instalado el siguiente software, aunque no es estrictamente necesario para desarrollar aplicaciones Flink:
-
Apache Maven 3.x. Los ejemplos de código del libro utilizan la gestión de construcción de Maven. Además, Flink proporciona arquetipos Maven para arrancar nuevos proyectos Flink Maven.
-
Un IDE para desarrollo Java y/o Scala. Las opciones más comunes son IntelliJ IDEA, Eclipse o Netbeans con los complementos adecuados (como Maven, Git y Scala). Recomendamos utilizar IntelliJ IDEA. Puedes seguir las instrucciones del sitio web de IntelliJ IDEA para descargarlo e instalarlo.
Ejecutar y depurar aplicaciones Flink en un IDE
Incluso aunque Flink es un sistema de procesamiento de datos distribuido, normalmente desarrollarás y ejecutarás las pruebas iniciales en tu máquina local. Esto facilita el desarrollo y simplifica la implementación en clúster, ya que puedes ejecutar exactamente el mismo código en un entorno de clúster sin realizar ningún cambio. A continuación describimos cómo obtener los ejemplos de código que utilizamos aquí, cómo importarlos a IntelliJ, cómo ejecutar una aplicación de ejemplo y cómo depurarla.
Importar los Ejemplos del Libro en un IDE
Los ejemplos de código de este libro están alojados en GitHub. En la página de GitHub del libro, encontrarás un repositorio con ejemplos de Scala y otro con ejemplos de Java. Utilizaremos el repositorio de Scala para la configuración, pero deberías poder seguir las mismas instrucciones si prefieres Java.
Abre un terminal y ejecuta el siguiente comando Git para clonar el repositorio examples-scala
en tu máquina local:1
> git clone https://github.com/streaming-with-flink/examples-scala
En también puedes descargar el código fuente de los ejemplos como archivo zip desde GitHub:
> wget https://github.com/streaming-with-flink/examples-scala/archive/master.zip > unzip master.zip
Los ejemplos del libro se proporcionan como un proyecto Maven. Encontrarás el código fuente en el directorio src/
, agrupado por capítulos:
. └── main └── scala └── io └── github └── streamingwithflink ├── chapter1 │ └── AverageSensorReadings.scala ├── chapter5 │ └── ... ├── ... │ └── ... └── util └── ...
Ahora abre tu IDE e importa el proyecto Maven. Los pasos de importación son similares para la mayoría de los IDE. A continuación, explicamos detalladamente este paso para IntelliJ.
Navega a Archivo -> Nuevo -> Proyecto a partir de fuentes existentes, selecciona la carpeta examples del libro examples-scala, y haz clic en Aceptar. Asegúrate de que están seleccionadas las opciones "Importar proyecto desde modelo externo" y "Maven" y haz clic en Siguiente.
Un asistente de importación de proyectos te guiará por los siguientes pasos, como seleccionar el proyecto Maven a importar (sólo debe haber uno), seleccionar el SDK y asignar un nombre al proyecto. Las figuras 4-1 a 4-3 ilustran el proceso de importación.
Ya está. Ahora deberías poder navegar e inspeccionar el código de los ejemplos del libro.
Ejecutar aplicaciones Flink en un IDE
A continuación, vamos a ejecutar una de las aplicaciones de ejemplo del libro en tu IDE. Busca la clase AverageSensorReadings
y ábrela. Como ya se comentó en "Un vistazo rápido a Flink", el programa genera eventos de lectura para múltiples sensores térmicos, convierte la temperatura de los eventos de Fahrenheit a Celsius y calcula la temperatura media de cada sensor cada segundo. Los resultados del programa se emiten a la salida estándar. Al igual que muchas aplicaciones DataStream, la fuente, el sumidero y los operadores del programa se ensamblan en el método main()
de la clase AverageSensorReadings
.
Para iniciar la aplicación, ejecuta el método main()
. La salida del programa se escribe en la ventana de salida estándar (o consola) de tu IDE. La salida comienza con unas cuantas declaraciones de registro sobre los estados por los que pasan las tareas del operador paralelo, como PROGRAMANDO, DESPLEGANDO y EJECUTANDO. Una vez que todas las tareas están en marcha, el programa comienza a producir sus resultados, que deberían parecerse a las siguientes líneas:
2> SensorReading(sensor_31,1515014051000,23.924656183848732) 4> SensorReading(sensor_32,1515014051000,4.118569049862492) 1> SensorReading(sensor_38,1515014051000,14.781835420242471) 3> SensorReading(sensor_34,1515014051000,23.871433252250583)
El programa seguirá generando nuevos eventos, procesándolos y emitiendo nuevos resultados cada segundo hasta que lo termines.
Ahora vamos a hablar rápidamente de lo que ocurre bajo el capó. Como se explica en "Componentes de una configuración de Flink", una aplicación Flink se envía al JobManager (maestro), que distribuye las tareas de ejecución a uno o varios TaskManagers (trabajadores). Dado que Flink es un sistema distribuido, el Gestor de Trabajos y los Gestores de Tareas suelen ejecutarse como procesos JVM separados en máquinas diferentes. Normalmente, el método main()
del programa ensambla el flujo de datos y lo envía a un JobManager remoto cuando se llama al método StreamExecutionEnvironment.execute()
.
Sin embargo, también existe un modo en el que la llamada al método execute()
inicia un JobManager y un TaskManager (por defecto con tantas ranuras como hilos de CPU disponibles) como hilos separados dentro de la misma JVM. En consecuencia, toda la aplicación Flink es multihilo y se ejecuta dentro del mismo proceso de la JVM. Este modo se utiliza para ejecutar un programa Flink dentro de un IDE.
Depurar aplicaciones Flink en un IDE
Debido al modo de ejecución de JVM única, también es posible depurar aplicaciones Flink en un IDE casi como cualquier otro programa de tu IDE. Puedes definir puntos de interrupción en el código y depurar tu aplicación como lo harías normalmente.
Sin embargo, hay que tener en cuenta algunas cosas a la hora de depurar una aplicación Flink en un IDE:
-
A menos que especifiques un paralelismo, un programa es ejecutado por tantos hilos como el número de hilos de la CPU de tu máquina de desarrollo. Por tanto, debes tener en cuenta que podrías depurar un programa multihilo.
-
A diferencia de la ejecución de un programa Flink enviándolo a un JobManager remoto, el programa se ejecuta en una única JVM. Por lo tanto, ciertos problemas, como los de carga de clases, no pueden depurarse adecuadamente.
-
Aunque un programa se ejecuta en una única JVM, los registros se serializan para la comunicación entre hilos y, posiblemente, para la persistencia del estado.
Crear un proyecto Flink Maven
Importar el repositorio examples-scala
a tu IDE para experimentar con Flink es un buen primer paso. Sin embargo, también debes saber cómo crear un nuevo proyecto Flink desde cero.
Flink proporciona arquetipos de Maven para generar proyectos Maven para aplicaciones Flink Java o Scala. Abre un terminal y ejecuta el siguiente comando para crear un proyecto Flink Maven Quickstart Scala como punto de partida para tu aplicación Flink:
mvn archetype:generate \ -DarchetypeGroupId=org.apache.flink \ -DarchetypeArtifactId=flink-quickstart-scala \ -DarchetypeVersion=1.7.1 \ -DgroupId=org.apache.flink.quickstart \ -DartifactId=flink-scala-project \ -Dversion=0.1 \ -Dpackage=org.apache.flink.quickstart \ -DinteractiveMode=false
Esto generará un proyecto Maven para Flink 1.7.1 en una carpeta llamada flink-scala-project. Puedes cambiar la versión de Flink, los ID de grupo y de artefacto, la versión y el paquete generado cambiando los parámetros respectivos del comando mvn anterior. La carpeta generada contiene una carpeta src/ y un archivo pom.xml. La carpeta src/ tiene la siguiente estructura:
src/ └── main ├── resources │ └── log4j.properties └── scala └── org └── apache └── flink └── quickstart ├── BatchJob.scala └── StreamingJob.scala
El proyecto contiene dos archivos esqueleto, BatchJob.scala y StreamingJob.scala, como punto de partida para tus propios programas. También puedes eliminarlos si no los necesitas.
Puedes importar el proyecto en tu IDE siguiendo los pasos que hemos descrito en la sección anterior o puedes ejecutar el siguiente comando para construir un archivo JAR:
mvn clean package -Pbuild-jar
Si el comando se ha completado correctamente, encontrarás una nueva carpeta de destino en la carpeta de tu proyecto. La carpeta contiene un archivo flink-scala-project-0.1.jar, que es el archivo JAR de tu aplicación Flink. El archivo pom.xml generado también contiene instrucciones sobre cómo añadir nuevas dependencias a tu proyecto.
Resumen
En este capítulo has aprendido a configurar un entorno para desarrollar y depurar aplicaciones Flink DataStream y a generar un proyecto Maven utilizando el arquetipo Maven de Flink. El siguiente paso obvio es aprender a implementar realmente un programa DataStream.
El Capítulo 5 te introducirá en los fundamentos de la API DataStream, y los Capítulos 6, 7 y 8 te presentarán todo lo que necesitas saber sobre los operadores basados en el tiempo, las funciones con estado y los conectores fuente y sumidero.
1 También proporcionamos un repositorioexamples-Java
con todos los ejemplos implementados en Java.
Get Procesamiento de flujos con Apache Flink now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.