Program
Veri iş akışları ve veri hatları, görevlerin doğru sırayla yürütülmesini garanti etmek için çoğu zaman hassas bir koordinasyon gerektirir. Yönlendirilmiş Çembersiz Grafik (DAG), bu iş akışlarını verimli şekilde yönetmek ve hatalardan kaçınmak için güçlü bir araçtır.
Bu yazıda, DAG'leri ve veri mühendisliğindeki önemlerini inceleyecek, bazı kullanım alanlarını gözden geçirecek ve Airflow kullanarak uygulamalı bir örnek üzerinden nasıl kullanılacaklarını anlayacağız.
DAG nedir?
Bir DAG'in ne olduğunu anlamak için önce bazı temel kavramları tanımlayalım. Bilgisayar biliminde, graf, düğümler ve kenarlardan oluşan doğrusal olmayan bir veri yapısıdır. Düğümler tekil varlıkları veya nesneleri temsil ederken, kenarlar bu düğümleri birbirine bağlar ve aralarındaki ilişkileri ifade eder.
Yönlendirilmiş bir grafikte, bu kenarların belirli bir yönü vardır; bu da düğümler arasında tek yönlü bir ilişki olduğunu gösterir. Yani A düğümünden B düğümüne bir kenar varsa, bu A'dan B'ye bir bağlantı olduğunu, ancak B'den A'ya mutlaka bir bağlantı olmadığını ifade eder.

Yönlendirilmiş grafiklerin görsel açıklaması. Görsel kaynağı: Astronomer
Bir yol, yönlendirilmiş kenarlarla birbirine bağlanan düğümler dizisidir. Belirli bir düğümde başlar ve kenarların yönünü izleyerek başka bir düğüme ulaşır. Kenarların yönüne tutarlı biçimde uyulduğu sürece, bir yol tek bir düğümden çok sayıda düğüme uzanan herhangi bir uzunlukta olabilir.
Artık bazı temel tanımları yaptığımıza göre, DAG nedir görelim: DAG, yönlendirilmiş döngüleri olmayan bir yönlendirilmiş grafiktir; her düğüm belirli bir görevi, her kenar ise aralarındaki bağımlılığı gösterir.
Çembersiz grafiklerin görsel açıklaması. Görsel kaynağı: Astronomer
DAG'lerle ilgili kilit nokta, çembersiz olmalarıdır; yani bir düğümde başladığınızda yalnızca ileri gidebilirsiniz, önceki bir düğüme geri dönemezsiniz. Bu, görevlerin sonsuz döngülere yol açmadan sırayla yürütülmesini sağlar. DAG'ler sıklıkla hiyerarşik bir yapıya sahiptir; görevler seviyelere veya katmanlara ayrılır. Üst seviyedeki görevler genellikle alt seviyedekilerin tamamlanmasına bağımlıdır.
Veri Mühendisliğinde DAG'lerin Önemi
Bir veri mühendisi olarak ya da veri mühendisliği görevleri yürüten biri olarak, her adımı bir öncekine bağımlı olan karmaşık veri hatları kurma zorluğuyla sıkça karşılaşırsınız. İşte DAG'ler bu noktada devreye girer!
Görevleri düğümler, bağımlılıkları kenarlar olarak temsil edebildikleri için, DAG'ler mantıksal bir yürütme sırası dayatır ve görevlerin bağımlılıklarına göre ardışık olarak çalıştırılmasını sağlar. Bu, görevlerin sıradışı çalıştırılmasından kaynaklanan hata ve tutarsızlıkların önüne geçer. Ayrıca bir adım başarısız olursa, DAG'ler etkilenen görevleri belirleyip yeniden çalıştırabilir; bu da zaman ve emek tasarrufu sağlar.
Veri hatları kurmaya yeni başlıyorsanız veya temellerinizi güçlendirmek istiyorsanız, Understanding Data Engineering kursu harika bir başlangıçtır.
DAG'lerin çembersiz yapısı, onları veri hatları için ideal kılan temel özelliklerden biridir. Görevlerin sonsuz döngülere veya sistem kararsızlığına yol açabilecek özyinelemeli bağımlılıklara takılmadan yürütülmesini garanti ederler.
Basit bir veri hattı örneği düşünelim:
A, B, C, D ve E düğümleri ile bağımlılıklarının bulunduğu bu basit DAG'in yapısı. Görsel: Yazar.
Yukarıdaki DAG'de, A düğümü veri düzenleme adımını temsil eder; bu, çıkarılan verinin temizlenip ön işlemden geçirildiği veri temizleme adımını içerir. B ve C düğümleri, temizlenmiş verinin birbirinden bağımsız şekilde iki özelliğe dönüştürüldüğü özellik mühendisliği adımlarını temsil eder. D düğümü özelliklerin birleştirilmesini içerir. Son olarak E düğümü, dönüştürülmüş veri üzerinde bir makine öğrenmesi modelinin eğitildiği model eğitimi adımını temsil eder.
DAG, görevlerin içinde ne olduğuyla değil, hangi sırayla yürütülmeleri gerektiğiyle ilgilenir.
Ayrıca DAG'ler, özellikle dağıtık sistemlerde ve bulut ortamlarında, otomatik ve ölçeklenebilir veri iş akışları oluşturmanıza olanak tanır. Karmaşık veri işleme görevlerini daha küçük, bağımsız ve yönetilebilir alt görevlere bölerler; bu sayede paralel yürütme ve kaynakların verimli kullanımını mümkün kılarlar. Bu ölçeklenebilirlik, büyük veri kümeleri ve karmaşık veri hatlarıyla çalışırken özellikle önemlidir; maliyet etkin veri işlemeyi sağlar.
Son olarak, DAG'ler herhangi bir veri hattının görsel bir temsilini sağlayarak iş akışını anlamanıza ve iletişimini kolaylaştırmanıza yardımcı olur. Bu görsel açıklık, diğer ekip üyeleri veya teknik olmayan paydaşlarla çalışırken önemlidir. Veri akışını ve görevler arası bağımlılıkları anlayabilirseniz, sorunları tespit edip düzeltmek, kaynak kullanımını optimize etmek ve hatların iyileştirilmesine yönelik bilinçli kararlar almak daha kolaydır.
Python ile ETL ve ELT üzerine kurs, veri hatları oluşturma ve optimize etmede uygulamalı pratik için harika bir kaynaktır.
Veri Mühendisliğinde DAG'lerin Yaygın Kullanım Alanları
DAG'ler yaygın biçimde benimsenmiş ve veri mühendisliğinde farklı uygulamalara sahiptir. Önceki bölümde bunlardan bazılarını konuştuk. Şimdi, birkaçını daha ayrıntılı inceleyelim.
ETL hatları
DAG'lerin en yaygın uygulamalarından biri, Çıkarma, Dönüştürme ve Yükleme (ETL) süreçlerini orkestre etmektir. ETL hatları, verinin çeşitli kaynaklardan çıkarılmasını, uygun bir formata dönüştürülmesini ve hedef bir sisteme yüklenmesini içerir.
Örneğin, Apache Airflow ve Luigi gibi araçlar, ETL hatlarını verimli şekilde orkestre etmek için DAG'leri kullanır. Pratik bir kullanım örneği, bir CRM sisteminden veriyi entegre etmek, iş ihtiyaçlarınıza uyacak şekilde dönüştürmek ve analitik için bir Snowflake veri ambarına yüklemek olabilir.
Ayrıca, ETL süreçlerinizde görev çalışma sürelerini izlemek ve kaydetmek için DAG'lerden yararlanabilirsiniz. Bu, darboğazları veya optimizasyon gerektiren görevleri belirlemeye yardımcı olabilir.
Karmaşık iş akışlarının orkestrasyonu
DAG'ler, birden fazla görev ve bağımlılık içeren karmaşık veri iş akışlarını yönetmek için de idealdir. Örneğin, bir makine öğrenimi iş akışı; özellik mühendisliği, model eğitimi ve model dağıtımı gibi görevleri içerebilir.
Örneğin, Apache Airflow içindeki bir DAG, özellikler işlendiğinde özellik seçimi betiklerini çalıştırıp model eğitimini tetikleyebilir; böylece bağımlılık yönetimi ve tekrarlanabilirlik sağlanır.
Veri işleme hatları
DAG'ler, birden fazla kaynaktan gelen veri akışını yönetmek ve bunu değerli içgörülere dönüştürmek için veri işleme hatlarında yaygın olarak kullanılır. Örneğin, Apache Spark içindeki bir DAG, bir web sitesinden tıklama akışı verisini işleyebilir, oturum sürelerini hesaplamak için toplulaştırma gerçekleştirebilir ve içgörüleri bir gösterge paneline besleyebilir.
Spark'taki DAG'ler kullanıcılar tarafından açıkça tanımlanmaz; çerçeve tarafından dönüştürmelerin yürütmesini optimize etmek için dahili olarak oluşturulur.
Makine öğrenimi hatları
Makine öğreniminde DAG'ler, iş akışlarının yinelemeli ve modüler doğasını destekler. Farklı önişleme adımları, algoritmalar ve hiperparametrelerle deney yaparken hattı düzenli tutmanıza olanak tanırlar.
Kubeflow Pipelines ve MLflow gibi araçlar, makine öğrenimi iş akışlarını yönetmek için DAG'leri kullanır ve sorunsuz deney ve dağıtım imkânı sunar. Örneğin, veri sapması tespitiyle tetiklenen yeniden eğitim hatlarını etkinleştirmek için DAG'leri kullanabilir, böylece modellerinizin zaman içinde doğru ve ilgili kalmasını sağlayabilirsiniz.
Veri Mühendisliğinde DAG Yönetimi için Popüler Araçlar
DAG'leri etkili biçimde yönetip orkestre etmenize yardımcı olan çeşitli araçlar vardır. En popüler seçeneklerden bazılarını inceleyelim:
Apache Airflow
Apache Airflow, iş akışları oluşturma, zamanlama ve izleme için yaygın olarak kullanılan bir platformdur. Karmaşık veri hatlarını DAG'ler olarak tanımlamada ustadır. Airflow, bu DAG'leri görselleştirmek ve yönetmek için kullanıcı dostu bir arayüz sağlar; böylece veri iş akışlarını anlamak ve sorun gidermek kolaylaşır. Esnekliği ve ölçeklenebilirliği, onu pek çok veri mühendisliği ekibinin başvurduğu bir tercih haline getirmiştir.
Prefect
Prefect, veri iş akışlarının oluşturulmasını ve yönetimini basitleştiren modern bir orkestrasyon aracıdır. DAG'leri tanımlamak için Python tabanlı bir API sunar; bu da mevcut Python koduyla entegrasyonu kolaylaştırır. Prefect, otomatik yeniden denemeler, geriye dönük çalıştırmalar ve sağlam izleme gibi özelliklerle güvenilirlik ve gözlemlenebilirliği önceliklendirir.
Dask
Dask, dağıtık veri iş akışlarını yöneten bir Python paralel hesaplama kütüphanesidir. Hesaplamaları birden fazla çekirdek veya makineye paralelleştirebilir; bu da onu büyük ölçekli veri işleme görevleri için ideal kılar. Dask, görevleri zamanlamak ve koordine etmek için DAG tabanlı bir yürütme modeli kullanır; böylece kaynakların verimli kullanımını sağlar.
Kubeflow Pipelines
Kubeflow Pipelines, ölçeklenebilir makine öğrenimi iş akışları oluşturma ve dağıtma için açık kaynaklı bir platformdur. Veri önişlemeden model dağıtımına kadar uçtan uca iş akışlarını tanımlamak için DAG'leri kullanır. Kubernetes ile sıkı entegrasyonu, bulut ortamlarında iş akışları çalıştırmak için güçlü bir tercih olmasını sağlar. Kubeflow ayrıca, iş akışlarını yönetmek ve izlemek için görsel bir arayüz sunar; şeffaflık ve kontrol sağlar.
Dagster
Dagster, modern veri iş akışları için tasarlanmış bir orkestrasyon platformudur. Modülerlik ve tip güvenliğine vurgu yapar; bu da DAG'lerin test edilmesini ve bakımını kolaylaştırır. Dagster, Apache Spark, Snowflake ve dbt gibi popüler araçlarla entegre olur; bu da çeşitli teknolojiler kullanan veri mühendisliği ekipleri için mükemmel bir seçimdir.
Uygulamalı Örnek: Apache Airflow ile Basit Bir DAG Oluşturma
Apache Airflow'un kurulumu
Bir DAG oluşturmadan önce, Apache Airflow'u kurmanız gerekir. Bunu Docker ile veya pip gibi bir paket yöneticisiyle kurabilirsiniz:
pip install apache-airflow
Kurulumun ardından, Airflow web sunucusunu ve zamanlayıcısını yapılandırmanız gerekir. Bu, veritabanı bağlantılarının kurulup başlatılmasını ve web sunucusunun çalıştırılmasını içerir:
airflow db init
airflow webserver --port 8080
Basit bir DAG tanımlama
Airflow kurulduktan sonra DAG'inizi oluşturabilirsiniz. DAG'i ve görevlerini aşağıdaki gibi Python ile tanımlayabilirsiniz:
from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime
with DAG(
'simple_dag',
start_date=datetime(2023, 1, 1),
schedule_interval=None,
catchup=False
) as dag:
task1 = BashOperator(
task_id='task_1',
bash_command='echo "Hello, World!"'
)
task2 = BashOperator(
task_id='task_2',
bash_command='echo "This is task 2"'
)
task1 >> task2
Bu örnekte, basit DAG iki görev içerir: task_1 ve task_2. >> operatörü, görevler arasında bir bağımlılık kurar ve task_2'nin yalnızca task_1 tamamlandıktan sonra yürütülmesini sağlar.
DAG'i çalıştırma ve izleme
DAG'inizi tanımlayıp Airflow'a dağıttıktan sonra, web arayüzü üzerinden onunla etkileşim kurabilirsiniz.
DAG'ler iki şekilde çalışır:
- Manuel olarak ya da API aracılığıyla tetikleyebilirsiniz.
- Bir zamanlama tanımlayabilirsiniz. DAG'lerin zamanlamaya ihtiyacı yoktur, ancak
schedulebağımsız değişkeniyle bir zamanlama tanımlamak çok yaygındır.
Her DAG çalıştırdığınızda, DAG run adı verilen yeni bir DAG örneği oluşturulur. Aynı DAG için DAG Run'lar paralel olarak çalışabilir ve her birinin, görevlerin çalışacağı veri dönemini tanımlayan bir veri aralığı vardır.
Tetikledikten sonra, iş akışını görsel olarak temsil eden DAG görünümünde ilerlemesini izleyebilirsiniz.
Airflow arayüzünde DAG görünümü. Görsel kaynağı: Airflow
Graph View, belirli bir DAG run'a ayrıntılı bir bakış sunar; görev bağımlılıklarını ve yürütme sürelerini gösterir. Task Instances görünümü, durum, başlangıç ve bitiş zamanları ile günlükler dahil olmak üzere tekil görevler hakkında ayrıntılı bilgi sağlar. Hataları gidermek ve başarısızlıkların kök nedenini anlamak için görev günlüklerini inceleyebilirsiniz. Task Instances görünümü ayrıca görev sürelerini de gösterir; böylece olası performans sorunlarını belirleyebilirsiniz.
Sonuç
DAG'ler, veri mühendisliğinde temel bir kavramdır ve karmaşık iş akışlarını görsel ve yapısal olarak temsil etmenin bir yolunu sunar. Düğümleri, kenarları ve bağımlılıkları anlamak, veri hatlarını etkin şekilde tasarlayıp yönetmenize yardımcı olur.
DAG'ler, ETL süreçlerini orkestre etmek, veri işleme hatlarını yönetmek ve makine öğrenimi iş akışlarını otomatikleştirmek için yaygın biçimde kullanılır. DAG'leri etkili şekilde oluşturup yönetmek için Apache Airflow, Prefect ve Dask gibi araçlardan yararlanabilirsiniz. Bu araçlar, kullanıcı dostu arayüzler, zamanlama yetenekleri ve gelişmiş izleme, hata yönetimi ve ölçekleme özellikleri sunar.
Uygulamalı deneyim kazanmak için, Python ile Airflow üzerine bu giriş kursu DAG'leri etkili biçimde oluşturmayı ve yönetmeyi öğrenmenize yardımcı olabilir. Veri mühendisliği kavramları ve iş akışlarına daha geniş bir bakış için veri mühendisliğini anlama kursu mükemmel bir temel sunar!
SSS
DAG ile akış şeması arasındaki fark nedir?
DAG'ler ve akış şemaları her ikisi de süreçleri görselleştirir ancak:
- DAG'ler, görev bağımlılıklarına ve yürütme sırasına odaklanır; genellikle hesaplamalı iş akışlarında kullanılır.
- Akış şemaları, görev bağımlılıklarıyla sınırlı olmayan, karar verme süreçleri ve mantığın daha geniş bir görsel temsilini sunar.
DAG'ler gerçek zamanlı veri iş akışlarını yönetebilir mi?
Evet, Apache Airflow ve Prefect gibi birçok araç gerçek zamanlı veya gerçeğe yakın zamanlı veri iş akışlarını destekler. Örneğin, Airflow'un sensörleri veri gelişini izleyip iş akışlarını tetikleyebilirken, Prefect gerçek zamanlı tetikleyicilere dayalı dinamik görev yürütmeye olanak tanır.
DAG'lerle ilgili yaygın zorluklar nelerdir?
Yaygın zorluklar şunlardır:
- Karmaşıklığın yönetimi: Çok sayıda göreve sahip büyük iş akışları hata ayıklaması ve bakımı zor hale gelebilir.
- Performans darboğazları: Kötü optimize edilmiş DAG'ler görev yürütmelerinde gecikmelere neden olabilir.
- Araca özel öğrenme eğrisi: Airflow veya Prefect gibi araçlarda uzmanlaşmak zaman ve pratik gerektirebilir.
DAG'ler iş akışlarında hata yönetimini nasıl iyileştirir?
DAG'ler daha iyi hata yönetimini şu yollarla sağlar:
- Bağımlılıkları izleyerek görev hatalarının kök nedenini belirleme.
- Tüm iş akışını yeniden çalıştırmadan, yalnızca belirli başarısız görevlerin kısmi yeniden çalıştırılmasına izin verme.
- Airflow ve Prefect gibi araçlardaki izleme özellikleri aracılığıyla ayrıntılı günlükler ve hata bildirimleri sağlama.
İş akışı orkestrasyonu için DAG'lere alternatifler var mı?
DAG'ler popüler bir tercih olsa da, olay güdümlü mimariler veya durum makineleri gibi diğer modeller de iş akışlarını yönetebilir. Ancak bu alternatifler, özellikle karmaşık hatlar için, DAG'lerin sunduğu açıklık ve bağımlılık yönetimi yeteneklerinden yoksun olabilir.

