paint-brush
Apache DolphinScheduler'da İşçi Görevi Yürütme İşleminin Parçalanmasıile@williamguo
142 okumalar

Apache DolphinScheduler'da İşçi Görevi Yürütme İşleminin Parçalanması

ile William Guo9m2024/08/23
Read on Terminal Reader

Çok uzun; Okumak

Apache DolphinScheduler, görsel DAG işlemleri ve genişletilebilir eklentileriyle bilinen açık kaynaklı bir iş akışı planlama sistemidir. Bu makale, görev başlatmadan tamamlamaya kadar İşçi görevlerinin ayrıntılı yürütme sürecini inceler ve sistemin mimarisini, görev türlerini ve hata toleransı mekanizmalarını vurgular. İçerik, DolphinScheduler kullanarak iş akışlarını etkili bir şekilde yönetme ve optimize etme konusunda bilgi edinmek için önemlidir.
featured image - Apache DolphinScheduler'da İşçi Görevi Yürütme İşleminin Parçalanması
William Guo HackerNoon profile picture
0-item
1-item


Merhaba arkadaşlar, ben WhaleOps'ta kıdemli veri mühendisi ve Apache DolphinScheduler topluluğunun bir committer'ı ve PMC üyesi olan Cai Shunfeng'im. Bugün, Apache DolphinScheduler'ın Worker görevinin nasıl çalıştığını açıklayacağım.

Bu açıklama üç bölüme ayrılacaktır:


  1. Apache DolphinScheduler'a Giriş
  2. Apache DolphinScheduler'ın genel tasarımına genel bakış
  3. İşçi görevlerinin ayrıntılı yürütme süreci

Proje Tanıtımı

Apache DolphinScheduler , kurumsal düzeydeki senaryolara uygun, dağıtılmış, kolayca genişletilebilir, görsel iş akışı planlama açık kaynaklı bir sistemdir.



Görsel işlemler aracılığıyla iş akışları ve görevler için tam bir yaşam döngüsü veri işleme çözümü sunarak aşağıdaki temel işlevleri sağlar.

Temel Özellikler

  • Kullanımı kolay

  • Görsel DAG İşlemleri: Kullanıcılar, bileşenleri sayfaya sürükleyip bırakarak bunları bir DAG'a (Yönlendirilmiş Döngüsüz Grafik) düzenleyebilirler.

  • Eklenti Sistemi: Görev eklentileri, veri kaynağı eklentileri, uyarı eklentileri, depolama eklentileri, kayıt merkezi eklentileri ve cron job eklentileri vb. içerir. Kullanıcılar, iş gereksinimlerini karşılamak için eklentileri ihtiyaç duyduklarında kolayca genişletebilirler.


  • Zengin Kullanım Senaryoları

  • Statik Yapılandırma: İş akışı planlama, çevrimiçi ve çevrimdışı işlemler, sürüm yönetimi ve geri doldurma işlevlerini içerir.

  • Çalışma Zamanı İşlemleri: Duraklatma, durdurma, devam ettirme ve parametre değiştirme gibi işlevler sağlar.

  • Bağımlılık Türleri: Daha fazla senaryoya uyum sağlayarak zengin bir bağımlılık seçenekleri ve stratejileri kümesini destekler.

  • Parametre Geçişi: İş akışı düzeyinde başlangıç parametrelerini, genel parametreleri, görev düzeyinde yerel parametreleri ve dinamik parametre geçişini destekler.


  • Yüksek Güvenilirlik

  • Merkezi Olmayan Tasarım: Tüm servisler durumsuzdur ve sistem verimini artırmak için yatay olarak ölçeklenebilir.

  • Aşırı Yük Koruması ve Örnek Hata Toleransı:

  • Aşırı Yük Koruması: Çalışma sırasında, ana ve çalışan kendi CPU ve bellek kullanımını ve görev hacmini izler. Aşırı yüklenirlerse, geçerli iş akışı/görev işlemeyi duraklatır ve kurtarmadan sonra devam ederler.

  • Örnek Hata Toleransı: Ana/çalışan düğümler arızalandığında, kayıt merkezi hizmet düğümünü çevrimdışı olarak algılar ve iş akışı veya görev örnekleri için hata toleransı uygulayarak sistemin kendi kendini kurtarma yeteneğini mümkün olduğunca korur.

Genel Tasarım

Proje Mimarisi

Şimdi, genel tasarım arka planını tanıtalım. Aşağıda resmi web sitesinde sağlanan tasarım mimarisi diyagramı bulunmaktadır.


Mimari diyagramından Apache DolphinScheduler'ın birkaç ana bileşenden oluştuğunu görebiliriz:

  • API Bileşeni: API hizmeti öncelikle meta verileri yönetir, API hizmeti aracılığıyla kullanıcı arayüzüyle etkileşime girer veya iş akışı görevlerini ve iş akışının ihtiyaç duyduğu çeşitli kaynakları oluşturmak için API arayüzlerini çağırır.


  • Ana Bileşen: Ana bileşen, iş akışı örneklerinin denetleyicisidir ve komutları tüketmekten, bunları iş akışı örneklerine dönüştürmekten, DAG bölme işlemini gerçekleştirmekten, görevleri sırayla göndermekten ve görevleri çalışanlara dağıtmaktan sorumludur.


  • Worker Bileşeni: Worker, belirli görevlerin yürütücüsüdür. Görevleri aldıktan sonra, bunları farklı görev türlerine göre işler, ana bileşenle etkileşime girer ve görev durumunu raporlar. Özellikle, worker hizmeti veritabanıyla etkileşime girmez; yalnızca API, ana bileşen ve uyarı hizmetleri veritabanıyla etkileşime girer.


  • Uyarı Hizmeti: Uyarı hizmeti, farklı uyarı eklentileri aracılığıyla uyarılar gönderir. Bu hizmetler kayıt merkezine kaydolur ve ana bilgisayar ve çalışan, görevleri normal şekilde alabildiklerinden emin olmak için kalp atışlarını ve geçerli durumu periyodik olarak bildirir.

Usta ve İşçi Etkileşim Süreci

Usta ve işçi arasındaki etkileşim süreci şu şekildedir:

  • Görev Gönderimi: Ana makine DAG bölme işlemini tamamladıktan sonra görevleri veritabanına gönderir ve görevleri farklı dağıtım stratejilerine göre dağıtmak için uygun bir çalışan grubu seçer.


  • Görev Alımı: İşçi bir görevi aldıktan sonra, görevi durumuna göre kabul edip etmeyeceğine karar verir. Kabulün başarılı olup olmadığına dair geri bildirim sağlanır.


  • Görev Yürütme: İşçi görevi işler, durumu çalışır olarak günceller ve ana bilgisayara geri bildirimde bulunur. Ana bilgisayar, veritabanındaki görev durumunu ve başlangıç saati bilgilerini günceller.


  • Görev Tamamlanması: Görev tamamlandıktan sonra, çalışan ana bilgisayara bir bitiş olayı bildirimi gönderir ve ana bilgisayar bir ACK onayı döndürür. ACK alınmazsa, çalışan görev olayının kaybolmamasını sağlamak için tekrar denemeye devam eder.

İşçi Görev Alımı

İşçiye bir görev verildiğinde aşağıdaki işlemler gerçekleştirilir:

  • Ev sahibi bilgilerini doldurur.
  • Çalışan makinede günlük yolunu oluşturur.
  • Çalıştırılmak üzere iş parçacığı havuzuna gönderilen bir İşçi Görevi Yürütücüsü oluşturur.


İşçi aşırı yüklenip yüklenmediğini kontrol eder; eğer yüklenmişse görevi reddeder. Görev dağıtım başarısızlığı geri bildirimini aldıktan sonra, ana bilgisayar dağıtım stratejisine göre görev dağıtımı için başka bir işçi seçmeye devam eder.

İşçi Yürütme Süreci

İşçi görevlerinin belirli yürütme süreci aşağıdaki adımları içerir:

  1. Görev Başlatma: Görev için gerekli ortamı ve bağımlılıkları başlatır.
  2. Görev Yürütme: Belirli görev mantığını yürütür.
  3. Görev Tamamlama: Görev yürütme tamamlandıktan sonra, görev yürütme sonuçlarını ana düğüme bildirir.


Daha sonra, belirli görev yürütme sürecini ayrıntılı olarak açıklayacağız.


Görev yürütme başlamadan önce, ilk olarak bir bağlam başlatılır. Bu noktada, görevin başlangıç saati ayarlanır. Görevin doğruluğunu sağlamak için, zaman kaymasını önlemek amacıyla ana ve çalışan arasında zaman senkronizasyonu yapmak gerekir.


Daha sonra görev durumu çalışıyor olarak ayarlanır ve görevin çalışmaya başladığını bildirmek için ana bilgisayara geri bildirim gönderilir.


Çoğu görev Linux işletim sisteminde çalıştığı için kiracı ve dosya işleme gereklidir:

  • Kiracı İşleme: İlk olarak, kiracının var olup olmadığını kontrol eder. Yoksa, yapılandırmaya göre kiracıyı otomatik olarak oluşturup oluşturmayacağına karar verir. Bu, dağıtım kullanıcısının görev yürütme sırasında belirtilen kiracıya geçmek için sudo izinlerine sahip olmasını gerektirir.
  • Belirli Kullanıcılar : Bazı senaryolar için kiracıları değiştirmek gerekmez, sadece görevi belirli bir kullanıcı kullanarak yürütmek yeterlidir. Bu da sistem tarafından desteklenir.

Kiracıyı işledikten sonra, çalışan belirli yürütme dizinini oluşturur. Yürütme dizininin kök dizini yapılandırılabilir ve uygun yetkilendirme gerektirir. Varsayılan olarak, dizin izinleri 755 olarak ayarlanır.


Görev yürütme sırasında, AWS S3 veya HDFS kümelerinden dosya getirme gibi çeşitli kaynak dosyalarına ihtiyaç duyulabilir. Sistem, bu dosyaları sonraki görev kullanımı için çalışanın geçici dizinine indirir.


Apache DolphinScheduler'da parametre değişkenleri değiştirilebilir. Ana kategoriler şunlardır:

  • Dahili Parametreler: Öncelikle zaman ve tarihle ilgili parametrelerin değiştirilmesini içerir.
  • Kullanıcı Tanımlı Parametreler: İş akışında veya görevde kullanıcı tarafından ayarlanan parametre değişkenleri de buna göre değiştirilecektir.

Yukarıdaki adımlar sayesinde görevin yürütüleceği ortam ve gerekli kaynaklar hazır hale gelir ve görev resmi olarak yürütülmeye başlayabilir.

Farklı Görev Türleri

Apache DolphinScheduler'da, her biri farklı senaryolara ve gereksinimlere uygun çeşitli görev türleri desteklenir. Aşağıda, birkaç önemli görev türünü ve bunların belirli bileşenlerini tanıtıyoruz.


Bu bileşenler genellikle çeşitli betik dilleri ve protokolleri için uygun olan betik dosyalarını yürütmek için kullanılır:

  • Kabuk: Kabuk komut dosyalarını çalıştırır.
  • Python: Python betiklerini çalıştırır.
  • SQL: SQL ifadelerini yürütür.
  • Saklı Prosedür: Veritabanı saklı prosedürlerini yürütür.
  • HTTP: HTTP isteklerini gerçekleştirir.

Ticari versiyonu (WhaleScheduler) da JAR paketlerini çalıştırarak Java uygulamalarını çalıştırmayı destekliyor.

Mantık Görev Bileşenleri

Bu bileşenler mantıksal kontrol ve iş akışı yönetimini uygulamak için kullanılır:

  • Anahtar: Koşullu kontrol görevi.
  • Bağımlı: Bağımlılık görevi.
  • Altİşlem: Alt görev.
  • NextLoop (Ticari Sürüm): Finansal senaryolara uygun döngü kontrol görevi.
  • Tetikleyici Bileşen: Dosyaların veya verilerin var olup olmadığını izler.

Büyük Veri Bileşenleri

Bu bileşenler esas olarak büyük verinin işlenmesi ve analizi için kullanılır:

  • SeaTunnel: Büyük veri entegrasyonu ve işlenmesi için kullanılan WhaleTunnel'in ticari versiyonuna karşılık gelir.
  • AWS EMR: Amazon EMR entegrasyonu.
  • HiveCli: Hive komut satırı görevi.
  • Spark: Spark görevi.
  • Flink: Flink görevi.
  • DataX: Veri senkronizasyon görevi.

Konteyner Bileşenleri

Bu bileşenler, bir kapsayıcı ortamında görevleri çalıştırmak için kullanılır:

  • K8S: Kubernetes görevi.

Veri Kalitesi Bileşenleri

Veri kalitesinin sağlanması için kullanılır:

  • DataQuality: Veri kalitesini kontrol etme görevi.

Etkileşimli Bileşenler

Bu bileşenler veri bilimi ve makine öğrenimi ortamlarıyla etkileşim kurmak için kullanılır:

  • Jupyter: Jupyter Notebook görevi.
  • Zeppelin: Zeppelin Defteri görevi.

Makine Öğrenmesi Bileşenleri

Bu bileşenler makine öğrenimi görevlerinin yönetimi ve yürütülmesi için kullanılır:

  • Kubeflow: Kubeflow görevi.
  • MlFlow: MlFlow görevi.
  • Dvc: Veri Sürüm Kontrol görevi.

Genel olarak, Apache DolphinScheduler, betik yürütme, büyük veri işleme ve makine öğrenimi gibi alanları kapsayan üç ila dört düzine bileşeni destekler. Daha fazla bilgi için lütfen ayrıntılı belgeleri görüntülemek üzere resmi web sitesini ziyaret edin.

Görev Türü Soyutlama

Apache DolphinScheduler'da görev türleri, çeşitli çalışma zamanı ortamlarına ve ihtiyaçlarına uyacak şekilde birden fazla işleme moduna soyutlanır.

Aşağıda görev tiplerinin soyutlama ve yürütme sürecini detaylı olarak açıklıyoruz.


Çalışan, bir sunucuya dağıtılan bir JVM hizmetidir. Bazı betik bileşenleri (Shell ve Python gibi) ve yerel olarak çalıştırılan görevler (Spark Local gibi) için, çalıştırmak üzere ayrı bir işlem başlatırlar.


Bu noktada işçi, işlem kimliği (PID) aracılığıyla bu görevlerle etkileşime girer.


Farklı veri kaynakları farklı uyarlamalar gerektirebilir. SQL ve saklı prosedür görevleri için MySQL, PostgreSQL, AWS Redshift vb. gibi farklı veri kaynakları için soyutlanmış işleme yaptık. Bu soyutlama, farklı veritabanı türlerinin esnek bir şekilde uyarlanmasına ve genişletilmesine olanak tanır.


Uzak görevler , AWS EMR, SeaTunnel kümeleri, Kubernetes kümeleri vb. gibi uzak kümelerde yürütülen görevleri ifade eder. Worker bu görevleri yerel olarak yürütmez; bunun yerine bunları uzak kümelere gönderir ve durumlarını ve mesajlarını izler. Bu mod, ölçeklenebilirliğin gerekli olduğu bulut ortamları için özellikle uygundur.

Görev Yürütme

Günlük Koleksiyonu

Farklı eklentiler farklı işleme modları kullanır ve bu nedenle günlük toplama işlemi buna göre değişir:

  • Yerel İşlemler: İşlem çıktıları izlenerek kayıtlar tutulur.

  • Uzak Görevler: Günlükler, uzak kümeden (örneğin AWS EMR) görev durumu ve çıktısı periyodik olarak kontrol edilerek ve yerel görev günlüklerine kaydedilerek toplanır.


Parametre Değişkeni İkamesi

Sistem, dinamik olarak değiştirilmesi gereken herhangi bir parametre değişkenini belirlemek için görev günlüklerini tarar. Örneğin, DAG'daki Görev A, alt akış Görev B'ye geçirilmesi gereken bazı çıktı parametreleri üretebilir.

Bu işlem sırasında sistem logları okur ve gerektiği şekilde parametre değişkenlerini değiştirir.


Görev Kimliği Alınıyor

  • Yerel İşlemler: İşlem kimliği (PID) alınır.
  • Uzak Görevler: Uzak görevin kimliği (örneğin, AWS EMR Görev Kimliği) alınır.

Bu görev kimliklerini tutmak, daha fazla veri sorgusu ve uzaktan görev işlemlerine olanak tanır. Örneğin, bir iş akışı durdurulduğunda, çalışan görevi sonlandırmak için görev kimliği kullanılarak karşılık gelen iptal API'si çağrılabilir.


Hata Toleransı Yönetimi

  • Yerel İşlemler: Bir Çalışan düğümü başarısız olursa, yerel işlem bundan haberdar olmaz ve görevin yeniden gönderilmesi gerekir.
  • Uzak Görevler: Görev uzak bir kümede (örneğin AWS) çalışıyorsa, görevin durumu görev kimliği kullanılarak kontrol edilebilir ve görevi devralma girişimi yapılabilir. Başarılı olursa, görevi yeniden göndermeye gerek kalmaz ve bu da zamandan tasarruf sağlar.

Görev Yürütme tamamlanması

Bir görev yürütüldükten sonra, birkaç tamamlama eylemi gereklidir:

  • Görev Tamamlama Kontrolü: Sistem bir uyarının gönderilmesi gerekip gerekmediğini kontrol edecektir. Örneğin, bir SQL görevi için, sorgu sonuçları bir uyarıyı tetiklerse, sistem uyarı mesajını göndermek için RPC aracılığıyla uyarı hizmetiyle etkileşime girecektir.

  • Olay Geri Bildirimi: İşçi, görev tamamlama olayını (bitiş olayını) Ana Bilgisayara geri gönderecektir. Ana Bilgisayar, veritabanındaki görev durumunu günceller ve DAG durum geçişine devam eder.

  • Bağlam Temizleme: Worker, görevin başlangıcında oluşturulan görev bağlamını bellekten kaldıracaktır. Ayrıca görev yürütme sırasında oluşturulan dosya yollarını da temizleyecektir. Hata ayıklama modundaysa (geliştirme modu), bu dosyalar temizlenmeyecek ve başarısız görevlerin sorun giderilmesine olanak tanıyacaktır.


Bu adımlarla bir görev örneğinin tüm yürütme süreci tamamlanır.

Topluluk Katkısı

Apache DolphinScheduler ile ilgileniyorsanız ve açık kaynak topluluğuna katkıda bulunmak istiyorsanız, katkı yönergelerimize başvurabilirsiniz.


Topluluk, aşağıdakiler dahil ancak bunlarla sınırlı olmamak üzere aktif katkıları teşvik eder:

  • Kullanım sırasında karşılaşılan sorunları bildiriyoruz.
  • Dokümantasyon ve kod PR'lerinin sunulması.
  • Birim testleri (UT) ekleniyor.
  • Kod yorumlarının eklenmesi.
  • Hataları düzeltmek veya yeni özellikler eklemek.
  • Teknik makaleler yazmak veya Meetup'lara katılmak.

Yeni Katkıda Bulunanlar İçin Kılavuz

Yeni katkıda bulunanlar için, topluluğun GitHub sorunlarında good first issue olarak etiketlenen sorunları arayabilirsiniz. Bu sorunlar genellikle daha basittir ve ilk katkılarını yapan kullanıcılar için uygundur.


Özetle, Apache DolphinScheduler'ın genel tasarımını ve Worker görevlerinin detaylı yürütme sürecini öğrendik.

Umarım bu içerik Apache DolphinScheduler'ı daha iyi anlamanıza ve kullanmanıza yardımcı olur. Herhangi bir sorunuz varsa yorum bölümünden bana ulaşmaktan çekinmeyin.