Prefacio
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
¿Quién debería leer este libro?
Hemos creado este libro para los profesionales del software que tienen afinidad por los datos y que quieren mejorar sus conocimientos y habilidades en el área del procesamiento de flujos, y que ya están familiarizados con Apache Spark o quieren utilizarlo para sus aplicaciones de flujo.
Hemos incluido una introducción completa a los conceptos que subyacen al procesamiento de flujos. Estos conceptos forman la base para entender las dos APIs de streaming que ofrece Apache Spark: Streaming Estructurado y Spark Streaming.
Ofrecemos una exploración en profundidad de estas API y proporcionamos información sobre sus características, aplicación y consejos prácticos derivados de nuestra experiencia.
Más allá de la cobertura de las API y sus aplicaciones prácticas, también discutimos varias técnicas avanzadas que pertenecen a la caja de herramientas de todo profesional del procesamiento de flujos.
Los lectores de todos los niveles se beneficiarán de las partes introductorias del libro, mientras que los profesionales más experimentados sacarán nuevas conclusiones de las técnicas avanzadas tratadas y recibirán orientación sobre cómo aprender más.
No hemos hecho suposiciones sobre tus conocimientos necesarios de Spark, pero los lectores que no estén familiarizados con las capacidades de procesamiento de datos de Spark deben tener en cuenta que en este libro nos centramos en sus capacidades y API de streaming. Para una visión más general de las capacidades y el ecosistema de Spark, recomendamos Spark: The Definitive Guide de Bill Chambers y Matei Zaharia (O'Reilly).
El lenguaje de programación utilizado en todo el libro es Scala. Aunque Spark proporciona bindings en Scala, Java, Python y R, creemos que Scala es el lenguaje preferido para las aplicaciones de streaming. Aunque muchos de los ejemplos de código podrían traducirse a otros lenguajes, algunas áreas, como los cálculos complejos con estado, se abordan mejor utilizando el lenguaje de programación Scala.
Instalar Spark
Spark es un proyecto Apache de código abierto alojado oficialmente en la Fundación Apache, pero que utiliza principalmente GitHub para su desarrollo. También puedes descargarlo como paquete binario precompilado en la siguiente dirección: https://spark.apache.org/downloads.html.
A partir de ahí, puedes empezar a ejecutar Spark en una o varias máquinas, lo que explicaremos más adelante. Existen paquetes para las principales distribuciones de Linux, lo que debería facilitar la instalación.
A efectos de este libro, utilizamos ejemplos y código compatibles con Spark 2.4.0, y salvo pequeños detalles de salida y formato, esos ejemplos deberían seguir siendo compatibles con futuras versiones de Spark.
Ten en cuenta, sin embargo, que Spark es un programa que se ejecuta en la máquina virtual Java (JVM), que debes instalar y hacer accesible en cada máquina en la que se vaya a ejecutar cualquier componente de Spark.
Para instalar un kit de desarrollo Java (JDK) en, recomendamos OpenJDK, que también está empaquetado en muchos sistemas y arquitecturas.
También puedes instalar el JDK de Oracle.
Spark, como cualquier programa Scala, se ejecuta en cualquier sistema en el que esté presente un JDK versión 6 o posterior. El tiempo de ejecución de Java recomendado para Spark depende de la versión:
-
Para versiones de Spark inferiores a la 2.0, Java 7 es la versión recomendada.
-
Para las versiones de Spark 2.0 y superiores, Java 8 es la versión recomendada.
Aprender Scala
Los ejemplos de de este libro están en Scala. Éste es el lenguaje de implementación del núcleo de Spark, pero no es ni mucho menos el único lenguaje en el que se puede utilizar; en el momento de escribir esto, Spark ofrece API en Python, Java y R.
Scala es uno de los lenguajes de programación más completos de la actualidad, ya que ofrece aspectos tanto funcionales como orientados a objetos. Sin embargo, su concisión e inferencia de tipos hacen que los elementos básicos de su sintaxis sean fáciles de entender.
Scala como lenguaje para principiantes tiene muchas ventajas desde el punto de vista pedagógico, siendo su sintaxis y semántica regulares una de las más importantes.
Björn Regnell, Universidad de Lund
Por ello, esperamos que los ejemplos sean lo suficientemente claros como para que cualquier lector pueda captar su significado. Sin embargo, para los lectores que deseen una introducción al lenguaje y se sientan más cómodos aprendiendo con un libro, les aconsejamosAtomic Scala [Eckel2013]. Para los usuarios que busquen un libro de referencia para retocar sus conocimientos, recomendamos Programming in Scala [Odersky2016].
El camino a seguir
Este libro está organizado en cinco partes:
-
La Parte I amplía y profundiza los conceptos que hemos estado tratando en este prefacio. Cubrimos los conceptos fundamentales del procesamiento de flujos, los planos generales de las arquitecturas que implementan el streaming, y estudiamos Spark en detalle.
-
En la Parte II, aprendemos el Streaming Estructurado, su modelo de programación y cómo implementar aplicaciones de streaming, desde transformaciones sin estado relativamente sencillas hasta operaciones avanzadas con estado. También hablamos de su integración con herramientas de monitoreo que soportan operaciones 24/7 y descubrimos las áreas experimentales actualmente en desarrollo.
-
En la Parte III, estudiamos Spark Streaming. Con una organización similar a la del Streaming Estructurado, aprendemos a crear aplicaciones de streaming, a manejar trabajos de Spark Streaming y a integrarlo con otras API de Spark. Cerramos esta parte con una breve guía sobre el ajuste del rendimiento.
-
La Parte IV presenta técnicas avanzadas de streaming. Discutimos el uso de estructuras de datos probabilísticas y técnicas de aproximación para abordar los retos del procesamiento de flujos y examinamos el espacio limitado del aprendizaje automático en línea con Spark Streaming.
-
Para terminar, la Parte V nos lleva al streaming más allá de Apache Spark. Hacemos un repaso de otros procesadores de flujo disponibles y ofrecemos un vistazo a otros pasos para seguir aprendiendo sobre Spark y el procesamiento de flujo.
Te recomendamos que leas la Parte I para comprender los conceptos en los que se basa el procesamiento de flujos, lo que te facilitará el uso de un lenguaje y unos conceptos comunes en el resto del libro.
LaParte II, Streaming estructurado, y la Parte III, Spark Streaming, siguen una estructura coherente. Puedes elegir cubrir una u otra primero, según tu interés y prioridades más inmediatas:
-
¿Quizá estás empezando un nuevo proyecto y quieres conocer el Streaming Estructurado? ¡Compruébalo! Empieza en la Parte II.
-
¿O puede que estés entrando en una base de código existente que utiliza Spark Streaming y quieras entenderlo mejor? Empieza en la Parte III.
La Parte IV se adentra inicialmente en algunos antecedentes matemáticos necesarios para comprender las estructuras probabilísticas debatidas. Nos gusta pensar que "el camino por delante es empinado, pero el paisaje es hermoso".
La Parte V pondrá el procesamiento de flujos mediante Spark en perspectiva con otros marcos de trabajo y bibliotecas disponibles en el mercado. Puede que te ayude a decidirte a probar una o más alternativas antes de decidirte por una tecnología concreta.
Los recursos en línea del libro complementan tu experiencia de aprendizaje con cuadernos y código que puedes utilizar y con los que puedes experimentar por tu cuenta. O incluso puedes coger un trozo de código para poner en marcha tu propio proyecto. Los recursos en línea se encuentran en https://github.com/stream-processing-with-spark.
Esperamos de verdad que disfrutes leyendo este libro tanto como nosotros hemos disfrutado recopilando toda la información y reuniendo la experiencia que contiene.
Bibliografía
-
[Eckel2013] Eckel, Bruce y Dianne Marsh, Atomic Scala(Mindview LLC, 2013).
-
[Odersky2016] Odersky, Martin, Lex Spoon y Bill Venners, Programming in Scala, 3ª ed. (Artima Press, 2016).
Convenciones utilizadas en este libro
En este libro se utilizan las siguientes convenciones tipográficas:
- Cursiva
-
Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.
Constant width
-
Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.
Constant width bold
-
Muestra comandos u otros textos que deben ser tecleados literalmente por el usuario.
Constant width italic
-
Muestra el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.
Consejo
Este elemento significa un consejo o sugerencia.
Nota
Este elemento significa una nota general.
Advertencia
Este elemento indica una advertencia o precaución.
Utilizar ejemplos de código
El repositorio en línea de este libro contiene material complementario para mejorar la experiencia de aprendizaje con cuadernos interactivos, ejemplos de código de trabajo y algunos proyectos que te permiten experimentar y adquirir conocimientos prácticos sobre los temas y técnicas tratados. Puedes encontrarlo en https://github.com/stream-processing-with-spark.
Los cuadernos incluidos se ejecutan en Spark Notebook, un entorno de codificación interactivo, de código abierto y basado en la web, desarrollado con un enfoque específico para trabajar con Apache Spark utilizando Scala. Sus widgets en vivo son ideales para trabajar con aplicaciones de streaming, ya que podemos visualizar los datos a medida que pasan por el sistema.
El Cuaderno Spark puede encontrarse en https://github.com/spark-notebook/spark-notebook, y las versiones preconstruidas pueden descargarse directamente de su sitio de distribución en http://spark-notebook.io.
Este libro está aquí para ayudarte a hacer tu trabajo. En general, si se ofrece código de ejemplo con este libro, puedes utilizarlo en tus programas y documentación. No es necesario que te pongas en contacto con nosotros para pedirnos permiso, a menos que estés reproduciendo una parte importante del código. Por ejemplo, escribir un programa que utilice varios trozos de código de este libro no requiere permiso. Vender o distribuir un CD-ROM de ejemplos de los libros de O'Reilly sí requiere permiso. Responder a una pregunta citando este libro y el código de ejemplo no requiere permiso. Incorporar una cantidad significativa de código de ejemplo de este libro en la documentación de tu producto sí requiere permiso.
Agradecemos, pero no exigimos, la atribución. Una atribución suele incluir el título, el autor, la editorial y el ISBN. Por ejemplo "Stream Processing with Apache Spark " de Gerard Maas y François Garillot (O'Reilly). Copyright 2019 François Garillot y Gerard Maas Imágenes, 978-1-491-94424-0".
Si crees que el uso que haces de los ejemplos de código no se ajusta al uso legítimo o al permiso concedido anteriormente, no dudes en ponerte en contacto con nosotros en permissions@oreilly.com.
Aprendizaje en línea O'Reilly
Nota
Durante casi 40 años, O'Reilly Media ha proporcionado formación, conocimientos y perspectivas sobre tecnología y negocios para ayudar a las empresas a alcanzar el éxito.
Nuestra red única de expertos e innovadores comparten sus conocimientos y experiencia a través de libros, artículos, conferencias y nuestra plataforma de aprendizaje online. La plataforma de aprendizaje en línea de O'Reilly te ofrece acceso bajo demanda a cursos de formación en directo, rutas de aprendizaje en profundidad, entornos de codificación interactivos y una amplia colección de textos y vídeos de O'Reilly y de más de 200 editoriales. Para más información, visita http://oreilly.com.
Cómo contactar con nosotros
Dirige tus comentarios y preguntas sobre este libro a la editorial:
- O'Reilly Media, Inc.
- 1005 Gravenstein Highway Norte
- Sebastopol, CA 95472
- 800-998-9938 (en Estados Unidos o Canadá)
- 707-829-0515 (internacional o local)
- 707-829-0104 (fax)
Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en http://bit.ly/stream-proc-apache-spark.
Para hacer comentarios o preguntas técnicas sobre este libro, envía un correo electrónico a bookquestions@oreilly.com.
Para más información sobre nuestros libros, cursos, conferencias y noticias, consulta nuestro sitio web en http://www.oreilly.com.
Encuéntranos en Facebook: http://facebook.com/oreilly
Síguenos en Twitter: http://twitter.com/oreillymedia
Míranos en YouTube: http://www.youtube.com/oreillymedia
Agradecimientos
Este libro ha evolucionado drásticamente desde su concepción original como manual de aprendizaje de Spark Streaming hasta convertirse en un recurso exhaustivo sobre las capacidades de streaming de Apache Spark. Nos gustaría dar las gracias a nuestros revisores por sus valiosos comentarios, que han ayudado a dar a este libro su forma actual. Estamos especialmente agradecidos a Russell Spitzer, de Datastax, Serhat Yilmaz, de Facebook, y Giselle Van Dongen, de Klarrio.
Nos gustaría expresar nuestra gratitud a Holden Karau por su ayuda y asesoramiento en las primeras fases del borrador, y a Bill Chambers por su continuo apoyo cuando añadimos la cobertura del Streaming Estructurado.
Nuestro editor en O'Reilly, Jeff Bleiel, ha sido un baluarte de paciencia, comentarios y consejos a medida que avanzábamos desde las primeras ideas y versiones del borrador hasta la finalización del contenido que tienes en tus manos. También queremos dar las gracias a Shannon Cutt, nuestra primera editora en O'Reilly, por toda su ayuda para poner en marcha este proyecto. Otras personas de O'Reilly estuvieron ahí para asistirnos en muchas etapas y ayudarnos a avanzar.
Agradecemos a Tathagata Das sus numerosas interacciones, en particular durante los primeros días de Spark Streaming, cuando estábamos ampliando los límites de lo que el marco podía ofrecer.
De Gerard
Me gustaría dar las gracias a mis colegas de Lightbend por su apoyo y comprensión mientras hacía malabarismos entre la escritura del libro y mis responsabilidades laborales. Un agradecimiento muy especial a Ray Roestenburg por sus palabras de ánimo en los momentos difíciles; a Dean Wampler por apoyar siempre mis esfuerzos en este libro; y a Ruth Stento por sus excelentes consejos sobre el estilo de escritura.
Una mención especial a Kurt Jonckheer, Patrick Goemaere y Lieven Gesquière, que crearon la oportunidad y me dieron el espacio para profundizar en mis conocimientos sobre Spark; y a Andy Petrella por crear el Cuaderno Spark, pero sobre todo, por su pasión y entusiasmo contagiosos que me influyeron para seguir explorando la intersección entre la programación y los datos.
Sobre todo, me gustaría expresar mi infinita gratitud a mi mujer, Ingrid, a mis hijas Layla y Juliana, y a mi madre, Carmen. Sin su amor, sus cuidados y su comprensión, no habría podido llevar a cabo este proyecto.
De François
Estoy muy agradecido a mis colegas de Swisscom y Facebook por su apoyo durante la redacción de este libro; a Chris Fregly, Paco Nathan y Ben Lorica por sus consejos y apoyo; y a mi esposa AJung por absolutamente todo.
Get Procesamiento de flujos con Apache Spark 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.