Cassandra'da Cosmos DB'ye veri geçişi

Tamamlandı

Azure Cosmos DB'de Cassandra API veritabanını planlayıp oluşturduktan sonraki aşama, verileri şirket içi sunucunuzdan bu veritabanına geçirmektir.

Video kamerası üreticinizde, hiçbir değişiklik olmadan ve web uygulaması için kodlama olmadan verileri Azure'a geçirmek istiyorsunuz. En uygun veri geçişini seçmeniz ve yürütmeniz istendi.

Burada veritabanı geçişi yürütmeyi öğreneceksiniz. CQLSH COPY Yerel verileri Azure Cosmos DB'ye taşımak için komutunu veya Spark'ı kullanabilirsiniz.

CQLSH nedir?

Cassandra Sorgu Dili (CQL), yöneticilerin ve geliştiricilerin Cassandra Veritabanındaki verileri tanımlamak, veritabanını doldurmak ve buna karşı sorgu çalıştırmak için kullandığı yerel sorgu dilidir. CQL, yapılandırılmış veritabanları için SQL'in Cassandra eşdeğeridir, ancak Cassandra'da bulduğunuz yarı yapılandırılmış, tablosal verilerle çalışmayı kolaylaştıran özelliklere sahiptir.

CQLSH, Azure Cosmos DB'de Cassandra veritabanında veya Cassandra API veritabanında CQL komutlarını çalıştırmak için kullanabileceğiniz bir komut satırı aracıdır. Şirket içi veritabanınızdaki verileri ayıklamak ve Cosmos DB'ye aktarmak için kullanabileceğiniz etkileşimli COPY bir komut içerir.

Apache Spark nedir?

Apache Spark, bilgisayar kümelerinde bilgi işlem görevlerini çalıştırmaya yönelik genel amaçlı bir çerçevedir. Büyük miktarlardaki verileri işleyecek ve görevleri kümenin üyeleri arasında dağıtarak ve bellekteki işlemleri işleyerek hızlı bir şekilde işleyecek şekilde tasarlanmıştır.

Spark açık kaynaktır ve genellikle Ayıklama, Dönüştürme ve Yükleme (ETL) iş yükleri, gerçek zamanlı veri işleme ve bekleyen büyük miktarlardaki verilerin toplu işlenmesi için kullanılır. Ayrıca makine öğrenmesi, graf işleme ve SQL işlemleri gerçekleştirebilen uzantılara da sahiptir.

Bir veritabanını Azure Cosmos DB'deki Cassandra API veritabanlarına geçirmek için Spark, CQLSH'den çok daha esnektir. Ancak geçişleri ayarlamak ve yürütmek daha fazla çalışma gerektirebilir.

Spark önerilen yöntemdir, ancak Spark ve Cassandra sürümleri değiştikçe daha karmaşık olabilir.

CQLSH KOPYASı

Cassandra veritabanındaki verileri dışarı aktarma

Başlangıçta SSH kullanarak Azure Cloud Shell'den Cassandra veritabanınıza bağlanın. Sunucuya bağlandıktan sonra aşağıdaki adımları gerçekleştirin:

  1. CQLSH'yi başlatmak için aşağıdaki komutu çalıştırın:

    cqlsh -u <your username> -p <your password>
    
  2. Geçirmek istediğiniz her tablo için aşağıdaki komutu çalıştırın:

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

komutu, tablodaki tüm verileri içeren bir .csv dosyası oluşturur.

Verileri Cosmos DB'ye aktarma

CQLSH COPY kullanarak verileri geçirmek için her tablo için aşağıdaki adımları gerçekleştirin:

  1. Azure portalında Cosmos DB hesabınıza Bağlan.

  2. Ayarlar Bağlan Ion Dizesi'ne tıklayın ve BİRİnCİl BAĞLANTI DIZESİ'ni kopyalayın.

  3. Birincil bağlantı dizesi ile CQLSH'de oturum açın.

  4. COPY komutunu kullanarak yerel verileri Cosmos DB'ye kopyalayın:

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

Dekont

Anahtar bölmesi için anahtar alanınızı belirtin, tablo için, tablo adınızı belirtin ve tablo ve veri adı için dışarı aktarma sırasında belirttiğiniz tablo ve veri adını belirtin.

Spark ile geçiş

Apache Spark, çok büyük kapasitelere ölçeği genişletmek için işlem görevlerini birden çok sunucuya veya kapsayıcıya dağıtan bir veri işleme çerçevesidir. Spark kümesini verileri çok hızlı bir şekilde işlemek üzere ölçeklendirebileceğinizden, Azure Cosmos DB Cassandra API'sine aktarabileceğiniz çok miktarda veriniz olduğunda geçiş için kullanmak için ideal bir araçtır. Ayrıca, projeniz için gerekli olması gereken verileri dönüştürmeye yönelik kapsamlı özelliklere de sahiptir.

Spark kümesini şirket içinde veya Azure dışında kullanabilirsiniz. Ancak Azure, Azure'da küme barındırmak için Databricks ve HDInsight hizmetleri sağlar.

Azure'da Spark

Azure'da spark kümesi çalıştırmak istiyorsanız şu hizmetlerden birini seçebilirsiniz:

  • Azure Databricks. Databricks, Azure bulutu için iyileştirilmiş ve uygulanan bir veri analizi platformudur. Bir veri gölünde SQL sorguları çalıştırmak için Azure Databricks SQL Analytics'i içerir. Ayrıca veri mühendisleri, veri bilimciler ve makine öğrenmesi mühendisleri tarafından veri işleme konusunda işbirliğine olanak tanıyan Azure Databricks Çalışma Alanı da içerir. Databricks Çalışma Alanı, verileri işlemek için Spark'ı içerir.
  • Azure HDInsight. HDInsight, Azure bulutunda Hadoop'un bir uygulamasıdır ve kullanıcıların çok büyük miktarlardaki verileri işlemesine yardımcı olur. Kümelenmiş bilgisayar düğümlerinde bellek içi veri işleme için Apache Spark içerir.

Önkoşullar

Cassandra veritabanından Azure Cosmos DB'ye geçişe başlamadan önce aşağıdaki gereksinimleri karşılamanız gerekir:

  • Azure aboneliğinizde Cassandra API'siyle bir Azure Cosmos DB hesabı oluşturmuş olmanız gerekir.
  • Azure Cosmos DB hesabının hesap adına, hesap uç noktasına ve anahtarına sahip olmanız gerekir.
  • Yukarıda açıklanan Azure veya dış seçeneklerden birini kullanarak bir Spark ortamı oluşturmuş olmanız gerekir.
  • Spark ortamı Cassandra için Spark bağlayıcısını içermelidir.
  • Spark ortamı Cassandra API için Azure Cosmos DB yardımcı kitaplığını içermelidir.

Hem bağlayıcı hem de yardımcı kitaplık, Maven merkezi deposundan edinebileceğiniz JAR dosyalarıdır. Bu Scala kodu Spark'ta bu önkoşulların nasıl yapılandırılır gösterir:

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")

Tablolar arasında veri kopyalama

Artık Spark'ı kullanarak şirket içi Cassandra veritabanından Azure Cosmos DB'ye veri kopyalayabilirsiniz. Bu Scala kodu, kopyanın nasıl yürütüleceklerini gösterir. Spark'ın biçimini uyarlamanız gerekirse verileri dönüştürmek için kapsamlı ETL özelliklerini kullanabileceğinizi unutmayın:

//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

Spark'ı Databricks ile kullanma hakkında daha fazla bilgi için bkz . Azure Databricks'ten Azure Cosmos DB Cassandra API verilerine erişme

HDInsight kümesi kullanma hakkında daha fazla bilgi için bkz . HDInsight ile YARN üzerinde Spark'tan Azure Cosmos DB Cassandra API'lerine erişme

Spark tablo kopyalama işlemi hakkında daha fazla bilgi için bkz . Spark'tan Azure Cosmos DB Cassandra API'sinde tablo kopyalama işlemleri