تطوير واختبار خطوط أنابيب ETL لـ AWS محليًا

عقدة المصدر: 997665

تطوير واختبار خطوط أنابيب ETL لـ AWS محليًا

عادةً ما يتم تطوير واختبار خطوط أنابيب ETL في بيئة / مجموعات حقيقية تستغرق وقتًا طويلاً في الإعداد وتتطلب الصيانة. تركز هذه المقالة على تطوير واختبار خطوط أنابيب ETL محليًا بمساعدة Docker & LocalStack. يوفر الحل المرونة للاختبار في بيئة محلية دون إعداد أي خدمات على السحابة.


By سوبهاش سرينيفاساشار، مهندس برمجيات، قائد فني في شركة Epsilon

المُقدّمة

 
 
تلعب AWS دورًا محوريًا في مساعدة المهندسين وعلماء البيانات على التركيز على بناء الحلول وحل المشكلات دون القلق بشأن الحاجة إلى إعداد البنية التحتية. من خلال نهج التسعير بدون خادم والدفع أولاً بأول، توفر AWS سهولة إنشاء الخدمات بسرعة.

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

يمثل تصحيح الأخطاء البرمجية في بيئة AWS سواء لبرنامج ETL النصي (PySpark) أو أي خدمة أخرى تحديًا.

  • تعد المراقبة المستمرة لاستخدام خدمة AWS أمرًا أساسيًا للحفاظ على عامل التكلفة تحت السيطرة
  • تقدم AWS بالفعل Dev Endpoint مع تثبيت جميع مكتبات Spark، ولكن بالنظر إلى السعر، فهي غير قابلة للاستخدام لفرق التطوير الكبيرة
  • قد تكون إمكانية الوصول إلى خدمات AWS محدود لبعض المستخدمين

الحلول

 
 
يمكن تطوير حلول AWS واختبارها في البيئة المحلية دون القلق بشأن إمكانية الوصول أو عامل التكلفة. ومن خلال هذا المقال نتناول مشكلتين –

  1. تصحيح أخطاء كود PySpark محليًا دون استخدام نقاط نهاية AWS dev.
  2. التفاعل مع خدمات AWS محليًا

يمكن حل كلتا المشكلتين باستخدام صور Docker.

  1. أولاً، نلغي الحاجة إلى خادم على بيئة AWS وبدلاً من ذلك، تعمل صورة عامل الإرساء التي تعمل على الجهاز كبيئة لتنفيذ التعليمات البرمجية.

توفر AWS صورة رمل يمكن استخدامها لبرامج PySpark النصية. يمكن إعداد صورة Docker لتنفيذ PySpark Code. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
 

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

يمكن استبدال التفاعلات مع S3 بـ لوكال ستاك والذي يوفر إطار اختبار/سخرية سهل الاستخدام لتطوير التطبيقات السحابية. فهو يقوم بتدوير بيئة اختبار على جهازك المحلي والتي توفر نفس الوظائف وواجهات برمجة التطبيقات مثل بيئة سحابة AWS الحقيقية.

رأس

تتناول المقالة حتى الآن بناء خط أنابيب ETL واستخدام الخدمات المتاحة. ومع ذلك، يمكن تكييف نهج مماثل مع أي حالة استخدام أثناء العمل مع خدمات AWS مثل SNS وSQS وCloudFormation ووظائف Lambda وما إلى ذلك.

الرسالة

  • استخدم حاويات عامل الإرساء كمترجم عن بعد
  • قم بتشغيل جلسة PySpark على الحاويات
  • قم بتدوير خدمة S3 محليًا باستخدام LocalStack
  • استخدم كود PySpark للقراءة والكتابة من مجموعة S3 التي تعمل على LocalStack

الشروط المسبقة

 
يجب تثبيت الأدوات التالية على جهازك

  • عامل في حوض السفن
  • كود PyCharm Professional/VisualStudio

اقامة

  • قم بتنزيل أو سحب صور عامل الإرساء (docker pull )
    • libs:glue_libs_1.0.0_image_01
    • localstack/localstack
  • يمكن استخدام حاويات Docker كمترجمين فوريين عن بعد في الإصدار الاحترافي من PyCharm.

تطبيق

 
بعد تثبيت Docker وسحب الصور إلى جهازك المحلي، ابدأ في إعداد PyCharm مع التكوينات لبدء الحاويات.

  • قم بإنشاء ملف docker-compose.yml

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-docker-compose-yml

  • قم بإنشاء ملف DockerFile

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-dockerfile

  • استخدم ملف المتطلبات مع الحزم المراد تثبيتها

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-requirements-txt
 

  • إعداد مترجم بايثون عن بعد
    • قم بإعداد مترجم Python باستخدام ملف إنشاء عامل الإرساء.
    • حدد "خدمة الغراء" في إعدادات PyCharm Docker Compose.
    • يقوم ملف Docker-compose بإنشاء وتشغيل الحاويات لكلتا الصورتين
    • يتم تشغيل LocalStack بشكل افتراضي على المنفذ 4566 ويتم تمكين خدمة S3 عليه

رمز

  • المكتبات المطلوبة ليتم استيرادها

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-imports

  • أضف ملفًا إلى مجموعة S3 التي تعمل على LocalStack

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-add_to_bucket
http://host.docker.internal:4566 هو S3 الذي يعمل محليًا داخل حاوية عامل الإرساء

  • قم بإعداد جلسة PySpark للقراءة من S3

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-create_pyspark_session

  • تتصل جلسة PySpark بـ S3 عبر بيانات اعتماد وهمية مقدمة
  • يمكنك القراءة من S3 مباشرةً باستخدام جلسة PySpark التي تم إنشاؤها

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-read_from_s3

  • وأخيرًا، من الممكن الكتابة إلى S3 بأي تنسيق مفضل

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-write_to_s3

بمجرد اتباع الخطوات المذكورة أعلاه، يمكننا إنشاء ملف CSV وهمي يحتوي على بيانات وهمية للاختبار ويجب أن تكون جيدًا

  • إضافة ملف إلى S3 (الذي يعمل على LocalStack)
  • القراءة من S3
  • اكتب مرة أخرى إلى S3 مثل الباركيه

يجب أن تكون قادرًا على تشغيل ملف .py للتنفيذ وسيتم إنشاء جلسة PySpark التي يمكنها القراءة من مجموعة S3 التي يتم تشغيلها محليًا باستخدام LocalStack API.

بالإضافة إلى ذلك، يمكنك أيضًا التحقق مما إذا كان LocalStack يعمل مع http://localhost:4566/health

يوفر لك LocalStack القدرة على تشغيل الأوامر باستخدام AWS CLI أيضًا.

وفي الختام

 
 
يوفر استخدام Docker & Localstack طريقة سريعة وسهلة لتشغيل كود Pyspark وتصحيح الأخطاء على الحاويات والكتابة إلى S3 الذي يتم تشغيله محليًا. كل هذا دون الحاجة إلى الاتصال بأي خدمة AWS.

 
المراجع:

 
السيرة الذاتية: سوبهاش سرينيفاساشار هو مهندس برمجيات رئيسي في فريق Epsilon Digital Experience، حيث يقوم ببناء حلول هندسية لحل مشكلات علوم البيانات على وجه التحديد التخصيص، والمساعدة في تحقيق عائد الاستثمار للعملاء.

هذا الموضوع ذو علاقة بـ:

المصدر: https://www.kdnuggets.com/2021/08/development-testing-etl-pipelines-aws-locally.html

الطابع الزمني:

اكثر من KD nuggets