الاتصال ب Azure Cosmos DB ل Apache Cassandra من Spark

ينطبق على: كاساندرا

هذه المقالة هي واحدة من بين سلسلة من المقالات حول Azure Cosmos DB لتكامل Apache Cassandra من Spark. تغطي المقالات الاتصال وعمليات لغة تعريف البيانات (DDL) وعمليات لغة معالجة البيانات الأساسية (DML) وAzure Cosmos DB المتقدمة لتكامل Apache Cassandra من Spark.

المتطلبات الأساسية

تبعيات الاتصالية

  • موصل Spark ل Cassandra: يستخدم موصل Spark للاتصال ب Azure Cosmos DB ل Apache Cassandra. تحديد واستخدام إصدار الموصل الموجود في مركز Maven المتوافق مع إصدارات Spark وScala لبيئتك من Spark. نوصي باستخدام بيئة تدعم Spark 3.2.1 أو إصدار أحدث، وإتاحة موصل spark في إحداثيات maven com.datastax.spark:spark-cassandra-connector-assembly_2.12:3.2.0. إذا كنت تستخدم Spark 2.x، نوصي باستخدام بيئة مع إصدار Spark 2.4.5، تستخدم موصل على إحداثيات maven com.datastax.spark:spark-cassandra-connector_2.11:2.4.3.

  • مكتبة مساعد Azure Cosmos DB لواجهة برمجة التطبيقات ل Cassandra: إذا كنت تستخدم إصدار Spark 2.x، فأنت بحاجة إلى مكتبة أخرى تسمى azure-cosmos-cassandra-spark-helper مع إحداثيات com.microsoft.azure.cosmosdb:azure-cosmos-cassandra-spark-helper:1.2.0 maven من Azure Cosmos DB من أجل معالجة تحديد المعدل. تحتوي هذه المكتبة على مصنع اتصال مخصص وفئات سياسة إعادة المحاولة.

    يتم تكوين سياسة إعادة المحاولة في Azure Cosmos DB لمعالجة استثناءات رمز حالة HTTP 429 ("Request Rate Large"). يترجم Azure Cosmos DB ل Apache Cassandra هذه الاستثناءات إلى أخطاء محملة بشكل زائد على بروتوكول Cassandra الأصلي، ويمكنك إعادة المحاولة مع التراجع. وبما أن Azure Cosmos DB يستخدم نموذجاً متقدماً من معدل النقل، يظهر طلب تقييد معدل الاستثناءات عند زيادة معدلات الدخول/الخروج. تحمي سياسة إعادة المحاولة مهام spark ضد طفرات البيانات التي تتجاوز بشكل مؤقت معدل النقل المخصص لحاويتك. إذا كنت تستخدم موصل Spark 3.x، فلن يلزم تطبيق هذه المكتبة.

    إشعار

    يمكن أن تحمي سياسة إعادة المحاولة وظائفك من spark ضد التجاوزات اللحظية فقط. إذا لم تكن وحدات طلب RUs تكفي لتشغيل حمل عملك، فبالتالي لن تكون سياسة إعادة المحاولة قابلة للتطبيق وستعيد فئة سياسة إعادة المحاولة رمي الاستثناء.

  • تفاصيل اتصال حساب Azure Cosmos DB: واجهة برمجة تطبيقات Azure الخاصة بك لاسم حساب Cassandra ونقطة نهاية الحساب والمفتاح.

تحسين تكوين معدل نقل موصل Spark

يعرض القسم التالي كل المعلمات ذات الصلة للتحكم في معدل النقل مستخدماً موصل Spark لـ Cassandra. من أجل تحسين المعلمات لتحقيق أقصى قدر من معدل النقل لـ Spark يجب مراعاة صحة تكوينات spark.cassandra.output.concurrent.writesوspark.cassandra.concurrent.readsوspark.cassandra.input.reads_per_sec وذك لتجنب الكثير من التحكم بالنطاق الترددي والتراجع (والذي بدوره يمكن أن يؤدي إلى انخفاض معدل النقل).

تعتمد القيمة المثلى لهذه التكوينات على أربعة عوامل:

  • مقدار تكوين معدل النقل (وحدات الطلب) للجدول الذي يتم استيعاب البيانات فيه.
  • عدد العمال في نظام مجموعتك من Spark.
  • عدد المنافذ المكونة لوظيفة Spark (والتي يمكن التحكم فيها باستخدام spark.cassandra.connection.connections_per_executor_max أوspark.cassandra.connection.remoteConnectionsPerExecutor بناءً على إصدار spark)
  • متوسط زمن الانتقال لكل طلب إلى Azure Cosmos DB، إذا كنت مجمعا في نفس مركز البيانات. افترض أن هذه القيمة 10 ملّي ثانية للكتابات و3 ملّي ثانية القراءات.

على سبيل المثال، إذا كان لدينا خمسة عمال وكانت قيمة spark.cassandra.output.concurrent.writes = 1، وقيمة spark.cassandra.connection.remoteConnectionsPerExecutor = 1، فسيكون لدينا خمسة عمال يُضيفون إلى الجدول في نفس الوقت، لكل منهم مؤشر ترابط. إذا كان الأمر يستغرق 10 ملّي ثانية لتنفيذ كتابة واحدة، فيمكننا إرسال 100 طلب (1000 ملّي ثانية مقسومة على 10) في الثانية الواحدة، لكل مؤشر ترابط. مع وجود 500 عامل، سيكون الناتج 500 عملية كتابة في الثانية. بمتوسط تكلفة خمس وحدات طلب (RUs) لكل عملية كتابة، سيحتاج الجدول المستهدف إلى توفير حد أدنى قدره 2500 وحدة طلب مُكوّنة (5 وحدات طلب × 500 عملية كتابة في الثانية).

زيادة عدد المنافذ يمكن أن يؤدي إلى زيادة عدد مؤشرات الترابط في مهمة بعينها، والتي بدورها يمكن أن تؤدي إلى زيادة معدل النقل. ومع ذلك، يمكن أن يكون الأثر الدقيق الناتج عن هذا الأمر متغيراً بناءً على الوظيفة، في حين أن التحكم في معدل النقل مع عدد المشغلين هو أمر محدد بشكل أكبر. يمكنك أيضاً تحديد التكلفة الدقيقة لطلب معين عن طريق جمع معلومات عنه للحصول رسوم طلب الوحدة (RU). سيساعدك هذا في أن تكون أكثر دقة عند توفير معدل النقل المتقدم لجدولك أو لمساحة المفاتيح. ألقي نظرة على مقالنا هنا لتتعرف على كيفية الحصول على رسوم وحدة الطلب على مستوى الطلب.

تحجيم معدل النقل في قاعدة البيانات

سيعمل موصل Cassandra Spark على إشباع معدل النقل في قاعدة بيانات Azure Cosmos بكفاءة. نتيجة لذلك، حتى مع إعادة المحاولة الفعالة، ستحتاج إلى التأكد من توفر معدل نقل (وحدات الطلب) مُكوّن على مستوى الجدول أو المساحة الرئيسية لمنع الأخطاء ذات الصلة بتقييد المعدل. لن يكفي الحد الأدنى من معدل إعداد بقيمة 400 وحدة طلب في جدول معين أو في المساحة الرئيسية. حتى في إعدادات تكوين الحد الأدنى من معدل النقل، يستطيع موصل Spark الكتابة بمعدل يصل إلى حوالي 6000 وحدة طلب أو أكثر.

إذا كان إعداد RU المطلوب لحركة البيانات باستخدام Spark أعلى مما هو مطلوب لعبء حالة عملك الثابت، يمكنك بسهولة تغير حجم معدل النقل صعوداً وهبوطاً بشكل منهجي في Azure Cosmos DB لتلبية احتياجات حمل عملك لفترة زمنية معينة. اقرأ مقالتنا حول المقياس المرن في واجهة برمجة التطبيقات ل Cassandra لفهم الخيارات المختلفة للتحجيم برمجيا وديناميكيا.

إشعار

تفترض التوجيهات أعلاه توزيع البيانات بشكل متجانس ومعقول. إذا كان لديك انحراف كبير في البيانات (أي، عدد كبير بشكل مفرط من القراءات/الكتابات إلى نفس قيمة مفتاح القسم)، فأنت لا تزال تواجه ازدحاماً، حتى إذا كان لديك عدد كبير منوحدات الطلب المتقدمة في جدولك. يتم تقسيم وحدات الطلب بالتساوي بين الأقسام المادية ويمكن أن يؤدي انحراف البيانات بشكل كبير إلى ازدحام الطلبات في قسم واحد.

معلمات تكوين معدل نقل موصل Spark

يسرد الجدول التالي Azure Cosmos DB لمعلمات تكوين معدل النقل الخاصة ب Apache Cassandra التي يوفرها الموصل. للحصول على قائمة مفصلة بجميع معلمات التكوين، راجع صفحة مرجع التكوين الخاصة بمستودع موصل spark Cassandra Connector GitHub.

اسم الخاصية القيمة الافتراضية الوصف
spark.cassandra.output.batch.size.rows 1 عدد الصفوف لكل دفعة واحدة. عين هذه المعلمة إلى 1. يتم استخدام هذه المعلمة لتحقيق معدل نقل أعلى لأحمال العمل الثقيلة.
spark.cassandra.connection.connections_per_executor_max (Spark 2.x) spark.cassandra.connection.remoteConnectionsPerExecutor (Spark 3.x) بلا الحد الأقصى لعدد الاتصالات لكل عقدة في كل منفذ. 10 * n يساوي 10 اتصالات لكل عقدة في نظام مجموعة n-node Cassandra. لذلك، إذا احتجت إلى خمسة اتصالات لكل عقدة في كل منفذ لنظام مجموعة Cassandra المكوّن من خمس عُقد، فيجب عليك تعيين هذا التكوين إلى 25. عدل هذه القيمة بناءً على درجة التماثل أو عدد المنافذ التي تكونها وظائفك من spark.
spark.cassandra.output.concurrent.writes 100 تعريف عدد عمليات الكتابة المتوازية التي يمكن أن تظهر في كل منفذ. وبما أنك عينت "batch.size.rows" إلى 1، تأكد من توسيع نطاق هذه القيمة وفقا لذلك. عدل هذه القيمة استناداً إلى درجة التماثل أو معدل النقل الذي تريد تحقيقه لحمل عملك.
spark.cassandra.concurrent.reads 512 عرف عدد القراءات المتوازية التي يمكن أن تظهر عند كل منفذ. عدل هذه القيمة بناءً على درجة التوازي أو معدل النقل الذي تريده تحقيقه لحمل عملك
spark.cassandra.output.throughput_mb_per_sec بلا عرف إجمالي معدل نقل الكتابة لكل منفذ. يمكن استخدام هذه المعلمة كحد أعلى لمعدل نقل وظيفة spark، وإسنادها إلى معدل النقل المقدم لحاوية Azure Cosmos DB.
spark.cassandra.input.reads_per_sec بلا تحديد إجمالي معدل نقل القراءة لكل منفذ. يمكن استخدام هذه المعلمة كحد أعلى لمعدل نقل وظيفة spark، وإسنادها إلى معدل النقل المقدم لحاوية Azure Cosmos DB.
spark.cassandra.output.batch.grouping.buffer.size 1000 تحديد عدد الدفعات لكل مهمة شرارة واحدة يمكن تخزينها في الذاكرة قبل إرسالها إلى واجهة برمجة التطبيقات ل Cassandra
spark.cassandra.connection.keep_alive_ms 60000 حدد الفترة الزمنية التي تتوفر خلالها الاتصالات غير المستخدمة.

اضبط معدل النقل ودرجة التوازي لهذه المعلمات استنادا إلى حمل العمل الذي تتوقعه لوظائف spark، ومعدل النقل الذي قمت بتوفيره لحساب Azure Cosmos DB الخاص بك.

الاتصال ب Azure Cosmos DB ل Apache Cassandra من Spark

cqlsh

توضح الأوامر التالية بالتفصيل كيفية الاتصال ب Azure Cosmos DB ل Apache Cassandra من cqlsh. وهذا مفيد للتحقق من الصحة أثناء تشغيل العينات في Spark.
From Linux/Unix/Mac:

export SSL_VERSION=TLSv1_2
export SSL_VALIDATE=false
cqlsh.py YOUR-COSMOSDB-ACCOUNT-NAME.cassandra.cosmosdb.azure.com 10350 -u YOUR-COSMOSDB-ACCOUNT-NAME -p YOUR-COSMOSDB-ACCOUNT-KEY --ssl

1. Azure Databricks

تتناول المقالة أدناه توفير نظام مجموعة Azure Databricks وتكوين نظام المجموعة للاتصال ب Azure Cosmos DB ل Apache Cassandra والعديد من نماذج دفاتر الملاحظات التي تغطي عمليات DDL وعمليات DML والمزيد.
العمل مع Azure Cosmos DB ل Apache Cassandra من Azure Databricks

2. Azure HDInsight-Spark

تتناول المقالة أدناه خدمة HDinsight-Spark والتزويد وتكوين نظام المجموعة للاتصال ب Azure Cosmos DB ل Apache Cassandra والعديد من نماذج دفاتر الملاحظات التي تغطي عمليات DDL وعمليات DML والمزيد.
العمل مع Azure Cosmos DB ل Apache Cassandra من Azure HDInsight-Spark

3. بيئة Spark بشكل عام

وبينما كانت الأقسام السابقة مخصصة لخدماتAzure Spark-based PaaS، فهذا القسم مخصص لتغطية بيئة Spark العامة. نذكر بالتفصيل تبعيات الموصل والاستيراد وتكوين جلسة عمل Spark. يغطي قسم "الخطوات التالية" عينات تعليمية برمجية لعمليات DDL وعمليات DML وأكثر من ذلك.

تبعيات الموصل:

  1. أضف إحداثيات maven للحصول على موصل Cassandra لـ Spark
  2. إضافة إحداثيات maven لمكتبة مساعد Azure Cosmos DB لواجهة برمجة التطبيقات ل Cassandra

الاستيراد:

import org.apache.spark.sql.cassandra._
//Spark connector
import com.datastax.spark.connector._
import com.datastax.spark.connector.cql.CassandraConnector

//CosmosDB library for multiple retry
import com.microsoft.azure.cosmosdb.cassandra

تكوين جلسة عمل spark:

 spark.cassandra.connection.host  YOUR_ACCOUNT_NAME.cassandra.cosmosdb.azure.com  
 spark.cassandra.connection.port  10350  
 spark.cassandra.connection.ssl.enabled  true  
 spark.cassandra.auth.username  YOUR_ACCOUNT_NAME  
 spark.cassandra.auth.password  YOUR_ACCOUNT_KEY  
// if using Spark 2.x
// spark.cassandra.connection.factory  com.microsoft.azure.cosmosdb.cassandra.CosmosDbConnectionFactory  

//Throughput-related...adjust as needed
 spark.cassandra.output.batch.size.rows  1  
// spark.cassandra.connection.connections_per_executor_max  10   // Spark 2.x
 spark.cassandra.connection.remoteConnectionsPerExecutor  10   // Spark 3.x
 spark.cassandra.output.concurrent.writes  1000  
 spark.cassandra.concurrent.reads  512  
 spark.cassandra.output.batch.grouping.buffer.size  1000  
 spark.cassandra.connection.keep_alive_ms  600000000 

الخطوات التالية

توضح المقالات التالية تكامل Spark مع Azure Cosmos DB ل Apache Cassandra.