En nombre de todo el equipo, estoy increíblemente orgulloso de anunciar que acabamos de lanzar la primera versión preliminar para desarrolladores de nuestro nuevo Couchbase Chispa Conector. Te permite mover datos dentro y fuera de Couchbase directamente usando Spark RDDs. Resulta que Couchbase y Spark encajan a la perfección porque comparten muchas propiedades como la escalabilidad, el rendimiento y la facilidad de uso.
Las siguientes funciones están disponibles en esta versión preliminar para desarrolladores (y pronto habrá más):
- Creación de RDDs a partir de Documentos, Vistas y Consultas N1QL.
- Escribir RDDs y DStreams en Couchbase.
- Gestión de clústeres y cubos totalmente transparente, incluido el acceso directo en caso necesario.
Puede encontrar el proyecto en github aquí. También proporcionamos documentación en forma de wikipero planeo cambiarlo a algo más oficial una vez que el proyecto se acerque a la versión GA.
Conseguirlo
Los avances para desarrolladores están disponibles a través de nuestro propio repositorio maven, los artefactos GA estarán disponibles en maven central. Aquí están las coordenadas (estamos cruzando la compilación a scala 2.10 y 2.11 como lo hace spark):
- Identificación del grupo: com.couchbase.client
- Identificación de artefacto: spark-connector_2.10 o spark-connector_2.11
- Versión: 1.0.0-dp
Esta versión preliminar para desarrolladores se ha creado con Spark 1.2.1. Si sólo quieres jugar con una instalación local, eso es todo lo que necesitas para empezar. Una vez que necesites desplegar a producción, lo más fácil es "engordar" todas las dependencias usando el gran sbt-assembly plugin. Estrictamente hablando, esto no tiene mucho que ver con el conector couchbase, pero vamos a proporcionar guías completas en esa área pronto como parte de la documentación oficial.
Configurar
Una vez que todo está en el classpath, es hora de establecer una configuración y el contexto de spark. La configuración completa se hace a través de las propiedades en la configuración de spark. Si no proporcionas ninguna configuración se conectará a un servidor en localhost y utilizar el por defecto cubo.
Esta es una configuración ligeramente personalizada que abre el muestra de cerveza en un cluster remoto. Vamos a utilizar la función muestra de cerveza en la mayoría de los ejemplos siguientes.
También es posible abrir varios cubos y utilizarlos al mismo tiempo. documentos actuales para obtener más información. Ahora todo lo que necesitamos hacer es inicializar el contexto spark:
Lectura de Couchbase en RDDs
Lo primero que hay que recordar es importar el espacio de nombres correcto para que todos los métodos específicos de Couchbase estén disponibles en el contexto spark.
Ahora podemos utilizar el couchbaseGet para leer una secuencia de IDs en un RDD y luego, opcionalmente, aplicarles todo tipo de transformaciones spark. He aquí uno sencillo que carga documentos de cerveza, extrae sus nombres y los imprime:
El código utiliza el paralelismo por defecto, pero un método sobrecargado está disponible para personalizar esa propiedad para que pueda obtener el factor de paralelismo correcto que necesita.
Es necesario indicar el tipo de documento de destino al SDK, ya que hay muchas formas de convertirlo. Por lo tanto, si desea utilizar el Documento RawJson en lugar del JsonDocument puede acceder a la cadena json sin procesar en lugar de a la cadena convertida JsonObject. De forma similar, puedes incluso acceder a los datos binarios que almacenas en couchbase como documentos.
También puede crear un RDD a partir de una consulta de vista. El siguiente ejemplo imprime las 10 primeras filas del resultado de la vista:
Muy a menudo también es necesario obtener el documento completo para cada fila emitida. Para ello, couchbaseGet también está disponible como transformación RDD. He aquí un ejemplo más completo que carga todos los documentos de una vista dada y almacena en caché el RDD. A continuación, calculamos la media de alcohol por volumen para todas las cervezas, así como encontramos las cervezas con el nombre más largo.
Por último, si tienes un servidor habilitado para N1QL (o que ejecute al menos N1QL DP4) también puedes ejecutar una consulta N1QL:
Escribir RDDs en Couchbase
Couchbase es bien conocido por su excelente rendimiento de escritura, por lo que sería una pena que no pudiéramos utilizarlo en Spark. La forma más sencilla es pasar un RDD[Documento] en el saveToCouchbase Método RDD. El siguiente código creará 100 documentos en Couchbase:
También se puede hacer uso de convertidores personalizados que reducen el boilerplate si no se necesita un control total sobre el documento creado. Existen algunas limitaciones en este punto, pero las estructuras JSON planas también pueden almacenarse así (de forma similar a la anterior):
Vamos a mejorar las capacidades de conversión en las próximas versiones preliminares para desarrolladores, además de permitirte enganchar tu propia lógica.
Por último, también proporcionamos soporte para el envío de datos a couchbase desde un servidor DStream (spark streaming). Aquí hay un ejemplo completo que obtiene datos de twitter y almacena hashtags populares como documentos en Couchbase:
Planes para la Developer Preview 2
A pesar de lo emocionante que es esta primera vista previa para desarrolladores, tenemos muchas más características en la cola. Por ejemplo, estamos trabajando en una integración más estrecha de N1QL y Spark SQL, creando DStreams a través de DCP (nuestro protocolo de streaming interno) para obtener cambios de documentos en tiempo real en spark y también convertidores personalizados.
Envíenos sus comentarios y preguntas a través de nuestro foros y publique los problemas que encuentre en nuestro seguimiento de errores (también puedes enviar allí las características y mejoras que desees). Estamos muy entusiasmados con la evolución de este proyecto y recibir comentarios de los primeros usuarios es crucial para que sea aún más impresionante.
¿Habría que instalar algo en cada nodo del cluster Couchbase para que esto funcione?