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
Tekintse át az Apache Cassandra-hoz készült Azure Cosmos DB-hez való csatlakozás alapjait.
A kompatibilitás biztosításához tekintse át az Apache Cassandra-hoz készült Azure Cosmos DB támogatott funkcióit.
Győződjön meg arról, hogy már létrehozott üres kulcstereket és táblákat a cél Azure Cosmos DB for Apache Cassandra-fiókban.
Az ellenőrzéshez használja a cqlsh parancsot.
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.
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.
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.