Migreren naar Azure Managed Instance voor Apache Cassandra met behulp van Apache Spark
Waar mogelijk raden we u aan om systeemeigen Replicatie van Apache Cassandra te gebruiken om gegevens van uw bestaande cluster te migreren naar Azure Managed Instance voor Apache Cassandra door een hybride cluster te configureren. Bij deze aanpak wordt het protocol van Apache Cassandra gebruikt om gegevens uit uw brondatacentrum te repliceren naar uw nieuwe datacentrum voor beheerde exemplaren. Er kunnen echter enkele scenario's zijn waarin de versie van uw brondatabase niet compatibel is, of een hybride clusterinstallatie anders niet haalbaar is.
In deze zelfstudie wordt beschreven hoe u gegevens offline migreert naar Azure Managed Instance voor Apache Cassandra met behulp van de Cassandra Spark-connector en hoe u Azure Databricks voor Apache Spark.
Vereisten
Provision an Azure Managed Instance for Apache Cassandra cluster using Azure Portal or Azure CLI and ensure you can connect to your cluster with CQLSH.
Een account Azure Databricks in uw beheerde Cassandra VNet inrichten. Zorg ervoor dat het ook netwerktoegang heeft tot uw Cassandra-broncluster.
Zorg ervoor dat u het keyspace-/tabelschema al hebt gemigreerd van uw Cassandra-brondatabase naar uw cassandra managed instance-doeldatabase.
Een cluster Azure Databricks inrichten
U kunt het beste Databricks Runtime versie 7.5 selecteren, die ondersteuning biedt voor Spark 3.0.
Afhankelijkheden toevoegen
Voeg de Apache Spark Cassandra Connector-bibliotheek toe aan uw cluster om verbinding te maken met zowel native als Azure Cosmos DB Cassandra-eindpunten. Selecteer in uw cluster Bibliotheken > Nieuwe > Maven installeren en voeg vervolgens com.datastax.spark:spark-cassandra-connector-assembly_2.12:3.0.0 Maven-coördinaten toe.
Selecteer Installeren en start het cluster opnieuw wanneer de installatie is voltooid.
Notitie
Zorg ervoor dat u het Databricks-cluster opnieuw opstart nadat de Cassandra Connector-bibliotheek is geïnstalleerd.
Scala Notebook maken voor migratie
Een Scala-notebook maken in Databricks. Vervang de Cassandra-bron- en doelconfiguraties door de bijbehorende referenties en de bron- en doelsleutelruimten en -tabellen. Voer vervolgens de volgende code uit:
import com.datastax.spark.connector._
import com.datastax.spark.connector.cql._
import org.apache.spark.SparkContext
// source cassandra configs
val sourceCassandra = 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 targetCassandra = 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" -> "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" -> "10",
"spark.cassandra.concurrent.reads" -> "512",
"spark.cassandra.output.batch.grouping.buffer.size" -> "1000",
"spark.cassandra.connection.keep_alive_ms" -> "600000000"
)
//Read from source Cassandra
val DFfromSourceCassandra = sqlContext
.read
.format("org.apache.spark.sql.cassandra")
.options(sourceCassandra)
.load
//Write to target Cassandra
DFfromSourceCassandra
.write
.format("org.apache.spark.sql.cassandra")
.options(targetCassandra)
.mode(SaveMode.Append) // only required for Spark 3.x
.save
Notitie
Als u de van elke rij wilt behouden of een back-date wilt writetime hebben, raadpleegt u het artikel over livemigratie.