Ćwiczenie: migrowanie obciążeń Bazy danych Cassandra do usługi Cosmos DB

Ukończone

W tym ćwiczeniu zmigrujesz dwa zestawy danych z bazy danych Cassandra do usługi Cosmos DB. Dane zostaną przeniesione na dwa sposoby. Najpierw wyeksportujesz dane z bazy danych Cassandra i za pomocą polecenia CQLSH COPY zaimportujesz bazę danych do usługi Cosmos DB. Następnie zmigrujesz dane przy użyciu platformy Spark. Sprawdzisz, czy migracja zakończyła się pomyślnie, uruchamiając zapytania względem danych przechowywanych w bazie danych Cosmos DB.

Scenariusz dla tego laboratorium dotyczy systemu handlu elektronicznego. Szczegóły klienta i zamówienia są rejestrowane w bazie danych Cassandra.

Ważne

Możesz wykonać te kroki we własnej subskrypcji osobistej lub po prostu postępować zgodnie z instrukcjami, aby dowiedzieć się, jak przeprowadzić migrację bazy danych.

Tworzenie grupy zasobów i sieci wirtualnej

  1. Za pomocą przeglądarki internetowej otwórz nową kartę i przejdź do witryny Azure Portal.

  2. W witrynie Azure Portal wybierz pozycję Grupy zasobów, a następnie wybierz pozycję +Dodaj.

  3. Na stronie Tworzenie grupy zasobów wprowadź następujące szczegóły:

    Właściwości Wartość
    Subskrypcja <Twoja subskrypcja>
    Grupa zasobów cassandradbrg
    Region Wybierz najbliższą lokalizację
  4. Wybierz pozycję Przejrzyj i utwórz , a następnie wybierz pozycję Utwórz. Poczekaj na utworzenie grupy zasobów.

  5. W lewym górnym menu w witrynie Azure Portal wybierz pozycję + Utwórz zasób.

  6. Na stronie Nowy w polu Wyszukaj w witrynie Marketplace wpisz Virtual Network i naciśnij klawisz Enter.

  7. Na stronie Sieć wirtualna wybierz pozycję Utwórz.

  8. Na stronie Podstawowe wprowadź następujące szczegóły, a następnie wybierz pozycję Dalej:Adresy IP:

    Właściwości Wartość
    Grupa zasobów cassandradbrg
    Nazwisko databasevnet
    Region Wybierz tę samą lokalizację, która została określona dla grupy zasobów
  9. Na stronie Adresy IP ustaw przestrzeń adresową IPv4 na 10.0.0.0/24.

  10. Wybierz domyślną podsieć, a następnie wybierz pozycję Usuń podsieć.

  11. Wybierz pozycję + Dodaj podsieć. W okienku Dodawanie podsieci ustaw domyślną nazwępodsieci, ustaw zakres adresów podsieci na 10.0.0.0/28, a następnie wybierz pozycję Dodaj.

  12. Na stronie Adresy IP wybierz pozycję Dalej: Zabezpieczenia.

  13. Na stronie Zabezpieczenia wprowadź następujące szczegóły, a następnie wybierz pozycję Przejrzyj i utwórz:

    Właściwości Wartość
    Włączanie usługi Azure Bastion Disabled
    Włączanie usługi Azure Firewall Disabled
    Włączanie usługi Azure DDoS Network Protection Disabled
  14. Na stronie Przeglądanie + tworzenie wybierz pozycję Utwórz, a następnie poczekaj na utworzenie sieci wirtualnej przed kontynuowaniem.

Tworzenie serwera bazy danych Cassandra

  1. W lewym górnym menu w witrynie Azure Portal wybierz pozycję + Utwórz zasób.

  2. W polu Wyszukaj w witrynie Marketplace wpisz Cassandra Certified by Bitnami, a następnie naciśnij klawisz Enter.

  3. Na stronie Cassandra Certified by Bitnami wybierz pozycję Utwórz.

  4. Na stronie Tworzenie maszyny wirtualnej wprowadź następujące szczegóły, a następnie wybierz pozycję Dalej: Dyski>.

    Właściwości Wartość
    Grupa zasobów cassandradbrg
    Virtual machine name cassandraserver
    Region Wybierz tę samą lokalizację, która została określona dla grupy zasobów
    Opcje dostępności Brak wymaganej nadmiarowości infrastruktury
    Image Cassandra Certified by Bitnami — Gen1
    Size Standard_D2_v2
    Authentication type Hasło
    Nazwa użytkownika azureuser
    Password Pa55w.rdPa55w.rd
    Potwierdź hasło Pa55w.rdPa55w.rd
  5. Na stronie Dyski zaakceptuj ustawienia domyślne, a następnie wybierz pozycję Dalej: Sieć>.

  6. Na stronie Sieć wprowadź następujące szczegóły, a następnie wybierz pozycję Dalej: Zarządzanie>.

    Właściwości Wartość
    Sieć wirtualna databasevnet
    Podsieć wartość domyślna (10.0.0.0/28)
    Publiczny adres IP (nowy) cassandraserver-ip
    Sieciowa grupa zabezpieczeń karty sieciowej Zaawansowany
    Konfigurowanie sieciowej grupy zabezpieczeń (nowy) cassandraserver-nsg
    Przyspieszona sieć Wył.
    Równoważenie obciążenia Nie
  7. Na stronie Zarządzanie zaakceptuj ustawienia domyślne, a następnie wybierz pozycję Dalej: Zaawansowane >.

  8. Na stronie Zaawansowane zaakceptuj ustawienia domyślne, a następnie wybierz pozycję Dalej: Tagi >.

  9. Na stronie Tagi zaakceptuj ustawienia domyślne, a następnie wybierz pozycję Dalej: Przejrzyj i utwórz >.

  10. Na stronie Przeglądanie + tworzenie potwierdź, że akceptujesz warunki, wprowadzając swoje dane kontaktowe.

  11. Na stronie walidacji wybierz pozycję Utwórz.

  12. Przed kontynuowaniem poczekaj na wdrożenie maszyny wirtualnej.

  13. W lewym górnym menu w witrynie Azure Portal wybierz pozycję Wszystkie zasoby.

  14. Na stronie Wszystkie zasoby wybierz pozycję cassandraserver-nsg.

  15. Na stronie cassandraserver-nsg w obszarze Ustawienia wybierz pozycję Reguły zabezpieczeń dla ruchu przychodzącego.

  16. Na stronie cassandraserver-nsg — Reguły zabezpieczeń dla ruchu przychodzącego wybierz pozycję + Dodaj.

  17. W okienku Dodawanie reguły zabezpieczeń dla ruchu przychodzącego wprowadź następujące szczegóły, a następnie wybierz pozycję Dodaj:

    Właściwości Wartość
    Lokalizacja źródłowa Dowolne
    Zakresy portów źródłowych *
    Element docelowy Dowolne
    Zakresy portów docelowych 9042
    Protokół Dowolne
    Akcja Zezwalaj
    Priorytet 1020
    Nazwisko Port Cassandra
    opis Port używany przez klientów do nawiązywania połączenia z usługą Cassandra

Pobieranie przykładowego kodu

  1. W lewym górnym menu w witrynie Azure Portal wybierz pozycję Wszystkie zasoby.

  2. Na stronie Wszystkie zasoby wybierz pozycję cassandraserver-ip.

  3. Na stronie cassandraserver-ip zanotuj adres IP.

  4. Na pasku narzędzi w górnej części witryny Azure Portal wybierz pozycję Cloud Shell.

  5. Jeśli zostanie wyświetlone pole komunikatu Nie masz zainstalowanego magazynu, wybierz pozycję Utwórz magazyn.

  6. Po uruchomieniu usługi Cloud Shell na liście rozwijanej powyżej okna usługi Cloud Shell wybierz pozycję Bash.

  7. W usłudze Cloud Shell uruchom następujące polecenie, aby pobrać przykładowy kod i dane:

    git clone https://github.com/MicrosoftLearning/DP-160T00A-Migrating-your-Database-to-Cosmos-DB migration-workshop-apps
    
  8. Przejdź do folderu migration-workshop-apps/Cassandra :

    cd ~/migration-workshop-apps/Cassandra
    
  9. Wprowadź następujące polecenia, aby skopiować skrypty konfiguracji i dane do maszyny wirtualnej cassandraserver . Zastąp <adres> IP wartością adresu IP cassandraserver-ip :

    scp *.* azureuser@<ip address>:~
    
  10. W wierszu polecenia wpisz tak , aby kontynuować nawiązywanie połączenia.

  11. W wierszu polecenia Hasło wprowadź hasło Pa55w.rdPa55w.rd

Wypełnianie bazy danych Cassandra

  1. Wpisz następujące polecenie, aby nawiązać połączenie z maszyną wirtualną cassandraserver . Określ adres IP maszyny wirtualnej cassandraserver :

    ssh azureuser@<ip address>
    
  2. W wierszu polecenia Hasło wprowadź hasło Pa55w.rdPa55w.rd

  3. Uruchom następujące polecenie, aby nawiązać połączenie z bazą danych Cassandra, utworzyć tabele wymagane przez to laboratorium i wypełnić je.

    bash upload.sh
    

    Skrypt tworzy dwie przestrzenie kluczy o nazwie customerinfo i orderinfo. Skrypt tworzy tabelę o nazwie customerdetails w przestrzeni kluczy customerinfo oraz dwie tabele o nazwie orderdetails i orderline w przestrzeni kluczy orderinfo .

  4. Uruchom następujące polecenie i zanotuj hasło domyślne w tym pliku:

    cat bitnami_credentials
    
  5. Uruchom powłokę zapytań Cassandra jako użytkownika cassandra (jest to nazwa domyślnego użytkownika cassandra utworzonego podczas konfigurowania maszyny wirtualnej). Zastąp <hasło hasłem> domyślnym z poprzedniego kroku:

    cqlsh -u cassandra -p <password>
    
  6. W wierszu polecenia cassandra@cqlsh uruchom następujące polecenie. To polecenie wyświetla pierwsze 100 wierszy z tabeli customerinfo.customerdetails :

    select *
    from customerinfo.customerdetails
    limit 100;
    

    Należy pamiętać, że dane są klastrowane według kolumny stateprovince , a następnie uporządkowane według identyfikatora customerid. To grupowanie umożliwia aplikacjom szybkie znajdowanie wszystkich klientów znajdujących się w tym samym regionie.

  7. Uruchom następujące polecenie: To polecenie wyświetla pierwsze 100 wierszy z tabeli orderinfo.orderdetails :

    select *
    from orderinfo.orderdetails
    limit 100;
    

    Tabela orderinfo.orderdetails zawiera listę zamówień złożonych przez każdego klienta. Zarejestrowane dane obejmują datę złożenia zamówienia oraz wartość zamówienia. Dane są klasterowane według kolumny customerid , dzięki czemu aplikacje mogą szybko znaleźć wszystkie zamówienia dla określonego klienta.

  8. Uruchom następujące polecenie: To polecenie wyświetla pierwsze 100 wierszy z tabeli orderinfo.orderline :

    select *
    from orderinfo.orderline
    limit 100;
    

    Ta tabela zawiera elementy dla każdego zamówienia. Dane są klasterowane według kolumny orderid i sortowane według wiersza zamówienia.

  9. Zamknij powłokę zapytań Cassandra:

    exit;
    
  10. W wierszu polecenia bitnami@cassandraserver wpisz następujące polecenie, aby odłączyć się od serwera Cassandra i wrócić do usługi Cloud Shell:

    exit
    
  11. Możesz zamknąć usługę Cloud Shell.

Tworzenie konta usługi Cosmos i bazy danych

  1. W lewym górnym menu w witrynie Azure Portal kliknij pozycję + Utwórz zasób.

  2. Na stronie Nowy w polu Wyszukaj w witrynie Marketplace wpisz Azure Cosmos DB, a następnie naciśnij klawisz Enter.

  3. Na stronie Azure Cosmos DB kliknij pozycję Utwórz.

  4. Na stronie Tworzenie konta usługi Azure Cosmos DB wprowadź następujące ustawienia, a następnie kliknij pozycję Przejrzyj i utwórz:

    Właściwości Wartość
    Subskrypcja Wybierz swoją subskrypcję
    Grupa zasobów cassandradbrg
    Nazwa konta cassandrannn, gdzie nnn jest liczbą losową wybraną przez Ciebie
    Interfejs API Cassandra
    Notesy Wył.
    Lokalizacja Określ tę samą lokalizację, która była używana dla serwera Cassandra i sieci wirtualnej
    Tryb wydajności Aprowizowana przepływność
    Zastosuj rabat w warstwie Bezpłatna Zastosuj
    Typ konta Nieprodukcyjne
    Nadmiarowość geograficzna Wyłącz
    Zapis w wielu regionach Wyłącz
    Strefy dostępności Wyłącz
  5. Na stronie walidacji kliknij pozycję Utwórz i poczekaj na wdrożenie konta usługi Cosmos DB.

  6. W okienku po lewej stronie kliknij pozycję Wszystkie zasoby.

  7. Na stronie Wszystkie zasoby kliknij konto usługi Cosmos DB (cassandrannn).

  8. Po lewej stronie w obszarze Ustawienia kliknij pozycję ciąg Połączenie ion i zanotuj następujące elementy:

    • Punkt kontaktu
    • Port
    • Nazwa użytkownika
    • Hasło podstawowe

Uwaga

Jeśli nie widzisz tych opcji połączenia, sprawdź, czy konto usługi Cosmos DB zostało utworzone do korzystania z interfejsu API Cassandra.

Migrowanie danych z bazy danych Cassandra do usługi Cosmos DB przy użyciu platformy Spark

W następnych krokach zmigrujesz te same dane, które zostały właśnie utworzone. Użyjesz platformy Spark z notesu usługi Azure Databricks.

Tworzenie klastra Spark

  1. W lewym górnym menu w witrynie Azure Portal wybierz pozycję + Utwórz zasób.

  2. W okienku Nowy w polu Wyszukaj w witrynie Marketplace wpisz Azure Databricks, a następnie naciśnij klawisz Enter.

  3. Na stronie Azure Databricks wybierz pozycję Utwórz.

  4. Na stronie Azure Databricks Service wprowadź następujące szczegóły, a następnie wybierz pozycję Przejrzyj i utwórz:

    Właściwości Wartość
    Grupa zasobów Korzystanie z istniejącej bazy danych cassandradbrg
    Nazwa obszaru roboczego CassandraMigration
    Lokalizacja Wybierz tę samą lokalizację, która została określona dla grupy zasobów
    Warstwa cenowa Standardowy
  5. Na stronie Przeglądanie i tworzenie wybierz pozycję Utwórz, a następnie poczekaj na wdrożenie usługi Databricks.

  6. W lewym górnym menu w witrynie Azure Portal wybierz pozycję Grupy zasobów, wybierz pozycję cassandradbrg, a następnie wybierz usługę CassandraMigration Databricks.

  7. Na stronie CassandraMigration wybierz pozycję Uruchom obszar roboczy.

  8. Na stronie Azure Databricks w obszarze Typowe zadania wybierz pozycję Nowy klaster.

  9. Na stronie Nowy klaster wprowadź następujące ustawienia, a następnie wybierz pozycję Utwórz klaster:

    Właściwości Wartość
    Nazwa klastra MigrationCluster
    Tryb klastra Standardowy
    Pula Brak
    Wersja środowiska uruchomieniowego usługi Databrick Środowisko uruchomieniowe: 5.5 LTS (Scala 2.11, Spark 2.4.3)
    Wersja języka Python 3
    Włączanie autoskalowania Wybrane
    Zakończenie po 60
    Typ procesu roboczego Zaakceptuj ustawienia domyślne
    Typ sterownika Taki sam jak proces roboczy
  10. Poczekaj na utworzenie klastra; stan elementu MigrationCluster jest zgłaszany jako Uruchomiony , gdy klaster jest gotowy. Ten proces potrwa kilka minut.

Tworzenie notesu na potrzeby migrowania danych

  1. W okienku po lewej stronie wybierz pozycję Klastry, a następnie pozycję MigrtationCluster.

    Screenshot showing how to install a new library

  2. W menu u góry wybierz kartę Biblioteki , a następnie wybierz pozycję Zainstaluj nowy.

  3. W oknie dialogowym Instalowanie biblioteki wprowadź następujące ustawienia, a następnie wybierz pozycję Zainstaluj:

    Właściwości Wartość
    Źródło biblioteki Maven
    Współrzędne com.datastax.spark:spark-cassandra-connector_2.11:2.4.3
    Repozytorium Pozostaw puste.
    Wykluczenia Pozostaw puste.

    Ta biblioteka zawiera klasy nawiązywania połączenia z bazą danych Cassandra z platformy Spark.

  4. Po zainstalowaniu biblioteki łączników wybierz pozycję Zainstaluj bibliotekę.

  5. W oknie dialogowym Instalowanie biblioteki wprowadź następujące ustawienia, a następnie wybierz pozycję Zainstaluj:

    Właściwości Wartość
    Źródło biblioteki Maven
    Współrzędne com.microsoft.azure.cosmosdb:azure-cosmos-cassandra-spark-helper:1.2.0
    Repozytorium Pozostaw puste.
    Wykluczenia Pozostaw puste.

    Ta biblioteka zawiera klasy nawiązywania połączenia z usługą Cosmos DB z platformy Spark.

  6. W okienku po lewej stronie wybierz pozycję Azure Databricks.

  7. Na stronie Azure Databricks w obszarze Typowe zadania wybierz pozycję Nowy notes.

  8. W oknie dialogowym Tworzenie notesu wprowadź następujące ustawienia, a następnie wybierz pozycję Utwórz:

    Właściwości Wartość
    Imię i nazwisko/nazwa MigrateData
    Język Scala
    Klaster MigrationCluster

Połączenie do usługi Cosmos DB i tworzenie tabel

  1. W pierwszej komórce notesu wprowadź następujący kod:

    // Import libraries
    
    import org.apache.spark.sql.cassandra._
    import org.apache.spark.sql._
    import org.apache.spark._
    import com.datastax.spark.connector._
    import com.datastax.spark.connector.cql.CassandraConnector
    import com.microsoft.azure.cosmosdb.cassandra
    

    Ten kod importuje typy wymagane do nawiązania połączenia z usługami Cosmos DB i Cassandra z platformy Spark.

  2. Na pasku narzędzi po prawej stronie komórki wybierz strzałkę listy rozwijanej, a następnie wybierz pozycję Dodaj komórkę poniżej.

  3. W nowej komórce wprowadź następujący kod. Określ punkt kontaktowy, nazwę użytkownika i hasło podstawowe z wartościami konta usługi Cosmos DB (te wartości zostały zarejestrowane w poprzednim ćwiczeniu):

    // Configure connection parameters for Cosmos DB
    
    val cosmosDBConf = new SparkConf()
        .set("spark.cassandra.connection.host", "<contact point>")
        .set("spark.cassandra.connection.port", "10350")
        .set("spark.cassandra.connection.ssl.enabled", "true")
        .set("spark.cassandra.auth.username", "<username>")
        .set("spark.cassandra.auth.password", "<primary password>")
        .set("spark.cassandra.connection.factory",
            "com.microsoft.azure.cosmosdb.cassandra.CosmosDbConnectionFactory")
        .set("spark.cassandra.output.batch.size.rows", "1")
        .set("spark.cassandra.connection.connections_per_executor_max", "1")
        .set("spark.cassandra.output.concurrent.writes", "1")
        .set("spark.cassandra.concurrent.reads", "1")
        .set("spark.cassandra.output.batch.grouping.buffer.size", "1")
        .set("spark.cassandra.connection.keep_alive_ms", "600000000")
    

    Ten kod ustawia parametry sesji platformy Spark w celu nawiązania połączenia z kontem usługi Cosmos DB

  4. Dodaj kolejną komórkę poniżej bieżącej i wprowadź następujący kod:

    // Create keyspaces and tables
    
    val cosmosDBConnector = CassandraConnector(cosmosDBConf)
    
    cosmosDBConnector.withSessionDo(session => session.execute("CREATE KEYSPACE customerinfo WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1}"))
    cosmosDBConnector.withSessionDo(session => session.execute("CREATE TABLE customerinfo.customerdetails (customerid int, firstname text, lastname text, email text, stateprovince text, PRIMARY KEY ((stateprovince), customerid)) WITH cosmosdb_provisioned_throughput=10000"))
    
    cosmosDBConnector.withSessionDo(session => session.execute("CREATE KEYSPACE orderinfo WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1}"))
    cosmosDBConnector.withSessionDo(session => session.execute("CREATE TABLE orderinfo.orderdetails (orderid int, customerid int, orderdate date, ordervalue decimal, PRIMARY KEY ((customerid), orderdate, orderid)) WITH cosmosdb_provisioned_throughput=10000"))
    
    cosmosDBConnector.withSessionDo(session => session.execute("CREATE TABLE orderinfo.orderline (orderid int, orderline int, productname text, quantity smallint, orderlinecost decimal, PRIMARY KEY ((orderid), productname, orderline)) WITH cosmosdb_provisioned_throughput=10000"))
    

    Te instrukcje ponownie kompilują przestrzenie kluczy orderinfo i customerinfo wraz z tabelami. Każda tabela jest aprowizowana przy użyciu 10000 RU/s przepływności.

Połączenie do bazy danych Cassandra i pobierania danych

  1. W notesie dodaj kolejną komórkę i wprowadź następujący kod. Zastąp adres IP adresem> IP maszyny wirtualnej i określ hasło pobrane wcześniej z pliku bitnami_credentials:<

    // Configure connection parameters for the source Cassandra database
    
    val cassandraDBConf = new SparkConf()
        .set("spark.cassandra.connection.host", "<ip address>")
        .set("spark.cassandra.connection.port", "9042")
        .set("spark.cassandra.connection.ssl.enabled", "false")
        .set("spark.cassandra.auth.username", "cassandra")
        .set("spark.cassandra.auth.password", "<password>")
        .set("spark.cassandra.connection.connections_per_executor_max", "10")
        .set("spark.cassandra.concurrent.reads", "512")
        .set("spark.cassandra.connection.keep_alive_ms", "600000000")
    
  2. Dodaj kolejną komórkę i wprowadź następujący kod:

    // Retrieve the customer and order data from the source database
    
    val cassandraDBConnector = CassandraConnector(cassandraDBConf)
    var cassandraSparkSession = SparkSession
        .builder()
        .config(cassandraDBConf)
        .getOrCreate()
    
    val customerDataframe = cassandraSparkSession
        .read
        .format("org.apache.spark.sql.cassandra")
        .options(Map( "table" -> "customerdetails", "keyspace" -> "customerinfo"))
        .load
    
    println("Read " + customerDataframe.count + " rows")
    
    val orderDetailsDataframe = cassandraSparkSession
        .read
        .format("org.apache.spark.sql.cassandra")
        .options(Map( "table" -> "orderdetails", "keyspace" -> "orderinfo"))
        .load
    
    println("Read " + orderDetailsDataframe.count + " rows")
    
    val orderLineDataframe = cassandraSparkSession
        .read
        .format("org.apache.spark.sql.cassandra")
        .options(Map( "table" -> "orderline", "keyspace" -> "orderinfo"))
        .load
    
    println("Read " + orderLineDataframe.count + " rows")
    

    Ten blok kodu pobiera dane z tabel w bazie danych Cassandra do obiektów ramki danych Platformy Spark. Kod wyświetla liczbę wierszy odczytanych z każdej tabeli.

Wstawianie danych do tabel usługi Cosmos DB i uruchamianie notesu

  1. Dodaj końcową komórkę i wprowadź następujący kod:

    // Write the customer data to Cosmos DB
    
    val cosmosDBSparkSession = SparkSession
        .builder()
        .config(cosmosDBConf)
        .getOrCreate()
    
    // Connect to the existing table from Cosmos DB
    var customerCopyDataframe = cosmosDBSparkSession
        .read
        .format("org.apache.spark.sql.cassandra")
        .options(Map( "table" -> "customerdetails", "keyspace" -> "customerinfo"))
        .load
    
    // Merge the results from the Cassandra database into the DataFrame
    customerCopyDataframe = customerCopyDataframe.union(customerDataframe)
    
    // Write the results back to Cosmos DB
    customerCopyDataframe.write
        .format("org.apache.spark.sql.cassandra")
        .options(Map( "table" -> "customerdetails", "keyspace" -> "customerinfo"))
        .mode(org.apache.spark.sql.SaveMode.Append)
        .save()
    
    // Write the order data to Cosmos DB, using the same strategy
    var orderDetailsCopyDataframe = cosmosDBSparkSession
        .read
        .format("org.apache.spark.sql.cassandra")
        .options(Map( "table" -> "orderdetails", "keyspace" -> "orderinfo"))
        .load
    
    orderDetailsCopyDataframe = orderDetailsCopyDataframe.union(orderDetailsDataframe)
    
    orderDetailsCopyDataframe.write
        .format("org.apache.spark.sql.cassandra")
        .options(Map( "table" -> "orderdetails", "keyspace" -> "orderinfo"))
        .mode(org.apache.spark.sql.SaveMode.Append)
        .save()
    
    var orderLineCopyDataframe = cosmosDBSparkSession
        .read
        .format("org.apache.spark.sql.cassandra")
        .options(Map( "table" -> "orderline", "keyspace" -> "orderinfo"))
        .load
    
    orderLineCopyDataframe = orderLineCopyDataframe.union(orderLineDataframe)
    
    orderLineCopyDataframe.write
        .format("org.apache.spark.sql.cassandra")
        .options(Map( "table" -> "orderline", "keyspace" -> "orderinfo"))
        .mode(org.apache.spark.sql.SaveMode.Append)
        .save()
    

    Ten kod tworzy kolejną ramkę danych dla każdej z tabel w bazie danych Cosmos DB. Każda ramka danych będzie początkowo pusta. Następnie kod używa funkcji union do dołączania danych z odpowiedniej ramki danych dla każdej z tabel Cassandra. Na koniec kod zapisuje dołączona ramka danych z powrotem do tabeli usługi Cosmos DB.

    Interfejs API ramki danych to bardzo zaawansowana abstrakcja zapewniana przez platformę Spark i jest bardzo wydajną strukturą do bardzo szybkiego transportu dużych ilości danych.

  2. Na pasku narzędzi w górnej części notesu wybierz pozycję Uruchom wszystko. Zostaną wyświetlone komunikaty wskazujące, że klaster jest uruchamiany. Gdy klaster jest gotowy, notes uruchamia kod w każdej komórce po kolei. Zobaczysz kolejne komunikaty wyświetlane poniżej każdej komórki. Operacje transferu danych, które odczytują i zapisują ramki danych, są wykonywane jako zadania platformy Spark. Możesz rozwinąć zadanie, aby wyświetlić postęp. Kod w każdej komórce powinien zostać ukończony pomyślnie bez wyświetlania żadnych komunikatów o błędach.

Sprawdź, czy migracja danych zakończyła się pomyślnie

  1. Wróć do konta usługi Cosmos DB w witrynie Azure Portal.
  2. Wybierz pozycję Eksplorator danych.
  3. W okienku Eksplorator danych rozwiń przestrzeń kluczy customerinfo, rozwiń tabelę customerdetails, a następnie wybierz pozycję Wiersze. Powinny zostać wyświetlone pierwsze 100 wierszy. Jeśli przestrzeń kluczy nie jest wyświetlana w okienku Eksplorator danych, wybierz pozycję Odśwież , aby zaktualizować ekran.
  4. Rozwiń przestrzeń kluczy orderinfo, rozwiń tabelę orderdetails, a następnie wybierz pozycję Wiersze. Dla tej tabeli powinny być również wyświetlane pierwsze 100 wierszy.
  5. Na koniec rozwiń tabelę orderline , a następnie wybierz pozycję Wiersze. Sprawdź, czy zostanie wyświetlonych pierwszych 100 wierszy dla tej tabeli.

Pomyślnie przeprowadzono migrację bazy danych Cassandra do usługi Cosmos DB przy użyciu platformy Spark z notesu usługi Databricks.

Czyszczenie utworzonych zasobów

Ważne

Jeśli wykonano te kroki we własnej subskrypcji osobistej, możesz usunąć zasoby pojedynczo lub usunąć grupę zasobów, aby usunąć cały zestaw zasobów. Zasoby pozostawione w związku z uruchomieniem generują koszty.

  1. Za pomocą usługi Cloud Shell uruchom następujące polecenie, aby usunąć grupę zasobów:
az group delete --name cassandradbrg