Cassandra–Cosmos DB-adatmigrálás

Befejeződött

Miután megtervezte és létrehozta a Cassandra API-adatbázist az Azure Cosmos DB-ben, a következő lépés az adatok migrálása a helyszíni kiszolgálóról.

A videokamera gyártójában módosítás nélkül és a webalkalmazásra való visszahívás nélkül szeretne adatokat migrálni az Azure-ba. A rendszer arra kérte, hogy válassza ki és hajtsa végre a legmegfelelőbb adatmigrálást.

Itt megtudhatja, hogyan hajthat végre adatbázis-migrálást. A parancs segítségével áthelyezheti a CQLSH COPY helyi adatokat az Azure Cosmos DB-be, vagy használhatja a Sparkot.

Mi az a CQLSH?

A Cassandra Lekérdezési nyelv (CQL) az a natív lekérdezési nyelv, amelyet a rendszergazdák és a fejlesztők a Cassandra-adatbázisban lévő adatok meghatározására, az adatbázis feltöltésére és lekérdezések futtatására használnak. A CQL a strukturált adatbázisok SQL-jének Cassandra-megfelelője, de olyan funkciókkal rendelkezik, amelyek megkönnyítik a Cassandra részben strukturált, táblázatos adatainak működését.

A CQLSH egy parancssori eszköz, amellyel CQL-parancsokat futtathat egy Cassandra-adatbázison vagy egy Cassandra API-adatbázison az Azure Cosmos DB-ben. Tartalmaz egy interaktív COPY parancsot, amellyel adatokat nyerhet ki a helyszíni adatbázisból, és importálhatja őket a Cosmos DB-be.

Mi az az Apache Spark?

Az Apache Spark egy általános célú keretrendszer, amely számítógépes fürtökön futtat számítási feladatokat. Úgy tervezték, hogy nagy mennyiségű adatot kezeljen, és gyorsan feldolgozza a feladatokat a fürt tagjai között, és kezelje a memóriában lévő műveleteket.

A Spark nyílt forráskódú, és gyakran használják kinyerési, átalakítási és betöltési (ETL) számítási feladatokhoz, valós idejű adatfeldolgozáshoz és nagy mennyiségű inaktív adat kötegelt feldolgozásához. Emellett olyan bővítményekkel is rendelkezik, amelyek gépi tanulást, gráffeldolgozást és SQL-műveleteket hajthatnak végre.

Az adatbázis Cassandra API-adatbázisokba való migrálásához az Azure Cosmos DB-ben a Spark sokkal rugalmasabb, mint a CQLSH. Az áttelepítések beállítása és végrehajtása azonban több munkát is igénybe vehet.

A Spark az ajánlott módszer, azonban a Spark és a Cassandra verzióinak változásával összetettebb lehet.

CQLSH-PÉLDÁNY

Adatok exportálása a Cassandra-adatbázisból

Kezdetben csatlakozzon a Cassandra-adatbázishoz az Azure Cloud Shellből az SSH használatával. Miután csatlakozott a kiszolgálóhoz, hajtsa végre a következő lépéseket:

  1. Futtassa a következő parancsot a CQLSH elindításához:

    cqlsh -u <your username> -p <your password>
    
  2. Futtassa a következő parancsot minden migrálni kívánt táblához:

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

A parancs létrehoz egy .csv fájlt, amely a tábla összes adatát tartalmazza.

Adatok importálása a Cosmos DB-be

Ha a CQLSH COPY használatával szeretne adatokat migrálni, hajtsa végre az alábbi lépéseket az egyes táblákhoz:

  1. Csatlakozás Cosmos DB-fiókjához az Azure Portalon.

  2. A Gépház kattintson a Csatlakozás ion sztringre, és másolja ki az ELSŐDLEGES KAPCSOLATI SZTRINGet.

  3. Jelentkezzen be a CQLSH-ba az elsődleges kapcsolati sztring.

  4. Másolja a helyi adatokat a Cosmos DB-be a COPY paranccsal:

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

Megjegyzés:

Kulcspace esetén adja meg a kulcsteret, a táblához adja meg a tábla nevét, a tábla és az adatnév esetében pedig az exportálás során megadott táblát és adatnevet.

Migrálás a Sparkkal

Az Apache Spark egy adatfeldolgozási keretrendszer, amely a feldolgozási feladatokat több kiszolgáló vagy tároló között osztja el, hogy nagy kapacitásokra méretezhető legyen. Ideális eszköz a migráláshoz, ha nagy mennyiségű adatot importál az Azure Cosmos DB Cassandra API-ba, mert a Spark-fürtöt skálázhatja az adatok gyors feldolgozásához. Emellett széles körű képességekkel rendelkezik az adatok átalakításához, amelyeket a projekthez szükségesnek kell lennie.

A Spark-fürtöt a helyszínen vagy az Azure-on kívül is használhatja. Az Azure azonban a Databricks- és HDInsight-szolgáltatásokat biztosítja az Azure-beli fürtök üzemeltetéséhez.

Spark az Azure-ban

Ha Spark-fürtöt szeretne futtatni az Azure-ban, az alábbi szolgáltatások közül választhat:

  • Azure Databricks. A Databricks egy adatelemzési platform, amely az Azure-felhőre lett optimalizálva és implementálva. Magában foglalja az Azure Databricks SQL Analytics szolgáltatást az SQL-lekérdezések data lake-en való futtatásához. Emellett tartalmazza az Azure Databricks Workspacet is, amely lehetővé teszi az adatmérnökök, adattudósok és gépi tanulási mérnökök adatfeldolgozási együttműködését. A Databricks-munkaterület a Sparkot is tartalmazza az adatok feldolgozásához.
  • Azure HDInsight. A HDInsight a Hadoop implementációja az Azure-felhőben, és segít a felhasználóknak nagy mennyiségű adat feldolgozásában. Tartalmazza az Apache Sparkot a memóriabeli adatfeldolgozáshoz a fürtözött számítógépcsomópontokon.

Előfeltételek

Mielőtt migrálást indít egy Cassandra-adatbázisból az Azure Cosmos DB-be, meg kell felelnie a következő követelményeknek:

  • Az Azure-előfizetésben létre kell hoznia egy Azure Cosmos DB-fiókot a Cassandra API-val.
  • Rendelkeznie kell az Azure Cosmos DB-fiók fióknevével, fiókvégpontával és kulcsával.
  • A Fent ismertetett Azure-beli vagy külső lehetőségek egyikével létre kell hoznia egy Spark-környezetet.
  • A Spark-környezetnek tartalmaznia kell a Cassandra Spark-összekötőt.
  • A Spark-környezetnek tartalmaznia kell a Cassandra API-hoz készült Azure Cosmos DB-segédtárat.

Az összekötő és a segédtár is JAR-fájlok, amelyeket a Maven központi adattárából szerezhet be. Ez a Scala-kód bemutatja, hogyan konfigurálhatja ezeket az előfeltételeket a Sparkban:

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")

Adatok másolása táblák között

Most a Spark használatával adatokat másolhat a helyszíni Cassandra-adatbázisból az Azure Cosmos DB-be. Ez a Scala-kód bemutatja, hogyan hajthatja végre a másolatot. Ne feledje, hogy a Spark széles körű ETL-képességeivel átalakíthatja az adatokat, ha módosítania kell a formátumát:

//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

További információ a Spark és a Databricks használatáról: Azure Cosmos DB Cassandra API-adatok elérése az Azure Databricksből

A HDInsight-fürt használatával kapcsolatos további információkért lásd: Azure Cosmos DB Cassandra API elérése a Sparkból a YARN-on a HDInsighttal

A Spark-táblamásolási művelettel kapcsolatos további információkért tekintse meg az Azure Cosmos DB Cassandra API táblamásolási műveleteit a Sparkból