توسعه و آزمایش خطوط لوله ETL برای AWS به صورت محلی

گره منبع: 997665

توسعه و آزمایش خطوط لوله ETL برای AWS به صورت محلی

به طور معمول، توسعه و آزمایش خطوط لوله ETL در محیط/خوشه‌های واقعی انجام می‌شود که راه‌اندازی آن زمان بر است و نیاز به تعمیر و نگهداری دارد. این مقاله بر روی توسعه و آزمایش خطوط لوله ETL به صورت محلی با کمک Docker & LocalStack تمرکز دارد. این راه حل انعطاف پذیری را برای آزمایش در یک محیط محلی بدون راه اندازی هیچ گونه سرویسی در فضای ابری می دهد.


By سوبهاش سرنیواساچار، مدیر فنی مهندس نرم افزار در اپسیلون

معرفی

 
 
AWS نقشی اساسی در کمک به مهندسان، دانشمندان داده بر روی ساخت راه حل ها و حل مشکلات بدون نگرانی در مورد نیاز به راه اندازی زیرساخت ایفا می کند. با رویکرد بدون سرور و پرداخت در صورت تمایل برای قیمت‌گذاری، AWS سهولت ایجاد خدمات را در لحظه فراهم می‌کند.

چسب AWS به طور گسترده توسط مهندسان داده برای ساخت خطوط لوله ETL بدون سرور استفاده می شود. PySpark یکی از پشته های فناوری رایج است که برای توسعه استفاده می شود. با این حال، با وجود در دسترس بودن خدمات، چالش‌های خاصی وجود دارد که باید برطرف شود.

اشکال زدایی کد در محیط AWS چه برای اسکریپت ETL (PySpark) یا هر سرویس دیگری یک چالش است.

  • نظارت مداوم بر استفاده از سرویس AWS برای تحت کنترل نگه داشتن فاکتور هزینه کلیدی است
  • AWS Dev Endpoint را با تمام کتابخانه های spark نصب شده ارائه می دهد، اما با توجه به قیمت، برای تیم های توسعه بزرگ قابل استفاده نیست.
  • دسترسی به خدمات 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 به صورت محلی

هر دو مشکل را می توان با استفاده از تصاویر داکر حل کرد.

  1. ابتدا نیاز به سرور در محیط AWS را برطرف می کنیم و در عوض، یک تصویر داکر در حال اجرا بر روی دستگاه به عنوان محیطی برای اجرای کد عمل می کند.

AWS یک تصویر sandbox را ارائه می دهد که می تواند برای اسکریپت های PySpark استفاده شود. تصویر داکر را می توان برای اجرای کد PySpark تنظیم کرد. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
 

  1. با دستگاه docker موجود برای اجرای کد، نیاز به سرویسی مانند S3 برای ذخیره (خواندن/نوشتن) فایل ها در حین ساخت خط لوله ETL وجود دارد.

تعامل با S3 می تواند جایگزین شود LocalStack که یک چارچوب تست/مسخره با کاربری آسان برای توسعه برنامه های Cloud ارائه می دهد. این یک محیط آزمایشی را بر روی دستگاه محلی شما ایجاد می کند که عملکرد و API های مشابه محیط ابری واقعی AWS را ارائه می دهد.

سربرگ

تا اینجا، مقاله به ساخت خط لوله ETL و استفاده از خدمات موجود می پردازد. با این حال، رویکرد مشابهی را می توان در هنگام کار با سرویس های AWS مانند SNS، SQS، CloudFormation، توابع Lambda و غیره با هر موردی سازگار کرد.

روش

  • از ظروف docker به عنوان مترجم از راه دور استفاده کنید
  • جلسه PySpark را روی کانتینرها اجرا کنید
  • با استفاده از LocalStack، سرویس S3 را به صورت محلی بچرخانید
  • از کد 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
 

  • مترجم راه دور پایتون را راه اندازی کنید
    • با استفاده از فایل 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 به صورت محلی در داخل داکر کانتینر اجرا می شود

  • جلسه PySpark را برای خواندن از S3 تنظیم کنید

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

  • جلسه PySpark از طریق اعتبارنامه های ساختگی ارائه شده به S3 متصل می شود
  • با استفاده از جلسه PySpark ایجاد شده می توانید مستقیماً از S3 بخوانید

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 است که راه حل های مهندسی برای حل مشکلات علم داده به ویژه شخصی سازی می سازد و به افزایش ROI برای مشتریان کمک می کند.

مرتبط:

منبع: https://www.kdnuggets.com/2021/08/development-testing-etl-pipelines-aws-locally.html

تمبر زمان:

بیشتر از kdnuggets