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:
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.
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.
Ş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şç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.
İşçiye bir görev verildiğinde aşağıdaki işlemler gerçekleştirilir:
İşç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 görevlerinin belirli yürütme süreci aşağıdaki adımları içerir:
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ı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:
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.
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:
Ticari versiyonu (WhaleScheduler) da JAR paketlerini çalıştırarak Java uygulamalarını çalıştırmayı destekliyor.
Bu bileşenler mantıksal kontrol ve iş akışı yönetimini uygulamak için kullanılır:
Bu bileşenler esas olarak büyük verinin işlenmesi ve analizi için kullanılır:
Bu bileşenler, bir kapsayıcı ortamında görevleri çalıştırmak için kullanılır:
Veri kalitesinin sağlanması için kullanılır:
Bu bileşenler veri bilimi ve makine öğrenimi ortamlarıyla etkileşim kurmak için kullanılır:
Bu bileşenler makine öğrenimi görevlerinin yönetimi ve yürütülmesi için kullanılır:
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.
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ü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
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
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.
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:
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.