การพัฒนาและทดสอบท่อส่ง ETL สำหรับ AWS Locally

โหนดต้นทาง: 997665

การพัฒนาและทดสอบท่อส่ง ETL สำหรับ AWS Locally

คีย์เวิร์ด: AWS, วิศวกรรมข้อมูล, ETL, ท่อ

โดยทั่วไป การพัฒนาและทดสอบไปป์ไลน์ ETL จะดำเนินการในสภาพแวดล้อม/คลัสเตอร์จริง ซึ่งใช้เวลานานในการตั้งค่าและต้องมีการบำรุงรักษา บทความนี้เน้นที่การพัฒนาและทดสอบไปป์ไลน์ ETL ในพื้นที่ด้วยความช่วยเหลือของ Docker & LocalStack โซลูชันนี้ให้ความยืดหยุ่นในการทดสอบในสภาพแวดล้อมภายในเครื่องโดยไม่ต้องตั้งค่าบริการใดๆ บนคลาวด์


By สุภาษ ศรีนิวาสาจาร, Software Engineer Technical Lead ที่ Epsilon

บทนำ

 
 
AWS มีบทบาทสำคัญในการช่วยให้วิศวกร นักวิทยาศาสตร์ข้อมูลมุ่งเน้นไปที่การสร้างโซลูชันและการแก้ปัญหาโดยไม่ต้องกังวลเกี่ยวกับความจำเป็นในการตั้งค่าโครงสร้างพื้นฐาน ด้วยวิธีการกำหนดราคาแบบไร้เซิร์ฟเวอร์และจ่ายตามการใช้งาน AWS ให้ความสะดวกในการสร้างบริการได้ทันที

วิศวกรข้อมูลใช้ AWS Glue อย่างแพร่หลายเพื่อสร้างไปป์ไลน์ ETL แบบไร้เซิร์ฟเวอร์ PySpark เป็นหนึ่งใน tech-stack ทั่วไปที่ใช้สำหรับการพัฒนา อย่างไรก็ตาม แม้จะมีความพร้อมให้บริการ แต่ก็มีความท้าทายบางอย่างที่ต้องแก้ไข

การดีบักโค้ดในสภาพแวดล้อมของ AWS ไม่ว่าจะเป็นสคริปต์ ETL (PySpark) หรือบริการอื่นๆ ถือเป็นเรื่องท้าทาย

  • การตรวจสอบการใช้บริการ AWS อย่างต่อเนื่องเป็นกุญแจสำคัญในการควบคุมปัจจัยด้านต้นทุน
  • AWS เสนอ Dev Endpoint พร้อมติดตั้งไลบรารี spark ทั้งหมด แต่เมื่อพิจารณาจากราคาแล้ว จึงไม่สามารถใช้งานได้สำหรับทีมพัฒนาขนาดใหญ่
  • การเข้าถึงบริการของ AWS อาจ จำกัด สำหรับผู้ใช้บางคน

Solution

 
 
โซลูชันสำหรับ 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 สามารถแทนที่ด้วย localstack ซึ่งมีกรอบการทดสอบ/จำลองที่ใช้งานง่ายสำหรับการพัฒนาแอปพลิเคชันระบบคลาวด์ มันสร้างสภาพแวดล้อมการทดสอบบนเครื่องของคุณซึ่งมีฟังก์ชันการทำงานและ API เดียวกันกับสภาพแวดล้อม AWS Cloud จริง

ส่วนหัว

จนถึงตอนนี้ บทความเกี่ยวกับการสร้างไปป์ไลน์ ETL และการใช้บริการที่มีอยู่ อย่างไรก็ตาม แนวทางที่คล้ายกันนี้สามารถปรับให้เข้ากับกรณีการใช้งานใดๆ ในขณะที่ทำงานกับบริการของ AWS เช่น SNS, SQS, CloudFormation, ฟังก์ชัน Lambda เป็นต้น

เข้าใกล้

  • ใช้คอนเทนเนอร์นักเทียบท่าเป็นล่ามระยะไกล
  • เรียกใช้เซสชัน PySpark บนคอนเทนเนอร์
  • หมุนบริการ S3 ในเครื่องโดยใช้ LocalStack
  • ใช้รหัส PySpark เพื่ออ่านและเขียนจากบัคเก็ต S3 ที่ทำงานบน LocalStack

requisites ก่อน

 
ต้องติดตั้งเครื่องมือต่อไปนี้ในเครื่องของคุณ

  • นักเทียบท่า
  • รหัส PyCharm Professional / VisualStudio

การติดตั้ง

  • ดาวน์โหลดหรือดึงภาพนักเทียบท่า (docker pull )
    • libs:glue_libs_1.0.0_image_01
    • localstack/โลคัลสแต็ก
  • คอนเทนเนอร์นักเทียบท่าสามารถใช้เป็นล่ามระยะไกลในเวอร์ชันมืออาชีพของ 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 ที่ทำงานอยู่ภายในคอนเทนเนอร์นักเทียบท่า

  • ตั้งค่าเซสชัน 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: สุภาษ ศรีนิวาสาจาร เป็นหัวหน้าวิศวกรซอฟต์แวร์ที่ทีม Epsilon Digital Experience สร้างโซลูชันทางวิศวกรรมเพื่อแก้ปัญหาด้านวิทยาศาสตร์ข้อมูลโดยเฉพาะอย่างยิ่งส่วนบุคคล และช่วยผลักดัน ROI ให้กับลูกค้า

ที่เกี่ยวข้อง



เรื่องเด่นใน 30 วันที่ผ่านมา
เป็นที่นิยม
  1. นักวิทยาศาสตร์ข้อมูลและวิศวกร ML เป็นพนักงานที่หรูหรา
  2. หลักสูตรออนไลน์วิทยาศาสตร์ข้อมูล 6 อันดับแรกในปี 2021
  3. คำแนะนำสำหรับการเรียนรู้ Data Science จากผู้อำนวยการฝ่ายวิจัยของ Google
  4. แพนด้าไม่พอ? ต่อไปนี้คือทางเลือกที่ดีบางประการในการประมวลผลข้อมูลขนาดใหญ่และเร็วขึ้นใน Python
  5. เส้นทางการเรียนรู้สู่การเป็นนักวิทยาศาสตร์ข้อมูล
แบ่งปันมากที่สุด
  1. นักวิทยาศาสตร์ข้อมูลและวิศวกร ML เป็นพนักงานที่หรูหรา
  2. ผ่อนคลาย! Data Scientists จะไม่สูญพันธุ์ใน 10 ปี แต่บทบาทจะเปลี่ยนไป
  3. แพนด้าไม่พอ? ต่อไปนี้คือทางเลือกที่ดีบางประการในการประมวลผลข้อมูลขนาดใหญ่และเร็วขึ้นใน Python
  4. ทำไมคุณควรเรียนรู้ "Productive Data Science" และอย่างไร
  5. ไม่เพียงแต่สำหรับ Deep Learning เท่านั้น: GPUs เร่งความเร็ว Data Science & Data Analytics ได้อย่างไร

ที่มา: https://www.kdnuggets.com/2021/08/development-testing-etl-pipelines-aws-locally.html

ประทับเวลา:

เพิ่มเติมจาก KD นักเก็ต

เรื่องเด่น 4-10 ต.ค.: วิธีสร้างผลงานด้านวิทยาศาสตร์ข้อมูลที่แข็งแกร่งในฐานะมือใหม่ 38 หลักสูตรฟรีใน Coursera สำหรับวิทยาศาสตร์ข้อมูล

โหนดต้นทาง: 1877743
ประทับเวลา: ตุลาคม 11, 2021