פיתוח ובדיקה של צינורות ETL עבור AWS מקומית

צומת המקור: 997665

פיתוח ובדיקה של צינורות ETL עבור AWS מקומית

בדרך כלל, פיתוח ובדיקה של צינורות ETL נעשים על סביבה/אשכולות אמיתיים, שלוקח זמן להתקנה ודורש תחזוקה. מאמר זה מתמקד בפיתוח ובדיקה של צינורות ETL באופן מקומי בעזרת Docker & LocalStack. הפתרון נותן גמישות לבדיקה בסביבה מקומית מבלי להגדיר שירותים כלשהם בענן.


By Subhash Sreenivasachar, מהנדס תוכנה מוביל טכני באפסילון

מבוא

 
 
AWS ממלאת תפקיד מרכזי בסיוע למהנדסים, מדעני נתונים להתמקד בבניית פתרונות ובפתרון בעיות מבלי לדאוג מהצורך בהקמת תשתית. עם גישת התמחור ללא שרת ושלם כפי שאתה הולך, AWS מספקת קלות ליצירת שירותים תוך כדי תנועה.

AWS Glue נמצא בשימוש נרחב על ידי מהנדסי נתונים לבניית צינורות ETL ללא שרת. PySpark הוא אחד מחסני הטכנולוגיה הנפוצים המשמשים לפיתוח. עם זאת, למרות הזמינות של השירותים, ישנם אתגרים מסוימים שיש לטפל בהם.

ניפוי קוד בסביבת AWS בין אם עבור סקריפט ETL (PySpark) או כל שירות אחר הוא אתגר.

  • ניטור שוטף של השימוש בשירותי AWS הוא המפתח כדי לשמור על גורם העלות בשליטה
  • AWS אמנם מציעה Dev Endpoint עם כל ספריות הניצוץ מותקנות, אבל בהתחשב במחיר, זה לא כדאי לשימוש עבור צוותי פיתוח גדולים
  • נגישות של שירותי AWS עשויה להיות מוגבל עבור משתמשים מסוימים

פתרון

 
 
Solutions for AWS can be developed, tested in local environment without worrying about accessibility or cost factor. Through this article, we are addressing two problems –

  1. איתור באגים בקוד PySpark באופן מקומי ללא שימוש בנקודות קצה של פיתוח AWS.
  2. אינטראקציה עם שירותי AWS באופן מקומי

ניתן לפתור את שתי הבעיות באמצעות תמונות Docker.

  1. ראשית, אנו מבטלים את הצורך בשרת בסביבת AWS ובמקום זאת, תמונת docker הפועלת על המכונה פועלת כסביבה לביצוע הקוד.

AWS מספקת תמונת ארגז חול שניתן להשתמש בה עבור סקריפטים של PySpark. ניתן להגדיר תמונת Docker לביצוע PySpark Code. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
 

  1. עם מכונת docker זמינה לביצוע הקוד, יש צורך בשירות כמו S3 לאחסון (קריאה/כתיבה) קבצים תוך כדי בניית צינור ETL.

ניתן להחליף אינטראקציות עם S3 ב LocalStack המספקת מסגרת בדיקה/לעג קלה לשימוש לפיתוח יישומי ענן. זה יוצר סביבת בדיקה במחשב המקומי שלך שמספקת את אותה פונקציונליות וממשקי API כמו סביבת הענן האמיתית של AWS.

כותרת

עד כה, המאמר עוסק בבניית צינור ETL ​​ושימוש בשירותים הזמינים. עם זאת, ניתן להתאים גישה דומה לכל מקרה שימוש תוך כדי עבודה עם שירותי AWS כמו SNS, SQS, CloudFormation, פונקציות Lambda וכו'.

גישה

  • השתמש במיכלי docker כמתורגמן מרחוק
  • הפעל הפעלה של PySpark על הקונטיינרים
  • הפוך את שירות S3 באופן מקומי באמצעות LocalStack
  • השתמש בקוד PySpark כדי לקרוא ולכתוב מתוך דלי S3 הפועל על LocalStack

מקדים

 
יש להתקין את הכלים הבאים במחשב שלך

  • סַוָר
  • PyCharm Professional / VisualStudio Code

התקנה

  • הורד או משוך תמונות Docker (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
    • הגדר את מתורגמן Python באמצעות הקובץ docker-compose.
    • בחר 'שירות דבק' בהגדרות 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 הפועל באופן מקומי בתוך קונטיינר Docker

  • הגדר את הפעלת 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 כלשהו.

 
הפניות:

 
Bio you Subhash Sreenivasachar הוא מהנדס תוכנה מוביל בצוות Epsilon Digital Experience, בונה פתרונות הנדסיים לפתרון בעיות במדעי הנתונים, במיוחד התאמה אישית, ועוזר להניע את החזר ה-ROI עבור לקוחות.

מידע נוסף:

מקור: https://www.kdnuggets.com/2021/08/development-testing-etl-pipelines-aws-locally.html

בול זמן:

עוד מ KDnuggets