Sdílet prostřednictvím


Migrace dat z Cassandra do účtu Azure Cosmos DB for Apache Cassandra pomocí Azure Databricks

PLATÍ PRO: Cassandra

Rozhraní API pro Cassandra ve službě Azure Cosmos DB je skvělou volbou pro podnikové úlohy běžící na Apache Cassandře z několika důvodů:

  • Bez režijních nákladů na správu a monitorování: Eliminuje režii při správě a monitorování nastavení v souborech OS, JVM a YAML a jejich interakcích.

  • Výrazné úspory nákladů: Náklady můžete ušetřit pomocí služby Azure Cosmos DB, která zahrnuje náklady na virtuální počítače, šířku pásma a všechny příslušné licence. Nemusíte spravovat datacentra, servery, úložiště SSD, sítě a náklady na elektřinu.

  • Schopnost používat existující kód a nástroje: Azure Cosmos DB poskytuje kompatibilitu na úrovni přenosového protokolu s existujícími sadami SDK a nástroji Cassandra. Tato kompatibilita zajišťuje, že můžete použít stávající základ kódu se službou Azure Cosmos DB pro Apache Cassandra s triviálními změnami.

Existuje mnoho způsobů, jak migrovat databázové úlohy z jedné platformy do jiné. Azure Databricks je nabídka PaaS (platforma jako služba) pro Apache Spark , která nabízí způsob, jak provádět offline migrace ve velkém měřítku. Tento článek popisuje kroky potřebné k migraci dat z nativních prostorů klíčů Apache Cassandra a tabulek do služby Azure Cosmos DB pro Apache Cassandra pomocí Azure Databricks.

Požadavky

Zřízení clusteru Azure Databricks

Podle pokynů můžete zřídit cluster Azure Databricks. Doporučujeme vybrat modul runtime Databricks verze 7.5, který podporuje Spark 3.0.

Snímek obrazovky znázorňující vyhledání verze modulu runtime Databricks

Přidání závislostí

Abyste se mohli připojit k nativním koncovým bodům Cassandra služby Azure Cosmos DB, musíte do clusteru přidat knihovnu konektoru Apache Spark Cassandra. V clusteru vyberte Knihovny>Nainstalovat nový>Maven a pak přidejte com.datastax.spark:spark-cassandra-connector-assembly_2.12:3.0.0 souřadnice Mavenu.

Snímek obrazovky znázorňující hledání balíčků Maven v Databricks

Vyberte Nainstalovat a po dokončení instalace restartujte cluster.

Poznámka:

Po instalaci knihovny konektoru Cassandra se ujistěte, že restartujete cluster Databricks.

Upozorňující

Ukázky uvedené v tomto článku byly testovány pomocí Sparku verze 3.0.1 a odpovídajícího Konektoru Cassandra Spark com.datastax.spark :spark-cassandra-connector-assembly_2.12:3.0.0. Novější verze Sparku nebo konektoru Cassandra nemusí fungovat podle očekávání.

Vytvoření poznámkového bloku Scala pro migraci

Vytvoření poznámkového bloku Scala v Databricks Nahraďte konfiguraci zdrojové a cílové Cassandra odpovídajícími přihlašovacími údaji a zdrojovými a cílovými prostory klíčů a tabulkami. Pak spusťte následující kód:

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

Poznámka:

Hodnoty spark.cassandra.output.batch.size.rows a spark.cassandra.output.concurrent.writes počet pracovních procesů v clusteru Spark jsou důležité konfigurace, které se mají vyladit, aby se zabránilo omezování rychlosti. K omezování rychlosti dochází v případě, že požadavky na službu Azure Cosmos DB překročí zřízenou propustnost nebo jednotky žádostí (RU). Tato nastavení možná budete muset upravit v závislosti na počtu exekutorů v clusteru Spark a potenciálně velikosti (a tedy nákladů na RU) každého záznamu, který se zapisuje do cílových tabulek.

Odstraňování potíží

Omezování rychlosti (chyba 429)

Může se zobrazit kód chyby 429 nebo text chyby "Frekvence požadavků je velký", i když jste snížili nastavení na minimální hodnoty. Následující scénáře můžou způsobit omezování rychlosti:

  • Propustnost přidělená tabulce je menší než 6 000 jednotek žádostí. I při minimálním nastavení může Spark zapisovat rychlostí přibližně 6 000 jednotek žádostí nebo více. Pokud jste zřídili tabulku v prostoru klíčů se sdílenou propustností, je možné, že tato tabulka má k dispozici méně než 6 000 RU za běhu.

    Ujistěte se, že tabulka, na kterou migrujete, má při spuštění migrace k dispozici alespoň 6 000 RU. V případě potřeby přidělte této tabulce vyhrazené jednotky žádostí.

  • Nadměrná nerovnoměrná distribuce dat s velkým objemem dat Pokud máte velké množství dat, která se mají migrovat do dané tabulky, ale mají v datech velkou nerovnoměrnou distribuci (to znamená velký počet záznamů zapsaných pro stejnou hodnotu klíče oddílu), může docházet k omezování rychlosti i v případě, že máte v tabulce zřízeno několik jednotek žádostí. Jednotky žádostí jsou rovnoměrně rozdělené mezi fyzické oddíly a nerovnoměrná distribuce dat může způsobit kritické body požadavků na jeden oddíl.

    V tomto scénáři snižte minimální nastavení propustnosti ve Sparku a vynuťte, aby migrace běžela pomalu. Tento scénář může být častější při migraci referenčních nebo řídicích tabulek, kdy je přístup méně častý a nerovnoměrná distribuce může být vysoká. Pokud se ale v některém jiném typu tabulky vyskytuje významná nerovnoměrná distribuce, můžete datový model zkontrolovat, abyste se vyhnuli problémům s horkými oddíly pro vaši úlohu během operací stabilního stavu.

Další kroky