Phát triển và thử nghiệm các đường ống ETL cho AWS cục bộ

Nút nguồn: 997665

Phát triển và thử nghiệm các đường ống ETL cho AWS cục bộ

Thông thường, việc phát triển và thử nghiệm các đường ống ETL được thực hiện trên môi trường/cụm thực, việc này tốn nhiều thời gian để thiết lập và yêu cầu bảo trì. Bài viết này tập trung vào việc phát triển và thử nghiệm cục bộ các đường dẫn ETL với sự trợ giúp của Docker & LocalStack. Giải pháp cho phép thử nghiệm linh hoạt trong môi trường cục bộ mà không cần thiết lập bất kỳ dịch vụ nào trên đám mây.


By Subhash Sreenivasachar, Trưởng nhóm kỹ thuật kỹ sư phần mềm tại Epsilon

Giới thiệu

 
 
AWS đóng vai trò then chốt trong việc giúp các kỹ sư, nhà khoa học dữ liệu tập trung vào việc xây dựng giải pháp và giải quyết vấn đề mà không phải lo lắng về nhu cầu thiết lập cơ sở hạ tầng. Với cách tiếp cận Serverless & pay-as-you-go để định giá, AWS mang đến khả năng tạo dịch vụ dễ dàng một cách nhanh chóng.

AWS Glue được các Kỹ sư dữ liệu sử dụng rộng rãi để xây dựng đường ống ETL phi máy chủ. PySpark là một trong những công nghệ phổ biến được sử dụng để phát triển. Tuy nhiên, mặc dù có sẵn các dịch vụ, vẫn có những thách thức nhất định cần được giải quyết.

Gỡ lỗi mã trong môi trường AWS cho dù đối với tập lệnh ETL (PySpark) hay bất kỳ dịch vụ nào khác đều là một thách thức.

  • Giám sát liên tục việc sử dụng dịch vụ AWS là chìa khóa để kiểm soát yếu tố chi phí
  • AWS cung cấp Dev Endpoint với tất cả các thư viện spark được cài đặt, nhưng xét về giá, nó không khả thi để sử dụng cho các nhóm phát triển lớn
  • Khả năng truy cập của các dịch vụ AWS có thể hạn chế cho một số người dùng nhất định

Dung dịch

 
 
Các giải pháp cho AWS có thể được phát triển, thử nghiệm trong môi trường cục bộ mà không phải lo lắng về khả năng tiếp cận hay yếu tố chi phí. Thông qua bài viết này, chúng tôi đang giải quyết hai vấn đề -

  1. Gỡ lỗi mã PySpark cục bộ mà không cần sử dụng điểm cuối nhà phát triển AWS.
  2. Tương tác với Dịch vụ AWS cục bộ

Cả hai vấn đề đều có thể được giải quyết bằng cách sử dụng hình ảnh Docker.

  1. Đầu tiên, chúng tôi loại bỏ nhu cầu về máy chủ trên môi trường AWS và thay vào đó, hình ảnh docker chạy trên máy đóng vai trò là môi trường để thực thi mã.

AWS cung cấp hình ảnh hộp cát có thể được sử dụng cho các tập lệnh PySpark. Hình ảnh Docker có thể được thiết lập để thực thi Mã PySpark. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
 

  1. Với máy docker có sẵn để thực thi mã, cần có một dịch vụ như S3 để lưu trữ (đọc/ghi) tệp trong khi xây dựng đường dẫn ETL.

Tương tác với S3 có thể được thay thế bằng Cục bộ cung cấp khung thử nghiệm/mô phỏng dễ sử dụng để phát triển các ứng dụng Đám mây. Nó tạo ra một môi trường thử nghiệm trên máy cục bộ của bạn, cung cấp chức năng và API giống như môi trường đám mây AWS thực.

Tiêu đề

Cho đến nay, bài viết đề cập đến việc xây dựng một đường dẫn ETL và sử dụng các dịch vụ có sẵn. Tuy nhiên, cách tiếp cận tương tự có thể được điều chỉnh cho mọi trường hợp sử dụng khi làm việc với các dịch vụ AWS như SNS, SQS, CloudFormation, hàm Lambda, v.v.

Phương pháp tiếp cận

  • Sử dụng docker container làm trình thông dịch từ xa
  • Chạy phiên PySpark trên các thùng chứa
  • Tăng cường dịch vụ S3 cục bộ bằng LocalStack
  • Sử dụng mã PySpark để đọc và ghi từ bộ chứa S3 chạy trên LocalStack

Điều kiện tiên quyết

 
Các công cụ sau phải được cài đặt trên máy của bạn

  • phu bến tàu
  • Mã PyCharm Professional/VisualStudio

Thành lập

  • Tải xuống hoặc kéo hình ảnh docker (docker pull )
    • libs:glue_libs_1.0.0_image_01
    • ngăn xếp cục bộ/ngăn xếp cục bộ
  • Bộ chứa Docker có thể được sử dụng làm trình thông dịch từ xa trong phiên bản chuyên nghiệp của PyCharm.

Thực hiện

 
Khi Docker được cài đặt và hình ảnh được kéo vào máy cục bộ của bạn, hãy bắt đầu cài đặt PyCharm với các cấu hình để khởi động vùng chứa.

  • Tạo tệp docker-compose.yml

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

  • Tạo một DockerFile

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

  • Sử dụng tệp yêu cầu với các gói sẽ được cài đặt

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

  • Thiết lập trình thông dịch từ xa Python
    • Thiết lập trình thông dịch Python bằng tệp docker-compose.
    • Chọn `glue-service` trong cài đặt PyCharm Docker Compose.
    • Tệp Docker-compose tạo và chạy các vùng chứa cho cả hai hình ảnh
    • LocalStack mặc định chạy trên cổng 4566 và dịch vụ S3 được kích hoạt trên đó

  • Các thư viện bắt buộc phải nhập

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

  • Thêm tệp vào bộ chứa S3 đang chạy trên LocalStack

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-add_to_bucket
http://host.docker.internal:4566 S3 có chạy cục bộ bên trong docker container không

  • Thiết lập phiên PySpark để đọc từ S3

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

  • Phiên PySpark kết nối với S3 thông qua thông tin đăng nhập giả được cung cấp
  • Bạn có thể đọc trực tiếp từ S3 bằng phiên PySpark đã tạo

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

  • Cuối cùng, có thể ghi vào S3 ở bất kỳ định dạng ưa thích nào

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

Sau khi thực hiện theo các bước nêu trên, chúng tôi có thể tạo một tệp csv giả với dữ liệu giả để thử nghiệm và bạn nên làm tốt

  • Thêm tệp vào S3 (đang chạy trên LocalStack)
  • Đọc từ S3
  • Viết lại cho S3 dưới dạng sàn gỗ

Bạn sẽ có thể chạy tệp .py để thực thi và phiên PySpark sẽ được tạo để có thể đọc từ bộ chứa S3 đang chạy cục bộ bằng API LocalStack.

Ngoài ra, bạn cũng có thể kiểm tra xem LocalStack có đang chạy với http://localhost:4566/health

LocalStack cũng cung cấp cho bạn khả năng chạy các lệnh bằng AWS CLI.

Kết luận

 
 
Việc sử dụng Docker & Localstack cung cấp một cách nhanh chóng và dễ dàng để chạy mã Pyspark, gỡ lỗi trên vùng chứa và ghi vào S3 đang chạy cục bộ. Tất cả điều này mà không cần phải kết nối với bất kỳ dịch vụ AWS nào.

 
Tài liệu tham khảo:

 
Tiểu sử: Subhash Sreenivasachar là Kỹ sư phần mềm trưởng tại nhóm Trải nghiệm kỹ thuật số Epsilon, xây dựng các giải pháp kỹ thuật để giải quyết các vấn đề về khoa học dữ liệu, cụ thể là cá nhân hóa và giúp thúc đẩy ROI cho khách hàng.

Liên quan:

Nguồn: https://www.kdnuggets.com/2021/08/development-testing-etl-pipelines-aws-locally.html

Dấu thời gian:

Thêm từ Xe đẩy