شعار زيفيرنت

تعامل مع البيانات المرجعية سريعة التغير في مهمة ETL المتدفقة من AWS Glue

التاريخ:

دفق وظائف ETL in غراء AWS يمكن أن تستهلك البيانات من مصادر التدفق مثل أمازون كينسيس و اباتشي كافكاوتنظيف وتحويل تدفقات البيانات هذه أثناء الطيران ، وكذلك تحميل النتائج باستمرار خدمة تخزين أمازون البسيطة (Amazon S3) بحيرات البيانات أو مستودعات البيانات أو مخازن البيانات الأخرى.

تشكل الطبيعة الدائمة لوظائف البث تحديًا فريدًا عند التعامل مع البيانات المرجعية سريعة التغير والتي تُستخدم لإثراء تدفقات البيانات ضمن مهمة AWS Glue المتدفقة ETL. تعالج AWS Glue البيانات في الوقت الفعلي من الأمازون كينسيس دفق البيانات باستخدام دفعات صغيرة. ال foreachbatch الطريقة المستخدمة لمعالجة الدُفعات الصغيرة تتعامل مع تدفق بيانات واحد.

يقترح هذا المنشور حلاً لإثراء تدفق البيانات ببيانات مرجعية متغيرة باستمرار في مهمة ETL المتدفقة من AWS Glue.

يمكنك إثراء تدفقات البيانات بتغيير البيانات المرجعية بالطرق التالية:

  • اقرأ مجموعة البيانات المرجعية مع كل دفعة صغيرة ، مما قد يتسبب في قراءات زائدة عن الحاجة وزيادة في طلبات القراءة. هذا النهج مكلف وغير فعال ولم يتم تناوله في هذا المنشور.
  • صمم طريقة لإخبار وظيفة تدفق AWS Glue بأن البيانات المرجعية قد تغيرت وقم بتحديثها عند الحاجة فقط. هذا النهج فعال من حيث التكلفة ومتاح للغاية. نوصي باستخدام هذا النهج.

حل نظرة عامة

يستخدم هذا المنشور DynamoDB Streams لالتقاط التغييرات على البيانات المرجعية ، كما هو موضح في الرسم التخطيطي للهندسة المعمارية التالي. لمزيد من المعلومات حول DynamoDB Streams ، راجع تستخدم تيارات DynamoDB حالات وأنماط تصميم.

يحتوي سير العمل على الخطوات التالية:

  1. يقوم المستخدم أو التطبيق بتحديث أو إنشاء عنصر جديد في جدول DynamoDB.
  2. يتم استخدام DynamoDB Streams لتحديد التغييرات في البيانات المرجعية.
  3. يتم استدعاء دالة Lambda في كل مرة يحدث فيها تغيير في البيانات المرجعية.
  4. تقوم وظيفة Lambda بالتقاط الحدث الذي يحتوي على السجل الذي تم تغييره ، وإنشاء "ملف التغيير" ووضعه في حاوية Amazon S3.
  5. تم تصميم مهمة AWS Glue لمراقبة التدفق لهذه القيمة في كل دفعة صغيرة. في اللحظة التي ترى فيها علامة التغيير ، تبدأ AWS Glue في تحديث بيانات DynamoDB قبل معالجة أي سجلات أخرى في الدفق.

هذا المنشور مصحوب بامتداد تكوين سحابة AWS نموذج يُنشئ الموارد كما هو موضح في بنية الحل:

  • تم تسمية جدول DynamoDB ProductPriority مع تحميل عدد قليل من العناصر
  • اسم دلو S3 demo-bucket-<AWS AccountID>
  • وظيفتان من وظائف Lambda:
    • demo-glue-script-creator-lambda
    • demo-reference-data-change-handler
  • تم تسمية دفق بيانات Kinesis SourceKinesisStream
  • تسمى قاعدة بيانات AWS Glue Data Catalog my-database
  • جدولين في كتالوج البيانات
  • تسمى مهمة AWS Glue demo-glue-job-<AWS AccountID>. يمكن العثور على الكود الخاص بوظيفة AWS Glue عبر هذا الرابط.
  • المستوى الثاني⁧⁩ إدارة الهوية والوصول AWS أدوار (IAM):
    • دور لوظائف Lambda للوصول إلى Kinesis و Amazon S3 و DynamoDB Streams
    • دور لوظيفة AWS Glue للوصول إلى Kinesis و Amazon S3 و DynamoDB
  • An مولد بيانات Amazon Kinesis (KDG) مع مستخدم تم إنشاؤه من خلاله أمازون كوجنيتو لتوليد دفق بيانات عينة

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

في هذا الدليل ، يجب أن يكون لديك المتطلبات الأساسية التالية:

  • حساب AWS
  • يجب أن يكون لدى مستخدم IAM أذونات لإنشاء الأدوار المطلوبة
  • إذن لإنشاء حزمة CloudFormation والخدمات التي قمنا بتفصيلها

أنشئ موارد باستخدام AWS CloudFormation

لنشر الحل ، أكمل الخطوات التالية:

  1. اختار قم بتشغيل Stack:
  2. قم بإعداد تجمع مستخدم Amazon Cognito واختبر ما إذا كان بإمكانك الوصول إلى عنوان URL الخاص بـ KDG المحدد في علامة تبويب إخراج المكدس. علاوة على ذلك ، تحقق مما إذا كان يمكنك تسجيل الدخول إلى KDG باستخدام بيانات الاعتماد المقدمة أثناء إنشاء المكدس.

يجب أن يكون لديك الآن الموارد المطلوبة المتوفرة في حساب AWS الخاص بك.

  1. تحقق من هذه القائمة بالموارد الموجودة في قسم الإخراج بمكدس CloudFormation.

بيانات العينة

تم تحميل بيانات مرجعية نموذجية بالفعل في مخزن البيانات المرجعية. تُظهر لقطة الشاشة التالية مثالاً.

priority قد تتغير القيمة بشكل متكرر بناءً على الوقت من اليوم أو يوم الأسبوع أو عوامل أخرى تدفع الطلب والعرض.

الهدف هو استيعاب هذه التغييرات على البيانات المرجعية بسلاسة في خط الأنابيب.

توليد تيار عشوائي من الأحداث في Kinesis

بعد ذلك ، نقوم بمحاكاة دفق عينة من البيانات في Kinesis. للحصول على تعليمات مفصلة ، انظر اختبر حل تدفق البيانات الخاص بك مع Amazon Kinesis Data Generator الجديد. في هذا المنشور ، نحدد بنية بيانات الطلبات المحاكاة باستخدام قالب ذي معلمات.

  1. في وحدة تحكم KDG ، اختر المنطقة التي يوجد بها تدفق Kinesis المصدر.
  2. اختر تدفق التسليم الخاص بك.
  3. أدخل القالب التالي في حقل قالب السجل:
    { "dish": "{{random.arrayElement(["pizza","burger","salad","donut","ice-cream"])}}"
    ,"cost": {{random.number({"min":10,"max":150})}}
    ,"customer_id":{{random.number({"min":1,"max":10000})}}
    }

  4. اختار نموذج الاختبار، ثم اختر إرسال البيانات.

يجب أن تبدأ KDG في إرسال دفق من الطلبات التي تم إنشاؤها عشوائيًا إلى دفق بيانات Kinesis.

قم بتشغيل وظيفة تدفق AWS Glue

أنشأت حزمة CloudFormation مهمة AWS Glue تقرأ من تدفق بيانات Kinesis عبر جدول كتالوج البيانات ، وتنضم إلى البيانات المرجعية في DynamoDB ، وتكتب النتيجة في حاوية S3. لتشغيل الوظيفة ، أكمل الخطوات التالية:

  1. في وحدة تحكم AWS Glue ، تحت ETL في جزء التنقل ، اختر المشــاريــع.
  2. حدد الوظيفة demo-glue-job-<AWS AccountID>.
  3. على الإجراءات القائمة، اختر شغل الوظيفة.

بالإضافة إلى الإثراء ، تتضمن الوظيفة فحصًا إضافيًا يراقب بادئة Amazon S3 لملف "تغيير العلامة". يتم إنشاء هذا الملف بواسطة وظيفة Lambda ، والتي يتم استدعاؤها بواسطة دفق DynamoDB كلما كان هناك تحديث أو عنصر مرجعي جديد.

تحقق من البيانات المستهدفة في Amazon S3

فيما يلي لقطة شاشة للبيانات التي يتم تحميلها في الوقت الفعلي في ملف item=burger تقسيم. تم تعيين الأولوية على متوسط ​​في البيانات المرجعية ، وتنتقل الأوامر إلى القسم المقابل.

تحديث البيانات المرجعية

الآن نقوم بتحديث الأولوية لـ burgers إلى high في جدول DynamoDB من خلال وحدة التحكم أثناء تدفق الطلبات في خط الأنابيب.

استخدم الأمر التالي لإجراء التحديث من خلال أمازون كلاودشيل. قم بتغيير المنطقة إلى القيمة المناسبة.

aws dynamodb update-item --table-name "ProductPriority" --key '{"item":{"S":"burger"}, "price":{"N":"100"}}' --update-expression "SET priority = :s" --expression-attribute-values '{":s": {"S": "high"}}' --return-values ALL_NEW --region us-east-1

تحقق من تحديث البيانات.

انتقل إلى مجلد S3 الهدف لتأكيد المحتويات. كان من المفترض أن تبدأ مهمة AWS Glue في إرسال طلبات البرغر إلى ملف high تقسيم.

يتم استدعاء وظيفة Lambda بواسطة تيار DynamoDB ويضع ملف "Change Flag" في حاوية Amazon S3. تعمل مهمة AWS Glue على تحديث البيانات المرجعية وحذف الملف لتجنب عمليات التحديث المتكررة.

استخدام هذا النمط للبيانات المرجعية في Amazon S3

إذا تم تخزين البيانات المرجعية في حاوية S3 ، فأنشئ ملف إشعار حدث Amazon S3 يحدد التغييرات على البادئة حيث يتم تخزين البيانات المرجعية. يستدعي إشعار الحدث وظيفة Lambda التي تُدرج علامة التغيير في دفق البيانات.

تنظيف

لتجنب تكبد رسوم في المستقبل ، احذف الموارد. يمكنك القيام بذلك عن طريق حذف مكدس CloudFormation.

وفي الختام

في هذا المنشور ، ناقشنا طرق التعامل مع البيانات المرجعية سريعة التغير والمخزنة في DynamoDB أو Amazon S3. أظهرنا حالة استخدام بسيطة تنفذ هذا النمط.

لاحظ أن DynamoDB Streams يكتب تسجيلات البث في الوقت الفعلي تقريبًا. عند تصميم الحل الخاص بك ، ضع في الاعتبار تأخيرًا طفيفًا بين التحديث الفعلي في DynamoDB والكتابة في دفق DynamoDB.


حول المؤلف

جيروم راجان هو مستشار رئيسي لتحليلات البيانات في AWS. يساعد العملاء على تصميم وبناء حلول تحليلات قابلة للتطوير وترحيل خطوط أنابيب البيانات ومستودعات البيانات إلى السحابة. في عالم بديل ، هو بطل العالم في الشطرنج!

ديبنكار غوسال هو مهندس معماري رئيسي في Amazon Web Services ومقره في مينيابوليس ، مينيسوتا. لديه تركيز في التحليلات ويستمتع بمساعدة العملاء في حل حالات الاستخدام الفريدة الخاصة بهم. عندما لا يعمل ، يحب المشي مع زوجته وابنته.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة