Zephyrnet Logosu

AWS Step Functions dağıtılmış harita ve yeniden sürücü özelliğiyle verimli ETL işlem hatları oluşturun | Amazon Web Hizmetleri

Tarih:

AWS Basamak İşlevleri gibi çeşitli ayıklama, dönüştürme ve yükleme (ETL) teknolojilerini içeren karmaşık veri işleme hatları oluşturmanıza olanak tanıyan, tam olarak yönetilen bir görsel iş akışı hizmetidir. AWS Tutkal, Amazon EMR'si, ve Amazon Kırmızıya Kaydırma. Bireysel veri hattı görevlerini kablolayarak ve minimum kodla yükleri, yeniden denemeleri ve hata işlemeyi yapılandırarak iş akışını görsel olarak oluşturabilirsiniz.

Step Functions, anlık veya geçici hatalar nedeniyle veri hattı görevleri başarısız olduğunda otomatik yeniden denemeleri ve hata işlemeyi desteklerken, ardışık düzen çalışması sırasında yanlış izinler, geçersiz veriler ve iş mantığı arızası gibi kalıcı hatalar meydana gelebilir. Bu, adımdaki sorunu tanımlamanızı, sorunu düzeltmenizi ve iş akışını yeniden başlatmanızı gerektirir. Daha önce, başarısız olan adımı yeniden çalıştırmak için iş akışının tamamını en baştan yeniden başlatmanız gerekiyordu. Bu, özellikle karmaşık, uzun süredir devam eden bir ETL hattıysa, iş akışının tamamlanmasında gecikmelere yol açar. Boru hattının harita ve paralel durumları kullanan birçok adımı varsa, bu aynı zamanda boru hattını baştan çalıştırmak için durum geçişindeki artışlar nedeniyle maliyetin artmasına da yol açar.

Step Functions artık iş akışınızı yeniden yönlendirme yeteneğinizi destekliyor Başarısız, iptal edilmiş veya zaman aşımına uğramış bir durumdan kurtularak iş akışlarını daha hızlı ve daha düşük maliyetle tamamlayabilir ve iş değeri sağlamaya daha fazla zaman ayırabilirsiniz. Artık, aşağı yöndeki sorunlar çözüldükten sonra başarısız duruma sağlanan girişin aynısını kullanarak başarısız iş akışı çalıştırmalarını yeniden yönlendirerek işlenmeyen hatalardan daha hızlı kurtulabilirsiniz.

Bu yazıda size verileri dışa aktaran bir ETL işlem hattı işi gösteriyoruz. Amazon İlişkisel Veritabanı Hizmeti Adım İşlevlerini kullanan (Amazon RDS) tabloları dağıtılmış harita durumu. Daha sonra bir arızanın simülasyonunu yapıyoruz ve başarısız olan görevi arıza noktasından yeniden başlatmak için yeni yeniden sürücü özelliğinin nasıl kullanılacağını gösteriyoruz.

Çözüme genel bakış

Veri işlem hatlarında yer alan ortak işlevlerden biri, birden fazla veri kaynağından veri çıkarmak ve onu bir veri gölüne aktarmak veya verileri başka bir veritabanıyla senkronize etmektir. Bu tür yüzlerce dışa aktarma veya senkronizasyon işini paralel olarak çalıştırmak için Step Functions dağıtılmış harita durumunu kullanabilirsiniz. Dağıtılmış harita milyonlarca nesneyi okuyabilir Amazon Basit Depolama Hizmeti (Amazon S3) veya tek bir S3 nesnesinden milyonlarca kaydı toplayabilir ve kayıtları alt adımlara dağıtabilirsiniz. Step Functions, dağıtılmış harita içindeki adımları alt iş akışları olarak maksimum 10,000 paralellikte çalıştırır. 10,000 eşzamanlılık, iş başına 1,000 iş çalıştırması yumuşak sınırına sahip AWS Glue gibi diğer birçok AWS hizmeti tarafından desteklenen eşzamanlılığın oldukça üzerindedir.

Örnek veri hattı, ürün kataloğu verilerini şu kaynaktan sağlar: Amazon DinamoDB ve müşteri sipariş verileri PostgreSQL için Amazon RDS veri tabanı. Veriler daha sonra temizlenir, dönüştürülür ve daha ileri işlemler için Amazon S3'e yüklenir. Veri hattı bir ile başlar AWS Glue tarayıcısı RDS veritabanı için Veri Kataloğu oluşturmak için. Bir AWS Glue tarayıcısının başlatılması eşzamansız olduğundan, işlem hattında tarayıcının tamamlanıp tamamlanmadığını kontrol etmek için bir bekleme döngüsü bulunur. AWS Glue tarayıcısı tamamlandıktan sonra işlem hattı, DynamoDB tablosundan ve RDS tablolarından verileri çıkarır. Bu iki adım bağımsız olduğundan paralel adımlar olarak yürütülürler: biri bir AWS Lambda verileri DynamoDB'den bir S3 klasörüne aktarma, dönüştürme ve yükleme işlevi; diğerinde ise dağıtılmış bir harita kullanarak AWS Glue iş senkronizasyonu entegrasyonu aynısını RDS tablolarından bir S3 klasörüne yapmak için. Dikkat AWS Kimlik ve Erişim Yönetimi Step Functions'tan bir AWS Glue işini çağırmak için (IAM) izinleri gereklidir. Daha fazla bilgi için bkz. Step Functions'tan AWS Glue işini çağırmaya yönelik IAM Politikaları.

Aşağıdaki şema, Adım İşlevleri iş akışını göstermektedir.

RDS veri tabanında müşteri ve sipariş verilerine ilişkin birden fazla tablo bulunmaktadır. Amazon S3, tüm tabloların meta verilerini .csv dosyası olarak barındırır. İşlem hattı, Amazon S3'teki tablo meta verilerini okumak, her bir öğe üzerinde yineleme yapmak ve verileri dışa aktarmak için paralel olarak aşağı akış AWS Glue işini çağırmak için Step Functions dağıtılmış haritasını kullanır. Aşağıdaki koda bakın:

"States": {
            "Map": {
              "Type": "Map",
              "ItemProcessor": {
                "ProcessorConfig": {
                  "Mode": "DISTRIBUTED",
                  "ExecutionType": "STANDARD"
                },
                "StartAt": "Export data for a table",
                "States": {
                  "Export data for a table": {
                    "Type": "Task",
                    "Resource": "arn:aws:states:::glue:startJobRun.sync",
                    "Parameters": {
                      "JobName": "ExportTableData",
                      "Arguments": {
                        "--dbtable.$": "$.tables"
                      }
                    },
                    "End": true
                  }
                }
              },
              "Label": "Map",
              "ItemReader": {
                "Resource": "arn:aws:states:::s3:getObject",
                "ReaderConfig": {
                  "InputType": "CSV",
                  "CSVHeaderLocation": "FIRST_ROW"
                },
                "Parameters": {
                  "Bucket": "123456789012-stepfunction-redrive",
                  "Key": "tables.csv"
                }
              },
              "ResultPath": null,
              "End": true
            }
          }

Önkoşullar

Çözümü dağıtmak için aşağıdaki önkoşullara ihtiyacınız vardır:

CloudFormation şablonunu başlatın

AWS CloudFormation'ı kullanarak çözüm kaynaklarını dağıtmak için aşağıdaki adımları tamamlayın:

  1. Klinik Yığını Başlat CloudFormation yığınını başlatmak için:
  2. Bir yığın adı girin.
  3. altındaki tüm onay kutularını seçin Yetenekler ve dönüşümler.
  4. Klinik Yığın oluştur.

CloudFormation şablonu, aşağıdakiler de dahil olmak üzere birçok kaynak oluşturur:

  • Daha önce Step Functions iş akışı olarak açıklanan veri hattı
  • Dışa aktarılan verileri ve tabloların meta verilerini Amazon RDS'de depolamak için bir S3 klasörü
  • DynamoDB'deki bir ürün kataloğu tablosu
  • Önceden yüklenmiş tablolara sahip PostgreSQL için bir RDS veritabanı örneği
  • RDS tablosunu tarayan ve bir AWS Glue Veri Kataloğu oluşturan bir AWS Glue tarayıcısı
  • Verileri RDS tablosundan bir S3 klasörüne aktarmak için parametrelendirilmiş bir AWS Glue işi
  • Verileri DynamoDB'den bir S3 klasörüne aktarmak için Lambda işlevi

Başarısızlığı simüle edin

Çözümü test etmek için aşağıdaki adımları tamamlayın:

  1. Step Functions konsolunda, öğesini seçin. Devlet makineleri Gezinti bölmesinde.
  2. Adı verilen iş akışını seçin ETL_Process.
  3. İş akışını varsayılan girişle çalıştırın.

Birkaç saniye içinde iş akışı dağıtılmış harita durumunda başarısız olur.

Harita çalıştırmaları ve alt iş akışları için Step Functions iş akışı yürütme olaylarına erişerek harita çalıştırma hatalarını inceleyebilirsiniz. Bu örnekte, istisnanın AWS Glue'daki Glue.ConcurrentRunsExceededException nedeniyle olduğunu tanımlayabilirsiniz. Hata, bir AWS Glue işini çalıştırmak için yapılandırılandan daha fazla eşzamanlı istek olduğunu gösterir. Dağıtılmış harita, Amazon S3'teki tablo meta verilerini okur ve .csv dosyasındaki satır sayısı kadar AWS Glue işini çağırır, ancak AWS Glue işi, oluşturulduğunda 3 eşzamanlılığıyla ayarlanır. Bu, alt iş akışı hatasıyla sonuçlandı ve hatayı dağıtılmış harita durumuna ve ardından paralel duruma basamaklandırdı. DynamoDB tablosunu getirmek için paralel durumdaki diğer adım başarıyla yürütüldü. Paralel durumdaki herhangi bir adım başarısız olursa, basamaklı başarısızlıkta görüldüğü gibi tüm durum başarısız olur.

Dağıtılmış haritayla arızaları giderin

Varsayılan olarak, bir durum bir hata bildirdiğinde Step Functions iş akışının başarısız olmasına neden olur. Dağıtılmış harita durumuyla bu hatayı gidermenin birden fazla yolu vardır:

  • Step Functions şunları yapmanızı sağlar: hataları yakalayın, hataları yeniden deneyin ve geri dönün Hataları incelikle ele almak için başka bir duruma. Aşağıdaki koda bakın:
    Retry": [
                          {
                            "ErrorEquals": [
                              "Glue.ConcurrentRunsExceededException "
                            ],
                            "BackoffRate": 20,
                            "IntervalSeconds": 10,
                            "MaxAttempts": 3,
                            "Comment": "Exception",
                            "JitterStrategy": "FULL"
                          }
                        ]
    

  • Bazen işletmeler başarısızlıkları tolere edebilir. Bu, özellikle milyonlarca öğeyi işlerken ve veri kümesinde veri kalitesi sorunları beklediğiniz durumlarda geçerlidir. Varsayılan olarak, harita durumu yinelemesi başarısız olduğunda diğer tüm yinelemeler iptal edilir. Dağıtılmış haritayla, başarısız öğelerin maksimum sayısını veya yüzdesini hata eşiği olarak belirtebilirsiniz. Arıza tolere edilebilir düzeydeyse dağıtılmış harita arızalanmaz.
  • Dağıtılmış harita durumu, alt iş akışlarının eşzamanlılığını kontrol etmenize olanak tanır. Eşzamanlılığı AWS Glue iş eşzamanlılığıyla eşleyecek şekilde ayarlayabilirsiniz. Bu eşzamanlılığın iş akışı yürütme düzeyinde geçerli olmadığını, yalnızca iş akışı yürütme düzeyinde geçerli olduğunu unutmayın.
  • Hatanın temel nedenini düzelttikten sonra, başarısız durumu arıza noktasından yeniden yönlendirebilirsiniz.

Başarısız durumu yeniden sürün

Örnek çözümdeki sorunun temel nedeni AWS Glue işi eşzamanlılığıdır. Başarısız durumu yeniden yöneterek bu sorunu çözmek için aşağıdaki adımları tamamlayın:

  1. AWS Glue konsolunda adlı işe gidin ExportsTableData.
  2. Üzerinde İş detayları sekme, altında Gelişmiş özellikler, Güncelleme Maksimum eşzamanlılık 5 için.

Yeniden sürücü özelliğinin başlatılmasıyla, yürütmeleri yeniden başlatmak için yeniden sürücüyü kullanabilirsiniz. standart iş akışları bu son 14 gün içinde başarıyla tamamlanmadı. Bunlar arasında başarısız olan, durdurulan veya zaman aşımına uğrayan çalıştırmalar yer alır. Başarısız bir iş akışını yalnızca son başarılı olmayan durumla aynı girişi kullanarak başarısız olduğu adımdan yeniden yönlendirebilirsiniz. Başarısız bir iş akışını, ilk iş akışı yürütmesinden farklı bir durum makinesi tanımını kullanarak yeniden yönlendiremezsiniz. Başarısız durum başarılı bir şekilde yeniden yönlendirildikten sonra, Step Functions tüm aşağı akış görevlerini otomatik olarak çalıştırır. Dağıtılmış harita yeniden sürücüsünün nasıl çalıştığı hakkında daha fazla bilgi edinmek için bkz. Harita Çalıştırmalarını Yeniden Sürme.

Dağıtılmış harita, haritanın içindeki adımları alt iş akışları olarak çalıştırdığından, iş akışı IAM yürütme rolünün, dağıtılmış harita durumunu yeniden başlatmak üzere harita çalışmasını yeniden yönlendirmek için izne ihtiyacı vardır:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "states:RedriveExecution"
      ],
      "Resource": "arn:aws:states:us-east-2:123456789012:execution:myStateMachine/myMapRunLabel:*"
    }
  ]
}

Bir iş akışını başarısız olan adımdan program aracılığıyla yeniden yönlendirebilirsiniz. AWS Komut Satırı Arayüzü (AWS CLI) veya AWS SDK'sıveya görsel bir operatör deneyimi sağlayan Step Functions konsolunu kullanarak.

  1. Step Functions konsolunda, yeniden başlatmak istediğiniz başarısız iş akışına gidin.
  2. Üzerinde - Detaylar sekmesini seçin Arızadan yeniden sürüş.

AWS Glue işlerini çalıştırmak için yeterli eşzamanlılık olduğundan işlem hattı artık başarılı bir şekilde çalışıyor.

Bir iş akışını programlı olarak arıza noktasından yeniden yönlendirmek için, yeni ReDrive Yürütme API'si aksiyon. Aynı iş akışı son başarılı olmayan durumdan başlar ve ilk başarısız iş akışındaki son başarılı olmayan durumla aynı girişi kullanır. İş akışı tanımından ve önceki girişten yeniden sürülecek durum değişmez.

Farklı alt iş akışı türleriyle ilgili olarak aşağıdakilere dikkat edin:

  • Ekspres alt iş akışları için yeniden çalıştırma – Dağıtılmış bir harita içindeki hızlı iş akışları olan başarısız alt iş akışları için, yeniden sürücü özelliği, alt iş akışının başından itibaren sorunsuz bir şekilde yeniden başlatılmasını sağlar. Bu, haritanın tamamını yeniden başlatmadan, bireysel yinelemelere özgü sorunları çözmenize olanak tanır.
  • Standart alt iş akışları için yeniden çalıştırma – Standart iş akışları olan dağıtılmış bir harita içindeki başarısız alt iş akışları için yeniden tahrik özelliği, bağımsız standart iş akışlarıyla aynı şekilde çalışır. Başarısız durumu, her harita yinelemesinde başarısızlık noktasından itibaren yeniden başlatabilir ve halihazırda başarılı bir şekilde çalıştırılmış olan gereksiz adımları atlayabilirsiniz.

Sen kullanabilirsiniz Adım İşlevleri durum değişikliği bildirimleri ile Amazon EventBridge Arıza durumunda e-posta göndermek gibi arıza bildirimleri için.

Temizlemek

Kaynaklarınızı temizlemek için AWS CloudFormation konsolu aracılığıyla CloudFormation yığınını silin.

Sonuç

Bu yazıda, başarısız adımı arıza noktasından yeniden başlatarak, dağıtılmış bir haritada başarısız bir adımı yeniden sürmek için Step Functions yeniden sürüş özelliğini nasıl kullanacağınızı gösterdik. Dağıtılmış harita durumu, sunucusuz uygulamalarınızdaki büyük ölçekli paralel iş yüklerini koordine eden iş akışları yazmanıza olanak tanır. Step Functions, dağıtılmış harita içindeki adımları alt iş akışları olarak maksimum 10,000 paralellik ile çalıştırır; bu, birçok AWS hizmeti tarafından desteklenen eşzamanlılığın çok üzerindedir.

Dağıtılmış harita hakkında daha fazla bilgi edinmek için bkz. Adım Fonksiyonları – Dağıtılmış Harita. İş akışlarını yeniden yönlendirme hakkında daha fazla bilgi edinmek için bkz. İnfazların yeniden gerçekleştirilmesi.


Yazarlar Hakkında

Sriharsh Adari Amazon Web Services'te (AWS) Kıdemli Çözüm Mimarıdır ve müşterilerin AWS'de yenilikçi çözümler geliştirmek için iş sonuçlarından geriye doğru çalışmalarına yardımcı olur. Yıllar boyunca, birden fazla müşteriye sektör genelinde veri platformu dönüşümleri konusunda yardımcı oldu. Temel uzmanlık alanı Teknoloji Stratejisi, Veri Analitiği ve Veri Bilimidir. Boş zamanlarında Tenis oynamaktan hoşlanıyor.

Joe Morotti Amazon Web Services'te (AWS) Kıdemli Çözüm Mimarıdır ve AWS'de yenilikçi çözümler geliştirmek için Ortabatı ABD'deki Kurumsal müşterilerle birlikte çalışmaktadır. Çok çeşitli teknik roller üstlendi ve müşterilere mümkün olanın sanatını göstermekten hoşlanıyor. Yedi AWS sertifikası aldı ve AI/ML ile iletişim merkezi alanına tutku duyuyor. Boş zamanlarında ailesiyle birlikte yeni yerler keşfederek ve spor takımının performansını analiz ederek kaliteli zaman geçirmekten hoşlanıyor.

Uma Ramadoss Amazon Web Services'te Sunucusuz platforma odaklanan uzman bir Çözüm Mimarıdır. Lambda, EventBridge, Step Functions ve Amazon MWAA gibi hizmetleri kullanarak müşterilerin olaya dayalı bulutta yerel uygulamaları ve modern iş akışlarını tasarlamasına ve çalıştırmasına yardımcı olmaktan sorumludur.

spot_img

En Son İstihbarat

VC Kafe

VC Kafe

spot_img