Migrering av Cassandra till Cosmos DB-data

Slutförd

Efter att ha planerat och skapat Cassandra API-databasen i Azure Cosmos DB är nästa steg att migrera data till den från den lokala servern.

I videokameratillverkaren vill du migrera data till Azure utan ändringar och utan omodering för webbprogrammet. Du har blivit ombedd att välja och utföra den lämpligaste migreringen av data.

Här får du lära dig hur du kör en databasmigrering. Du kan antingen använda CQLSH COPY kommandot för att flytta lokala data till Azure Cosmos DB eller använda Spark.

Vad är CQLSH?

Cassandra Query Language (CQL) är det interna frågespråk som administratörer och utvecklare använder för att definiera data i en Cassandra-databas, fylla i databasen och köra frågor mot den. CQL är Cassandra-motsvarigheten till SQL för strukturerade databaser, men det har funktioner som underlättar arbetet med halvstrukturerade tabelldata som du hittar i Cassandra.

CQLSH är ett kommandoradsverktyg som du kan använda för att köra CQL-kommandon mot en Cassandra-databas eller en Cassandra API-databas i Azure Cosmos DB. Den innehåller ett interaktivt COPY kommando som du kan använda för att extrahera data från din lokala databas och importera dem till Cosmos DB.

Vad är Apache Spark?

Apache Spark är ett allmänt ramverk för att köra databehandlingsuppgifter på kluster av datorer. Den är utformad för att hantera stora mängder data och bearbeta den snabbt genom att distribuera uppgifter mellan medlemmar i klustret och hantera åtgärder i minnet.

Spark är öppen källkod och används ofta för arbetsbelastningar för extrahering, transformering och inläsning (ETL), databearbetning i realtid och batchbearbetning av stora mängder data i vila. Den har också tillägg som kan utföra maskininlärning, grafbearbetning och SQL-åtgärder.

För att migrera en databas till Cassandra API-databaser i Azure Cosmos DB är Spark mycket mer flexibelt än CQLSH. Det kan dock krävas mer arbete för att konfigurera och köra migreringar.

Spark är den rekommenderade metoden, men när versionerna av Spark och Cassandra ändras kan det vara mer komplext.

CQLSH COPY

Exportera data från Cassandra-databasen

Anslut till en början till Cassandra-databasen från Azure Cloud Shell med hjälp av SSH. När du har anslutit till servern utför du följande steg:

  1. Kör följande kommando för att starta CQLSH:

    cqlsh -u <your username> -p <your password>
    
  2. Kör följande kommando för varje tabell som du vill migrera:

    COPY <keyspace name>.<table name>
    TO '<filename>.csv';
    

Kommandot skapar en .csv-fil som innehåller alla data från tabellen.

Importera data till Cosmos DB

Utför följande steg för varje tabell för att migrera data med hjälp av CQLSH COPY:

  1. Anslut till ditt Cosmos DB-konto i Azure-portalen.

  2. I Inställningar klickar du på Anslut ionssträng och kopierar DEN PRIMÄRA ANSLUTNINGSSTRÄNGen.

  3. Logga in på CQLSH med den primära anslutningssträng.

  4. Kopiera lokala data till Cosmos DB med kommandot COPY:

    COPY <keyspace>.<table> FROM <table and data name>
    

Kommentar

För keypace anger du ditt nyckelområde, för tabell, anger tabellnamnet och för tabell- och datanamn anger du den tabell och det datanamn som du angav under exporten.

Migrering med Spark

Apache Spark är ett databehandlingsramverk som distribuerar bearbetningsuppgifter över flera servrar eller containrar för att skala ut till mycket stora kapaciteter. Det är ett idealiskt verktyg att använda för migrering när du har en stor mängd data att importera till Azure Cosmos DB Cassandra API eftersom du kan skala Spark-klustret för att bearbeta data mycket snabbt. Den har också omfattande funktioner för att transformera data om det skulle vara nödvändigt för projektet.

Du kan använda ett Spark-kluster lokalt eller utanför Azure. Azure tillhandahåller dock Databricks- och HDInsight-tjänsterna för värdkluster i Azure.

Spark i Azure

Om du vill köra ett Spark-kluster i Azure kan du välja mellan följande tjänster:

  • Azure Databricks. Databricks är en dataanalysplattform som har optimerats för och implementerats i Azure-molnet. Den innehåller Azure Databricks SQL Analytics för att köra SQL-frågor mot en datasjö. Den innehåller även Azure Databricks-arbetsytan, som möjliggör samarbete om databehandling av datatekniker, dataforskare och maskininlärningstekniker. Databricks-arbetsytan innehåller Spark för bearbetning av data.
  • Azure HDInsight. HDInsight är en implementering av Hadoop i Azure-molnet och hjälper användarna att bearbeta mycket stora mängder data. Den innehåller Apache Spark för minnesintern databearbetning på klustrade datornoder.

Förutsättningar

Innan du påbörjar en migrering från en Cassandra-databas till Azure Cosmos DB måste du uppfylla följande krav:

  • I din Azure-prenumeration måste du ha skapat ett Azure Cosmos DB-konto med Cassandra-API:et.
  • Du måste ha kontonamnet, kontoslutpunkten och nyckeln för Azure Cosmos DB-kontot.
  • Du måste ha skapat en Spark-miljö med hjälp av något av de Azure- eller externa alternativ som beskrivs ovan.
  • Spark-miljön måste innehålla Spark-anslutningsappen för Cassandra.
  • Spark-miljön måste innehålla Azure Cosmos DB-hjälpbiblioteket för Cassandra API.

Både anslutningsappen och hjälpbiblioteket är JAR-filer som du kan hämta från den centrala Maven-lagringsplatsen. Den här Scala-koden visar hur du konfigurerar dessa förutsättningar i Spark:

import org.apache.spark.sql.cassandra._

//Include the Spark connector for Cassandra
import com.datastax.spark.connector._
import com.datastax.spark.connector.cql.CassandraConnector

//Include the Azure Cosmos DB helper library for Cassandra API
import com.microsoft.azure.cosmosdb.cassandra

//Configure the connection to Azure Cosmos DB Cassandra API
spark.conf.set("spark.cassandra.connection.host","YOUR_ACCOUNT_NAME.cassandra.cosmosdb.azure.com")
spark.conf.set("spark.cassandra.connection.port","10350")
spark.conf.set("spark.cassandra.connection.ssl.enabled","true")
spark.conf.set("spark.cassandra.auth.username","YOUR_ACCOUNT_NAME")
spark.conf.set("spark.cassandra.auth.password","YOUR_ACCOUNT_KEY")
spark.conf.set("spark.cassandra.connection.factory", "com.microsoft.azure.cosmosdb.cassandra.CosmosDbConnectionFactory")

//Configure Spark throughput properties
spark.conf.set("spark.cassandra.output.batch.size.rows", "1")
spark.conf.set("spark.cassandra.connection.connections_per_executor_max", "10")
spark.conf.set("spark.cassandra.output.concurrent.writes", "1000")
spark.conf.set("spark.cassandra.concurrent.reads", "512")
spark.conf.set("spark.cassandra.output.batch.grouping.buffer.size", "1000")
spark.conf.set("spark.cassandra.connection.keep_alive_ms", "600000000")

Kopiera data mellan tabeller

Nu kan du använda Spark för att kopiera data från Cassandra-databasen lokalt till Azure Cosmos DB. Den här Scala-koden visar hur du kör kopian. Kom ihåg att du kan använda Sparks omfattande ETL-funktioner för att transformera data om du behöver anpassa dess format:

//Create a table in Cosmos DB
val cdbConnector = CassandraConnector(sc)
cdbConnector.withSessionDo(session => session.execute(
   "CREATE TABLE IF NOT EXISTS books_ks.
      books_copy(book_id TEXT PRIMARY KEY,book_author TEXT, book_name TEXT,book_pub_year INT,book_price FLOAT) 
      WITH cosmosdb_provisioned_throughput=4000;"))

//Read from the source table in the Cassandra DB on-premises
val readBooksDF = sqlContext
  .read
  .format("org.apache.spark.sql.cassandra")
  .options(Map( "table" -> "books", "keyspace" -> "books_ks"))
  .load

//Write data to the destination table in CosmosDB
readBooksDF.write
  .cassandraFormat("books_copy", "books_ks", "")
  .save()

//Validate the copy operation
sqlContext
  .read
  .format("org.apache.spark.sql.cassandra")
  .options(Map( "table" -> "books_copy", "keyspace" -> "books_ks"))
  .load
  .show

Mer information om hur du använder Spark med Databricks finns i Komma åt Azure Cosmos DB Cassandra API-data från Azure Databricks

Mer information om hur du använder ett HDInsight-kluster finns i Komma åt Azure Cosmos DB Cassandra API från Spark på YARN med HDInsight

Mer information om kopieringsåtgärden för Spark-tabeller finns i Tabellkopieringsåtgärder i Azure Cosmos DB Cassandra API från Spark