AWS için Yerel Olarak ETL İşlem Hatlarının Geliştirilmesi ve Test Edilmesi

Kaynak Düğüm: 997665

AWS için Yerel Olarak ETL İşlem Hatlarının Geliştirilmesi ve Test Edilmesi

Tipik olarak, ETL ardışık düzenlerinin geliştirilmesi ve test edilmesi, kurulumu zaman alan ve bakım gerektiren gerçek ortam/kümeler üzerinde yapılır. Bu makale, Docker & LocalStack'in yardımıyla ETL işlem hatlarının yerel olarak geliştirilmesine ve test edilmesine odaklanmaktadır. Çözüm, bulutta herhangi bir hizmet kurmadan yerel bir ortamda test etme esnekliği sağlar.


By Subhash Sreenivasachar, Epsilon'da Yazılım Mühendisi Teknik Lideri

Giriş

 
 
AWS, mühendislerin ve veri bilimcilerin altyapı kurma ihtiyacı konusunda endişelenmeden çözümler oluşturmaya ve sorun çözmeye odaklanmasına yardımcı olma konusunda çok önemli bir rol oynuyor. AWS, fiyatlandırmada Sunucusuz ve kullandıkça öde yaklaşımıyla, hizmetleri anında oluşturma kolaylığı sağlar.

AWS Glue, Veri Mühendisleri tarafından sunucusuz ETL işlem hatları oluşturmak için yaygın olarak kullanılır. PySpark, geliştirme için kullanılan yaygın teknoloji yığınlarından biridir. Ancak hizmetlerin mevcut olmasına rağmen çözülmesi gereken bazı zorluklar vardır.

İster ETL betiği (PySpark) ister başka herhangi bir hizmet için AWS ortamında kodda hata ayıklamak zorlu bir iştir.

  • AWS hizmet kullanımının sürekli izlenmesi, maliyet faktörünü kontrol altında tutmanın anahtarıdır
  • AWS, Dev Endpoint'i tüm spark kütüphanelerinin kurulu olduğu şekilde sunuyor ancak fiyatı göz önüne alındığında, büyük geliştirme ekiplerinin kullanımı uygun değil
  • AWS hizmetlerinin erişilebilirliği sınırlı belirli kullanıcılar için

Çözüm

 
 
AWS'ye yönelik çözümler, erişilebilirlik veya maliyet faktörü endişesi olmadan yerel ortamda geliştirilebilir ve test edilebilir. Bu makale aracılığıyla iki sorunu ele alıyoruz:

  1. AWS geliştirici uç noktalarını kullanmadan PySpark kodunda yerel olarak hata ayıklama.
  2. AWS Hizmetleriyle yerel olarak etkileşim kurma

Her iki sorun da Docker görüntüleri kullanılarak çözülebilir.

  1. İlk olarak, AWS ortamında bir sunucuya olan ihtiyacı ortadan kaldırıyoruz ve bunun yerine, makinede çalışan bir docker görüntüsü, kodun çalıştırılacağı ortam görevi görüyor.

AWS, PySpark komut dosyaları için kullanılabilecek bir korumalı alan görüntüsü sağlar. Docker görüntüsü PySpark Kodunu çalıştıracak şekilde ayarlanabilir. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
 

  1. Kodu yürütmek için docker makinesi mevcut olduğundan, bir ETL işlem hattı oluştururken dosyaları depolamak (okumak/yazmak) için S3 gibi bir hizmete ihtiyaç vardır.

S3 ile etkileşimler şu şekilde değiştirilebilir: YerelYığın Bulut uygulamaları geliştirmek için kullanımı kolay bir test/alay çerçevesi sağlar. Yerel makinenizde, gerçek AWS bulut ortamıyla aynı işlevleri ve API'leri sağlayan bir test ortamı başlatır.

üstbilgi

Şu ana kadar makale bir ETL hattının oluşturulması ve mevcut hizmetlerin kullanımıyla ilgileniyor. Ancak benzer yaklaşım, SNS, SQS, CloudFormation, Lambda işlevleri vb. AWS hizmetleriyle çalışırken her türlü kullanım durumuna uyarlanabilir.

Yaklaşım

  • Docker kapsayıcılarını uzaktan tercüman olarak kullanma
  • Konteynerlerde PySpark oturumunu çalıştırın
  • LocalStack kullanarak S3 hizmetini yerel olarak başlatın
  • LocalStack'te çalışan S3 paketinden okumak ve yazmak için PySpark kodunu kullanın

Ön koşul

 
Makinenizde aşağıdaki araçların kurulu olması gerekmektedir

  • liman işçisi
  • PyCharm Profesyonel/VisualStudio Kodu

Kurmak

  • Docker görüntülerini indirin veya çekin (docker pull )
    • kütüphaneler:glue_libs_1.0.0_image_01
    • yerel yığın/yerel yığın
  • Docker konteynerleri PyCharm profesyonel sürümünde uzaktan tercüman olarak kullanılabilir.

Uygulama

 
Docker kurulu ve görüntüler yerel makinenize çekilmiş durumdayken, konteynerleri başlatmak için PyCharm'ı yapılandırmalarla ayarlamaya başlayın.

  • Docker-compose.yml dosyası oluşturun

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

  • DockerFile'ı oluşturun

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

  • Yüklenecek paketlerle birlikte gereksinimler dosyasını kullanın

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

  • Python uzaktan tercümanını kurun
    • Docker-compose dosyasını kullanarak Python yorumlayıcısını kurun.
    • PyCharm Docker Compose ayarlarında "tutkal hizmetini" seçin.
    • Docker-compose dosyası her iki görüntü için de kapsayıcılar oluşturur ve çalıştırır
    • LocalStack varsayılan olarak 4566 numaralı bağlantı noktasında çalışır ve S3 hizmeti bu bağlantı noktasında etkindir

Kod

  • İçe aktarılacak gerekli kütüphaneler

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

  • LocalStack'te çalışan S3 klasörüne bir dosya ekleyin

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-add_to_bucket
http://host.docker.internal:4566 S3 yerel olarak liman işçisi konteynerinin içinde çalışıyor mu

  • S3'ten okumak için PySpark oturumunu kurun

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

  • PySpark oturumu, sağlanan sahte kimlik bilgileri aracılığıyla S3'e bağlanır
  • Oluşturulan PySpark oturumunu kullanarak doğrudan S3'ten okuyabilirsiniz

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

  • Son olarak S3'e tercih edilen herhangi bir formatta yazmak mümkün

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

Yukarıda belirtilen adımlar takip edildikten sonra, test için sahte veriler içeren sahte bir csv dosyası oluşturabiliriz.

  • Dosyayı S3'e ekleyin (LocalStack'te çalışıyor)
  • S3'ten okuyun
  • S3'e parke olarak geri yaz

Yürütmek için .py dosyasını çalıştırabilmeniz gerekir ve LocalStack API kullanılarak yerel olarak çalışan S3 klasöründen okuyabilen PySpark oturumu oluşturulacaktır.

Ayrıca LocalStack'in çalışıp çalışmadığını da kontrol edebilirsiniz. http://localhost:4566/health

LocalStack, AWS CLI'yi kullanarak komutları çalıştırma olanağı da sağlar.

Sonuç

 
 
Docker ve Localstack kullanımı, Pyspark kodunu çalıştırmanın, konteynerlerde hata ayıklamanın ve yerel olarak çalışan S3'e yazmanın hızlı ve kolay bir yolunu sağlar. Tüm bunlar herhangi bir AWS hizmetine bağlanmanıza gerek kalmadan.

 
Referanslar:

 
Bio: Subhash Sreenivasachar Epsilon Dijital Deneyim ekibinde Baş Yazılım Mühendisidir; veri bilimi sorunlarını, özellikle kişiselleştirmeyi çözmek ve müşteriler için yatırım getirisini artırmaya yardımcı olmak için mühendislik çözümleri geliştirmektedir.

İlgili:

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

Zaman Damgası:

Den fazla KDNuggets