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:
- AWS geliştirici uç noktalarını kullanmadan PySpark kodunda yerel olarak hata ayıklama.
- AWS Hizmetleriyle yerel olarak etkileşim kurma
Her iki sorun da Docker görüntüleri kullanılarak çözülebilir.
- İ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/
- 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.
Ş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
- DockerFile'ı oluşturun
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-dockerfile
- Yüklenecek paketlerle birlikte gereksinimler dosyasını kullanın
- 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
- 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:
- Tutkal uç noktası: https://docs.aws.amazon.com/glue/latest/dg/dev-endpoint.html
Liman işçisi: https://docs.docker.com/get-docker/ - PyCharm: https://www.jetbrains.com/pycharm/
- PyCharm Uzaktan tercüman: https://www.jetbrains.com/help/pycharm/using-docker-compose-as-a-remote-interpreter.html
- Yerel Yığın: https://localstack.cloud
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
- "
- &
- ulaşabilme
- Türkiye
- Amazon
- analytics
- api
- API'ler
- uygulamaları
- göre
- kullanılabilirliği
- AWS
- inşa etmek
- bina
- meydan okuma
- istemciler
- bulut
- Bulut uygulamaları
- kod
- ortak
- Konteynerler
- Oluşturma
- Tanıtım
- veri
- Veri Analizi
- veri bilimi
- veri ambarı
- Fırsatlar
- derin öğrenme
- dev
- gelişme
- dijital
- yönetmen
- liman işçisi
- Son nokta
- mühendis
- Mühendislik
- Mühendisler
- çevre
- vb
- Esneklik
- odak
- biçim
- iskelet
- GitHub
- Tercih Etmenizin
- GPU'lar
- okuyun
- Ne kadar
- HTTPS
- görüntü
- Altyapı
- IT
- anahtar
- büyük
- öncülük etmek
- ÖĞRENİN
- öğrenme
- yerel
- lokal olarak
- ML
- izleme
- teklif
- Online
- Diğer
- Kişiselleştirme
- asıl
- fiyat
- fiyatlandırma
- problem çözme
- Python
- Yer Alan Kurallar
- koşmak
- koşu
- kum havuzu
- Bilim
- bilim adamları
- Serverless
- Hizmetler
- ayar
- Yazılım
- Yazılım Mühendisi
- Çözümler
- ÇÖZMEK
- başlama
- mağaza
- hikayeler
- Teknik
- test
- Test yapmak
- zaman
- üst
- kullanıcılar
- depo
- X
- yıl