Sin categoría

Transformaciones masivas de datos de Couchbase usando Apache Spark con una fuente externa

La necesidad

Ah, migraciones de bases de datos. Después de haber migrado a Couchbase, donde la representación de datos de documentos JSON es mucho más flexible, no necesitarás tan a menudo retorcer tu proceso de desarrollo a través de la tubería de solicitud de cambio seguido por el tiempo de inactividad, los posibles errores y sólo la incomodidad general cuando se une a filas y columnas.

Dicho esto, sólo porque estés en Couchbase no significa que siempre estés libre de necesitar hacer transformación de datos con datos en Couchbase. Simplemente será mucho menos común.

¡Este es realmente un lugar interesante para Apache Spark!

Un comentario...

Con el conector Spark y Couchbase 4.0 tienes no sólo una, sino cuatro interfaces que son relevantes para los que usan Spark. Se trata de la interfaz K-V, la interfaz de streaming Database Change Protocol (también conocida como DCP), la interfaz de consulta N1QL a través de Spark SQL y la interfaz View Query.

Estos se pueden combinar con una serie de diferentes fuentes de datos del ecosistema Spark para reunir y manipular los datos de varias maneras. Por ejemplo, es posible que desees transmitir los datos desde Couchbase a través de DCP, mezclarlos con una fuente de datos HDFS y volver a colocar los resultados de destino en un bucket de Couchbase diferente.

La solución...

Tomando un caso simple, ¿cómo podemos usar Spark para escribir algún código para transformar eficientemente un conjunto de datos dentro de Couchbase?

Imagina que has adquirido un nuevo conjunto de datos sobre jugadores en formato JSON. Todos ellos van a jugar pronto a su nuevo juego FizzBuzz, y los perfiles proceden de un socio. Los perfiles entrantes se parecen un poco a esto:

El problema es que los perfiles de FizzBuzz tienen todos este aspecto:

Normalmente, si tuvieras otra forma para los datos, añadirías un poco de lógica para el mapeo en el momento de la lectura y la escritura. Sin embargo, esta transición en particular es un proceso de una sola vez y viene con una arruga adicional. Ese "entitlementtoken" tiene que buscarse en una copia de seguridad de la base de datos MySQL que también tienes. No querrá tener que aprovisionar o mantener un gran despliegue MySQL para gestionar el tráfico del día del lanzamiento, por lo que es mejor una transformación única previa al lanzamiento.

Lo ideal sería hacer streaming de los datos, encontrar los que tienen la 'forma' que queremos y luego transformarlos con Spark a partir de una consulta SQL.

Primero, necesitamos configurar nuestra conexión y transmitir los datos, buscando la forma del JSON ya importado. Esto utilizará la interfaz DCP de Couchbase para transmitir los datos.

Una limitación actual es que el DStream nunca se detiene, pero podemos simplemente monitorizar cuando no vemos más datos siendo transformados como una solución para este simple caso.

Luego, para cada elemento, debemos aplicar una transformación basada en esta búsqueda de MySQL. Para ello, tendremos que cargar los datos de MySQL. Suponiendo que la tabla MySQL se ve así:

Querremos cargar los datos de MySQL como un DataFrame. Dado que el StreamingContext nos da RDDs a los que unirnos, lo convertiremos en un conjunto de RDDs para un posterior join dentro del stream. Spark 1.6 puede hacer esto más fácil. Esa conversión se parece a esto (extraído a una función para redablility):

También tenemos que añadir la nueva ficha de derechos (también extraída):

Al final tenemos una bonita descripción fluida de nuestra transformación modificando los RDDs en vuelo que necesitan cambios. Esto finalmente escribe los datos transformados de nuevo en Couchbase, sobrescribiendo los elementos usando la interfaz K-V.

En el ejemplo completo se encuentra en couchbase-spark-samples repositorio.

La belleza de este ejemplo es que es fácil de entender lo que está pasando y bastante trivial a escala. Lo más probable es que tu propia transformación sea más compleja, pero esto debería darte una idea de lo que es posible y algo en lo que basarte.

Siempre se puede mejorar.

Un problema es que el MySQL podría ser más grande de lo que quiero cargar en la memoria. Spark lo tiene en cuenta dándote una forma de dividir los DataFrames. Yo no necesitaba eso aquí y quería que la muestra fuera legible. La otra cosa que puede ayudar a esto es la capacidad de hacer referencia a un SparkContext desde dentro de un StreamingContext existente. Spark no lo permite por el momento por buenas razones, pero yo diría que este simple caso de uso de hacer un solo registro de búsqueda desde dentro de la corriente no tiene sentido.

En el Conector Couchbase, por el momento, la interfaz DCP está clasificada como volátil y debería considerarse experimental. Además, el ejemplo anterior es muy rápido pero necesita algo de ayuda para escalar. Una próxima actualización de mi colega Sergey Avseyev permitirá dividir los flujos DCP entre trabajadores Spark para paralelizar esta transformación.

Para concluir

Spark es una gran herramienta nueva para este tipo de transformación. Las mismas técnicas pueden aplicarse a la migración a Couchbase desde una fuente de datos diferente, como una base de datos relacional. La técnica puede incluso ampliarse con el aprendizaje automático de Spark para construir un modelo en torno al flujo de datos desde Couchbase para anticipar resultados.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Matt Ingenthron, Director Senior, Ingeniería SDK, Couchbase

Matt Ingenthron es el Director Senior de Ingeniería en Couchbase, donde se centra en la interfaz de desarrollador a través de SDKs, conectores y otros proyectos. Ha sido colaborador del proyecto memcached, uno de los mantenedores del cliente Java spymemcached y desarrollador principal de Couchbase.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.