إدارة سير العمل المستندة إلى البيانات - AWS "خط أنابيب البيانات" مقابل وظائف الغراء وامدا

يمكنك أن ترى أن هناك عددًا كبيرًا من المنشورات على مدوّنات AWS حول خطوط أنابيب البيانات ، وإنشاء وظائف ETL أوتوماتيكية ، وأتمتة سير العمل ، وما إلى ذلك. ومع ذلك ، يمكنك أيضًا أن ترى أن هذه المنشورات إما قديمة أو تفتقر إلى التفاصيل الهامة التي ستحتاجها طوال فترة عملك. ممارسة.

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

أولاً ، أود أن ألفت انتباهكم إلى خط أنابيب بيانات AWS ، والذي يتميز بدرجة عالية من التسامح مع الأخطاء وموثوقة وسهل الاستخدام. يمكنك تشغيل تطبيقات مخصصة / أوامر shell على مثيلات EC2 ، تشغيل وظائف Spark / Hive / Pig على مجموعات EMR عابرة ، ونقل البيانات بين البيئات المحلية والسحابة ...

تفتح القدرة على تشغيل أوامر shell الباب لتشغيل / تهيئة جميع خدمات aws باستخدام aws-cli. لا يبدو ذلك رائعًا!

من ناحية أخرى ، يبدو أنه بدلاً من "خط أنابيب البيانات" ، يفضل الغراء مع Lambda غالبًا عندما تقوم بنقل وتحويل البيانات بين خدمات AWS.

AWS Glue هي خدمة ETL المدارة بالكامل ، و AWS Lambda هي عبارة عن منصة حوسبة بدون خادم تستند إلى أحداث AWS.

باستخدام AWS Glue ، يمكنك الزحف إلى البيانات الوصفية للبيانات غير المهيكلة ، واستكشاف مخطط البيانات ، ووضع كتالوج البيانات الخاص بك كجدول ، وعرض البيانات على AWS Athena (SQL Query Engine) ... يمكنك إنشاء مهام ETL (Python) ، حيث يمكنك استخدام وظائف Spark الموسعة المقدمة كـ GlueContext. عندما تكون الأتمتة موضع الاعتبار ، يمكن تشغيل / إنشاء كل هذه الوظائف بواسطة وظائف Lambda ، والتي قد يتم تشغيلها بواسطة أحداث مثل "S3 Put Event" (يأتي ملف في دلو S3) .يمكنك وضع وظائف Lambda ووظائف Glue هذه في Step ، يكون لديك سير عمل مع فحوصات حبيبية. (مثل التحقق من انتهاء مهمة Glue بوظيفة Lambda ، إذا لم يتم تشغيل وظيفة Lambda أخرى لإعادة تشغيل وظيفة Glue).

يمكنك التحقق من الرابط التالي https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-calling.html.

علاوة على ذلك ، إذا كنت ترغب في استخدام Node.js أو بيئة أخرى لـ Lambda ، يمكنك زيارة https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Glue.html

بدلاً من الاعتماد على منتج ، توفر خدماتك المصغرة مرونة في تطوير آلية التحكم الخاصة بك على سير العمل الخاص بك. رموز الغراء ووظائف Lambda تجعل حياتك أسهل عندما يتعلق الأمر ببناء خط أنابيب CI / CD. يمكنك إنشاء / تشغيل "Data Pipeline" مع وظائف Lambda ووضع وظيفة Lambda في قاعدة بياناتك ، ومع ذلك سترى أنها ليست فعالة للغاية وسهلة الاستخدام للقيام بذلك. يمكنك كتابة التكوين (عقد البيانات ، والأنشطة التي هي المهام التي يتعين القيام بها ، والشروط المسبقة وما إلى ذلك) في شكل json أو استنساخها من خط أنابيب موجود. ولكن أعتقد أنه شاق نسبيا.

يمكنك الحصول على نقاط نهاية للتطوير يمكنك من خلالها استخدام دفاتر Sagemaker / Zeppelin للتحقق من بياناتك ، ومقارنة إخراج متتبع ارتباطات الغراء مع مخطط Spark dataframe (المخطط المستنتج من الملف في دلو S3). قد تكون المشكلة أن نقاط النهاية هذه غير متوفرة في جميع المناطق ، ويرجى ملاحظة أن بياناتك ووظائف الغراء ، .. يجب أن تكون في نفس المنطقة للعمل بها.

إذا كانت لديك مصادر بيانات داخلية ، فإن "خط أنابيب البيانات" قد يجعل حياتك أسهل. يمكنك تحديد "عقد البيانات" للإدخال / الإخراج ، وهو موقع / تنسيق البيانات (يمكن أن تكون عقد البيانات MySQL و S3 وما إلى ذلك) وتعيين شروط مسبقة مثل "Exists" وما إلى ذلك. يمكنك بسهولة ترحيل البيانات من مصادرك المحلية إلى S3 أو Redshift. ومع ذلك ، إذا كان هدفك هو إجراء تحويلات Spark فقط على بياناتك في بيئة AWS ، لتشغيل وظيفة Spark على EMR مع "خط أنابيب البيانات" ، يجب عليك الانتظار 15 دقيقة أثناء دوران مجموعة EMR ، في حين أن وظيفة Spark نفسها يمكن تشغيلها مع الغراء في بضع دقائق. يمكنك ضبط DPU (عدد وحدات معالجة البيانات) ووقت الانتظار ، ومع ذلك لا ينصح باللعب مع تكوينات الغراء في Spark. يمكن رؤية القيود من https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html.

قد يكون استخدام Spark on EMR أمرًا مرغوبًا في حالة أنشطة Hadoop / تخزين الملفات الوسيط على HDFS ويمكن تجاهل 15 دقيقة ، إذا قمت بمعالجة البيانات الخاصة بك دفعة وجدولة ، يقول يوميًا / أسبوعيًا.

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

علاوة على ذلك ، أتساءل كيف يمكن إجراء تسجيل الأخطاء في تنظيف البيانات / مستوى السجل بطريقة سهلة (والتي قد تكون وظيفة غراء / شرارة موجودة).

سأقوم بنشر دراسات الغراء خطوة بخطوة في القصص القادمة.

هذا هو أول وظيفة لي ، لذلك آمل أن تستمتع بها على الإطلاق! :)