Migracja danych bazy danych Cassandra do usługi Cosmos DB

Ukończone

Po zaplanowaniu i utworzeniu bazy danych interfejsu API Cassandra w usłudze Azure Cosmos DB następnym etapem jest migracja danych do niej z serwera lokalnego.

W producencie aparatu wideo chcesz przeprowadzić migrację danych na platformę Azure bez zmian i bez konieczności ponownego przetwarzania aplikacji internetowej. Poproszono Cię o wybranie i wykonanie najbardziej odpowiedniej migracji danych.

W tym miejscu dowiesz się, jak przeprowadzić migrację bazy danych. Możesz użyć CQLSH COPY polecenia , aby przenieść dane lokalne do usługi Azure Cosmos DB lub użyć platformy Spark.

Co to jest CQLSH?

Cassandra Query Language (CQL) to natywny język zapytań używany przez administratorów i deweloperów do definiowania danych w bazie danych Cassandra Database, wypełniania bazy danych i uruchamiania względem niej zapytań. CQL to odpowiednik bazy danych Cassandra dla ustrukturyzowanych baz danych, ale zawiera funkcje ułatwiające pracę z częściowo ustrukturyzowanymi danymi tabelarycznymi, które można znaleźć w bazie danych Cassandra.

CQLSH to narzędzie wiersza polecenia, za pomocą którego można uruchamiać polecenia języka CQL względem bazy danych Cassandra lub bazy danych interfejsu API Cassandra w usłudze Azure Cosmos DB. Zawiera on interaktywne COPY polecenie, którego można użyć do wyodrębnienia danych z lokalnej bazy danych i zaimportowania ich do usługi Cosmos DB.

Co to jest platforma Apache Spark?

Apache Spark to struktura ogólnego przeznaczenia służąca do uruchamiania zadań obliczeniowych w klastrach komputerów. Jest ona przeznaczona do obsługi dużych ilości danych i szybkiego przetwarzania ich przez dystrybucję zadań między członkami klastra i obsługę operacji w pamięci.

Platforma Spark jest typu open source i często używana do obciążeń wyodrębniania, przekształcania i ładowania (ETL), przetwarzania danych w czasie rzeczywistym i przetwarzania wsadowego dużych ilości danych magazynowanych. Ma również rozszerzenia, które mogą wykonywać uczenie maszynowe, przetwarzanie grafów i operacje SQL.

W przypadku migrowania bazy danych do baz danych interfejsu API Cassandra w usłudze Azure Cosmos DB platforma Spark jest znacznie bardziej elastyczna niż CQLSH. Jednak skonfigurowanie i wykonanie migracji może wymagać więcej pracy.

Platforma Spark jest jednak zalecaną metodą, ponieważ wersje platform Spark i Cassandra zmieniają się, może to być bardziej złożone.

KOPIOWANIE CQLSH

Eksportowanie danych z bazy danych Cassandra

Początkowo połącz się z bazą danych Cassandra z usługi Azure Cloud Shell przy użyciu protokołu SSH. Po nawiązaniu połączenia z serwerem wykonaj następujące kroki:

  1. Uruchom następujące polecenie, aby uruchomić protokół CQLSH:

    cqlsh -u <your username> -p <your password>
    
  2. Uruchom następujące polecenie dla każdej tabeli, którą chcesz zmigrować:

    COPY <keyspace name>.<table name>
    TO '<filename>.csv';
    

Polecenie tworzy plik CSV zawierający wszystkie dane z tabeli.

Importowanie danych do usługi Cosmos DB

Aby przeprowadzić migrację danych przy użyciu narzędzia CQLSH COPY, wykonaj następujące kroki dla każdej tabeli:

  1. Połączenie do konta usługi Cosmos DB w witrynie Azure Portal.

  2. W Ustawienia kliknij pozycję Parametry Połączenie ion i skopiuj podstawowe parametry POŁĄCZENIA.

  3. Zaloguj się do protokołu CQLSH przy użyciu parametry połączenia podstawowego.

  4. Skopiuj dane lokalne do usługi Cosmos DB przy użyciu polecenia COPY:

    COPY <keyspace>.<table> FROM <table and data name>
    

Uwaga

W polu keypace określ przestrzeń kluczy dla tabeli, określ nazwę tabeli, a w polu nazwa tabeli i danych określ nazwę tabeli i danych określoną podczas eksportowania.

Migracja za pomocą platformy Spark

Apache Spark to struktura przetwarzania danych, która dystrybuuje zadania przetwarzania na wielu serwerach lub kontenerach w celu skalowania w poziomie do bardzo dużych pojemności. Jest to idealne narzędzie do migracji w przypadku dużej ilości danych do zaimportowania do interfejsu API Cassandra usługi Azure Cosmos DB, ponieważ można bardzo szybko skalować klaster Spark do przetwarzania danych. Ma również rozbudowane możliwości przekształcania danych, które powinny być niezbędne dla projektu.

Klaster Spark można używać lokalnie lub poza platformą Azure. Jednak platforma Azure udostępnia usługi Databricks i HDInsight na potrzeby hostowania klastrów na platformie Azure.

Platforma Spark na platformie Azure

Jeśli chcesz uruchomić klaster Spark na platformie Azure, możesz wybrać spośród następujących usług:

  • Azure Databricks. Databricks to platforma analizy danych, która została zoptymalizowana pod kątem i zaimplementowana w chmurze platformy Azure. Obejmuje ona usługę Azure Databricks SQL Analytics do uruchamiania zapytań SQL w usłudze Data Lake. Obejmuje również obszar roboczy usługi Azure Databricks, który umożliwia współpracę nad przetwarzaniem danych przez inżynierów danych, analityków danych i inżynierów uczenia maszynowego. Obszar roboczy usługi Databricks obejmuje platformę Spark do przetwarzania danych.
  • Azure HDInsight. USŁUGA HDInsight to implementacja usługi Hadoop w chmurze platformy Azure i ułatwia użytkownikom przetwarzanie bardzo dużych ilości danych. Obejmuje platformę Apache Spark do przetwarzania danych w pamięci na klastrowanych węzłach komputerów.

Wymagania wstępne

Przed rozpoczęciem migracji z bazy danych Cassandra do usługi Azure Cosmos DB należy spełnić następujące wymagania:

  • W ramach subskrypcji platformy Azure musisz utworzyć konto usługi Azure Cosmos DB przy użyciu interfejsu API Cassandra.
  • Musisz mieć nazwę konta, punkt końcowy konta i klucz dla konta usługi Azure Cosmos DB.
  • Musisz utworzyć środowisko Spark przy użyciu jednej z opcji platformy Azure lub zewnętrznych opisanych powyżej.
  • Środowisko Spark musi zawierać łącznik Spark dla bazy danych Cassandra.
  • Środowisko Spark musi zawierać bibliotekę pomocnika usługi Azure Cosmos DB dla interfejsu API Cassandra.

Zarówno łącznik, jak i biblioteka pomocnika to pliki JAR, które można uzyskać z centralnego repozytorium Maven. Ten kod Scala pokazuje, jak skonfigurować te wymagania wstępne na platformie Spark:

import org.apache.spark.sql.cassandra._

//Include the Spark connector for Cassandra
import com.datastax.spark.connector._
import com.datastax.spark.connector.cql.CassandraConnector

//Include the Azure Cosmos DB helper library for Cassandra API
import com.microsoft.azure.cosmosdb.cassandra

//Configure the connection to Azure Cosmos DB Cassandra API
spark.conf.set("spark.cassandra.connection.host","YOUR_ACCOUNT_NAME.cassandra.cosmosdb.azure.com")
spark.conf.set("spark.cassandra.connection.port","10350")
spark.conf.set("spark.cassandra.connection.ssl.enabled","true")
spark.conf.set("spark.cassandra.auth.username","YOUR_ACCOUNT_NAME")
spark.conf.set("spark.cassandra.auth.password","YOUR_ACCOUNT_KEY")
spark.conf.set("spark.cassandra.connection.factory", "com.microsoft.azure.cosmosdb.cassandra.CosmosDbConnectionFactory")

//Configure Spark throughput properties
spark.conf.set("spark.cassandra.output.batch.size.rows", "1")
spark.conf.set("spark.cassandra.connection.connections_per_executor_max", "10")
spark.conf.set("spark.cassandra.output.concurrent.writes", "1000")
spark.conf.set("spark.cassandra.concurrent.reads", "512")
spark.conf.set("spark.cassandra.output.batch.grouping.buffer.size", "1000")
spark.conf.set("spark.cassandra.connection.keep_alive_ms", "600000000")

Kopiowanie danych między tabelami

Teraz możesz użyć platformy Spark do skopiowania danych z lokalnej bazy danych Cassandra do usługi Azure Cosmos DB. Ten kod Scala pokazuje, jak wykonać kopię. Pamiętaj, że możesz użyć rozbudowanych funkcji ETL platformy Spark, aby przekształcić dane, jeśli musisz dostosować jego format:

//Create a table in Cosmos DB
val cdbConnector = CassandraConnector(sc)
cdbConnector.withSessionDo(session => session.execute(
   "CREATE TABLE IF NOT EXISTS books_ks.
      books_copy(book_id TEXT PRIMARY KEY,book_author TEXT, book_name TEXT,book_pub_year INT,book_price FLOAT) 
      WITH cosmosdb_provisioned_throughput=4000;"))

//Read from the source table in the Cassandra DB on-premises
val readBooksDF = sqlContext
  .read
  .format("org.apache.spark.sql.cassandra")
  .options(Map( "table" -> "books", "keyspace" -> "books_ks"))
  .load

//Write data to the destination table in CosmosDB
readBooksDF.write
  .cassandraFormat("books_copy", "books_ks", "")
  .save()

//Validate the copy operation
sqlContext
  .read
  .format("org.apache.spark.sql.cassandra")
  .options(Map( "table" -> "books_copy", "keyspace" -> "books_ks"))
  .load
  .show

Aby uzyskać więcej informacji na temat korzystania z platformy Spark z usługą Databricks, zobacz Access Azure Cosmos DB Cassandra API data from Azure Databricks (Uzyskiwanie dostępu do danych interfejsu API Cassandra usługi Azure Cosmos DB z usługi Azure Databricks)

Aby uzyskać więcej informacji na temat korzystania z klastra usługi HDInsight, zobacz Access Azure Cosmos DB Cassandra API from Spark on YARN with HDInsight (Uzyskiwanie dostępu do interfejsu API Cassandra usługi Azure Cosmos DB z platformy Spark w usłudze YARN przy użyciu usługi HDInsight)

Aby uzyskać więcej informacji na temat operacji kopiowania tabeli platformy Spark, zobacz Operacje kopiowania tabel w interfejsie API Cassandra usługi Azure Cosmos DB z platformy Spark