Servidor Couchbase

Transferencia de datos de Cassandra a Couchbase usando Spark

Shivansh Srivastava es un desarrollador políglota y aficionado a Scala y Spark. Le gusta contribuir a proyectos de código abierto, y ha contribuido a muchos proyectos como Apache Iota, Apache Spark, Apache Carbondata, Conector Couchbase-SparkAkka, Alpakka y muchos otros proyectos. Tiene un gran interés en las próximas tecnologías como IoT, DeepLearning, etc. Cn la actualidad ocupa el puesto de Ingeniero de Software Senior en Chirpanywhere Inc, una startup basada en IoT, donde gestiona muchos aspectos, desde la programación del hardware hasta el diseño de toda la solución y su despliegue. 

Hay muchos Bases de datos NoSQL en el mercado como Cassandra, MongoDB, Couchbase y otros, y cada uno tiene pros y contras.

Tipos de bases de datos NoSQL

Existen principalmente cuatro tipos de bases de datos NoSQL, a saber:

  1. Columna

  2. Almacén de claves y valores

  3. Orientación documental

  4. Gráfico

Las bases de datos que admiten más de un formato se denominan "multimodelo", como Couchbase, que admite bases de datos clave-valor y orientadas a documentos.

A veces elegimos la base de datos equivocada para nuestra aplicación y nos damos cuenta de esta dura verdad más adelante.

¿Y después? ¿Qué debemos hacer?

Tal es el caso de nuestra experiencia, en la que utilizábamos Cassandra como base de datos y más tarde descubrimos que no satisfacía todas nuestras necesidades. Necesitábamos encontrar una nueva base de datos y descubrimos que Couchbase era la adecuada.

La principal dificultad fue averiguar cómo debíamos transferir nuestros datos de De Cassandra a Couchbaseporque no había ningún plugin disponible.

En esta entrada del blog voy a describir el código que escribí que transfiere datos de Cassandra a Couchbase usando Spark.

Todo el código está disponible aquí: cassandra-couchbase-transfer-plugin

Explicación del código


Aquí, estoy leyendo datos de Cassandra y escribiéndolos de nuevo en Couchbase. Este sencillo código resuelve nuestro problema.

Los pasos a seguir son:

  1. Lectura de la configuración:
    val config = ConfigFactory.carga()
    //Configuración de la base de datos
    val bucketName = config.getString("couchbase.bucketName")
    val couchbaseHost = config.getString("couchbase.host")
    //Configuración de Cassandra
    val keypaceName = config.getString("cassandra.keyspaceName")
    val tableName = config.getString("cassandra.tableName")
    val idFeild = config.getString("cassandra.idFeild")
    val cassandraHost = config.getString("cassandra.host")
    val cassandraPort = config.getInt("cassandra.port")

  2. Establecimiento de la configuración de Spark y creación de la sesión de Spark:
    val conf = nuevo SparkConf()
      .setAppName(s "CouchbaseCassandraTransferPlugin")
     .setMaster("local[*]")
     .set(s "com.couchbase.bucket.$bucketName, “”)
     .set("com.couchbase.nodes", couchbaseHost)
     .set("spark.cassandra.connection.host", cassandraHost)
     .set("spark.cassandra.connection.port", cassandraPort.toString)
    val chispa = SparkSession.constructor().config(conf).getOrCreate()
    val sc = chispa.sparkContext

  3. Lectura de datos de Cassandra:
      val cassandraRDD = chispa.leer
      .format("org.apache.spark.sql.cassandra")
      .opciones(Mapa("mesa" -> tableName, "espacio clave" -> keypaceName))
      .load()

  4. Comprobación del campo id:
    El campo id se comprueba para ver si existe. Luego se usa como id en Couchbase o se genera un id aleatorio y se asigna al documento.
    importar org.apache.spark.sql.functions._
    val uuidUDF = udf(CouchbaseHelper.getUUID _)
    val rddToBeWritten = si (cassandraRDD.columns.contains(idFeild)) {
      cassandraRDD.withColumn("META_ID", cassandraRDD(idFeild))
    } si no {
      cassandraRDD.withColumn("META_ID", uuidUDF())
    }

    En otro archivo:
    objeto CouchbaseHelper {
    def getUUID: Cadena = UUID.randomUUID().toString
    }

  5. Escribir en Couchbase:
    rddToBeWritten.write.couchbase()

Puedes ejecutar este código directamente para transferir datos de Cassandra a Couchbase - todo lo que necesitas hacer es alguna configuración.

Configuraciones

Todas las configuraciones se pueden realizar mediante la configuración de los parámetros variables de entorno.

  1. Configuración de Couchbase:

Nombre de la configuración

Valor por defecto

Descripción

COUCHBASE_URL

"localhost"

El nombre de host para Couchbase.

COUCHBASE_BUCKETNAME

"foobar"

El nombre del cubo al que deben transferirse los datos.

  1. Configuración de Cassandra:

Nombre de la configuración

Valor por defecto

Descripción

CASSANDRA_URL

"localhost"

El nombre de host para Cassandra.

PUERTO DE CASANDRA

9042

El puerto para el Cassandra.

NOMBRE_CLAVE_CASSANDRA

"foobar"

El nombre del espacio de claves de Cassandra

CASSANDRA_TABLENAME

"testcouchbase"

El nombre de la tabla que debe transferirse.

CASSANDRA_ID_FEILD_NAME

"id"

El nombre del campo que debe usarse como id del documento de Couchbase, si el nombre del campo no coincide con ninguna columna da un id aleatorio al documento.

 

Código en acción

Cassandra lado:

Así es como se ven los datos en el lado de Cassandra.

Cassandra1.png

Lado Couchbase:

Caso 1: Cuando el id existe y el mismo puede ser usado como id de documento Couchbase.

Couchbase_with_id.png

Caso 2: Cuando el nombre del identificador no existe y necesitamos asignar un identificador aleatorio a los documentos.Couchbase_idChanged.png

Cómo ejecutar el plugin de transferencia Cassandra-Couchbase

Pasos para ejecutar el código:

  1. Descarga el código del repositorio.

  2. Configure las variables de entorno de acuerdo con la configuración.

  3. Ejecute el proyecto con ejecutar sbt

Si desea escribir sobre Couchbase y participar en nuestro programa de escritura de la comunidad, ¿por qué no? más información 

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

Autor

Publicado por Laura Czajkowski, Directora de la Comunidad de Desarrolladores, Couchbase

Laura Czajkowski es la Snr. Developer Community Manager en Couchbase supervisando la comunidad. Es responsable de nuestro boletín mensual para desarrolladores.

2 Comentarios

  1. Hola,

    ¿Puede indicarme dónde y cómo especificar la opción para la autenticación de cassandra y couchbase?

    Tanto cassandra como couchbase tienen autenticación habilitada.

    Reagrds

  2. Hola,

    Personalmente no estoy familiarizado con Cassandra, pero si quieres autenticarte con Couchbase puedes añadir algo como:

    .set("spark.couchbase.username", "")
    .set("spark.couchbase.password", "")

    Esto se define en la documentación que se encuentra aquí:

    https://developer.couchbase.com/documentation/server/5.1/connectors/spark-2.2/getting-started.html

    Lo mejor,

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.