Megosztás a következőn keresztül:


Adatok migrálása a Cassandra-ból egy Azure Cosmos DB for Apache Cassandra-fiókba az Azure Databricks használatával

A KÖVETKEZŐKRE VONATKOZIK: Cassandra

Az Azure Cosmos DB Cassandra API-ja több okból is kiváló választássá vált az Apache Cassandra-on futó nagyvállalati számítási feladatokhoz:

  • Nincs a felügyelet és a monitorozás többlettere: Kiküszöböli a beállítások kezelésének és monitorozásának többletterhelését az operációs rendszer, a JVM és a YAML-fájlok és azok interakciói között.

  • Jelentős költségmegtakarítás: Az Azure Cosmos DB-vel megtakaríthatja a költségeket, amely magában foglalja a virtuális gépek költségeit, a sávszélességet és az esetleges licenceket. Nem kell adatközpontokat, kiszolgálókat, SSD-tárolást, hálózatkezelést és villamosenergia-költségeket kezelnie.

  • Meglévő kód és eszközök használata: Az Azure Cosmos DB protokollszintű kompatibilitást biztosít a meglévő Cassandra SDK-kkal és -eszközökkel. Ez a kompatibilitás biztosítja, hogy a meglévő kódbázist az Apache Cassandra-hoz készült Azure Cosmos DB-vel triviális módosításokkal használhatja.

Az adatbázis-számítási feladatok számos módon migrálhatóak egyik platformról a másikra. Az Azure Databricks egy szolgáltatásként nyújtott platform (PaaS) az Apache Sparkhoz, amely lehetővé teszi az offline migrálások nagy léptékben történő végrehajtását. Ez a cikk a natív Apache Cassandra-kulcsterekből és táblákból az Azure Cosmos DB for Apache Cassandra-ba az Azure Databricks használatával történő migrálásának lépéseit ismerteti.

Előfeltételek

Azure Databricks-fürt kiépítése

Az Azure Databricks-fürt kiépítéséhez kövesse az utasításokat. Javasoljuk, hogy válassza a Databricks 7.5-ös verzióját, amely támogatja a Spark 3.0-t.

A Databricks futtatókörnyezet verziójának megkeresését bemutató képernyőkép.

Függőségek hozzáadása

A natív és az Azure Cosmos DB Cassandra-végpontokhoz való csatlakozáshoz hozzá kell adnia az Apache Spark Cassandra Connector-kódtárat a fürthöz. A fürtben válassza a Kódtárak>új maven telepítése>lehetőséget, majd adja hozzá com.datastax.spark:spark-cassandra-connector-assembly_2.12:3.0.0 a Maven koordinátáit.

Képernyőkép a Maven-csomagok keresésről a Databricksben.

Válassza a Telepítés lehetőséget, majd indítsa újra a fürtöt, amikor a telepítés befejeződött.

Feljegyzés

A Cassandra Connector-kódtár telepítése után indítsa újra a Databricks-fürtöt.

Figyelmeztetés

A cikkben bemutatott mintákat a Spark 3.0.1-es verziójával és a megfelelő Cassandra Spark Connector com.datastax.spark:spark-cassandra-connector-assembly_2.12:3.0.0-val teszteltük. Előfordulhat, hogy a Spark és/vagy a Cassandra-összekötő későbbi verziói nem a várt módon működnek.

Scala-jegyzetfüzet létrehozása migráláshoz

Scala-jegyzetfüzet létrehozása a Databricksben. Cserélje le a forrás- és cél Cassandra-konfigurációkat a megfelelő hitelesítő adatokra, valamint a forrás- és célkulcsterekre és -táblákra. Ezután futtassa a következő kódot:

import com.datastax.spark.connector._
import com.datastax.spark.connector.cql._
import org.apache.spark.SparkContext

// source cassandra configs
val nativeCassandra = Map( 
    "spark.cassandra.connection.host" -> "<Source Cassandra Host>",
    "spark.cassandra.connection.port" -> "9042",
    "spark.cassandra.auth.username" -> "<USERNAME>",
    "spark.cassandra.auth.password" -> "<PASSWORD>",
    "spark.cassandra.connection.ssl.enabled" -> "false",
    "keyspace" -> "<KEYSPACE>",
    "table" -> "<TABLE>"
)

//target cassandra configs
val cosmosCassandra = Map( 
    "spark.cassandra.connection.host" -> "<USERNAME>.cassandra.cosmos.azure.com",
    "spark.cassandra.connection.port" -> "10350",
    "spark.cassandra.auth.username" -> "<USERNAME>",
    "spark.cassandra.auth.password" -> "<PASSWORD>",
    "spark.cassandra.connection.ssl.enabled" -> "true",
    "keyspace" -> "<KEYSPACE>",
    "table" -> "<TABLE>",
    //throughput related settings below - tweak these depending on data volumes. 
    "spark.cassandra.output.batch.size.rows"-> "1",
    "spark.cassandra.output.concurrent.writes" -> "1000",
    //"spark.cassandra.connection.remoteConnectionsPerExecutor" -> "1", // Spark 3.x
    "spark.cassandra.connection.connections_per_executor_max"-> "1", // Spark 2.x
    "spark.cassandra.concurrent.reads" -> "512",
    "spark.cassandra.output.batch.grouping.buffer.size" -> "1000",
    "spark.cassandra.connection.keep_alive_ms" -> "600000000"
)

//Read from native Cassandra
val DFfromNativeCassandra = sqlContext
  .read
  .format("org.apache.spark.sql.cassandra")
  .options(nativeCassandra)
  .load
  
//Write to CosmosCassandra
DFfromNativeCassandra
  .write
  .format("org.apache.spark.sql.cassandra")
  .options(cosmosCassandra)
  .mode(SaveMode.Append) // only required for Spark 3.x
  .save

Feljegyzés

A spark.cassandra.output.batch.size.rows Spark-fürtben lévő dolgozók száma és spark.cassandra.output.concurrent.writes értékei fontos konfigurációk a sebességkorlátozás elkerülése érdekében. A sebességkorlátozás akkor történik, ha az Azure Cosmos DB-nek küldött kérések túllépik a kiosztott átviteli sebességet vagy kérelemegységeket (RU-kat). Előfordulhat, hogy módosítania kell ezeket a beállításokat a Spark-fürt végrehajtóinak számától és a céltáblákba írt rekordok méretétől (és így ru-költségétől) függően.

Hibaelhárítás

Sebességkorlátozás (429-hiba)

Előfordulhat, hogy 429-as hibakód vagy "a kérelem nagy" hibaüzenet jelenik meg, még akkor is, ha a beállításokat a minimális értékekre csökkentette. A következő forgatókönyvek sebességkorlátozást okozhatnak:

  • A táblához lefoglalt átviteli sebesség kisebb, mint 6000 kérelemegység. A Spark a minimális beállítások mellett is körülbelül 6000 kérelemegység vagy több írási sebességgel tud írni. Ha megosztott átviteli sebességgel rendelkező kulcstérben létesített ki egy táblát, lehetséges, hogy a tábla futásidőben kevesebb mint 6000 kérelemegységet tartalmaz.

    Győződjön meg arról, hogy a migrálni kívánt tábla legalább 6000 kérelemegységet tartalmaz az áttelepítés futtatásakor. Ha szükséges, rendeljen hozzá dedikált kérelemegységeket a táblához.

  • Túlzott adateltérés nagy adatmennyiséggel. Ha nagy mennyiségű adatot szeretne áttelepíteni egy adott táblába, de jelentős eltérés van az adatokban (vagyis nagy számú rekordot ír ugyanarra a partíciókulcs-értékre), akkor is előfordulhat, hogy a sebességkorlátozás akkor is tapasztalható, ha több kérelemegység van kiépítve a táblában. A kérelemegységek egyenlően vannak elosztva a fizikai partíciók között, és a nagy adateltérés szűk keresztmetszetet okozhat az egyetlen partícióra irányuló kérések számára.

    Ebben a forgatókönyvben csökkentse a Spark minimális átviteli sebességre vonatkozó beállításait, és kényszerítse a migrálás lassú futtatását. Ez a forgatókönyv gyakoribb lehet hivatkozási vagy vezérlőtáblák áttelepítésekor, ahol a hozzáférés ritkábban fordul elő, és a ferdeség magas lehet. Ha azonban bármely más típusú táblában jelentős eltérés van, érdemes lehet áttekinteni az adatmodellt, hogy elkerülje a számítási feladat gyakori partícióval kapcsolatos problémáit az állandó állapotú műveletek során.

Következő lépések