Migrar para a Instância Gerenciada do Azure para Apache Cassandra usando o Apache Spark
Sempre que possível, recomendamos usar a replicação nativa do Apache Cassandra para migrar dados do cluster existente para a Instância Gerenciada do Azure para Apache Cassandra configurando um cluster híbrido. Essa abordagem usará o protocolo de fofocas do Apache Cassandra para replicar dados do seu datacenter de origem para o novo datacenter de instância gerenciada. No entanto, pode haver alguns cenários em que a versão do banco de dados de origem não seja compatível ou uma configuração de cluster híbrido não seja viável.
Este tutorial descreve como migrar dados para Migrar para a Instância Gerenciada do Azure para Apache Cassandra de forma offline usando o Cassandra Spark Connector e o Azure Databricks para Apache Spark.
Pré-requisitos
Provisione uma Instância Gerenciada do Azure para cluster Apache Cassandra usando o portal do Azure ou a CLI do Azure e garanta que você possa se conectar ao cluster com CQLSH.
Provisione uma conta do Azure Databricks dentro de sua VNet Cassandra gerenciada. Certifique-se de que ele também tenha acesso à rede para o cluster Cassandra de origem.
Certifique-se de já ter migrado o esquema de chave/tabela do banco de dados Cassandra de origem para o banco de dados Cassandra Managed Instance de destino.
Provisionar um cluster do Azure Databricks
Recomendamos selecionar Databricks runtime version 7.5, que suporta o Spark 3.0.
Adicionar dependências
Adicione a biblioteca Apache Spark Cassandra Connector ao cluster para se conectar aos pontos de extremidade Cassandra nativos e do Azure Cosmos DB. No cluster, selecione Bibliotecas>Instalar Novo>Maven e adicione com.datastax.spark:spark-cassandra-connector-assembly_2.12:3.0.0
as coordenadas do Maven.
Selecione Instalar e reinicie o cluster quando a instalação estiver concluída.
Nota
Certifique-se de reiniciar o cluster Databricks após a biblioteca Cassandra Connector ter sido instalada.
Criar Bloco de Anotações Scala para migração
Crie um bloco de anotações Scala no Databricks. Substitua as configurações Cassandra de origem e de destino pelas credenciais correspondentes e pelos espaços-chave e tabelas de origem e destino. Em seguida, execute o seguinte código:
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
Nota
Se você tiver necessidade de preservar o original writetime
de cada linha, consulte a amostra de cassandra migrator .