Apache Oozie Eğitimi: İş Akışı Diyagramı, Zamanlayıcı
⚡ Akıllı Özet
Apache Oozie, Hadoop için bağımlı işleri Yönlendirilmiş Döngüsel Olmayan Grafikler (Directed Acyclic Graphs) olarak çalıştıran, MapReduce, Pig ve Hive eylemleri için bir iş akışı motorunu zaman ve veri kullanılabilirliğine göre çalışan bir koordinatör motoruyla birleştiren bir iş akışı zamanlayıcısıdır.
Apache Oozie nedir?
Apache Oozie, bir iş akışı zamanlayıcısıdır. Hadoop'unBu, bağımlı işlerin iş akışını yöneten bir sistemdir. Burada, kullanıcıların Hadoop'ta paralel ve sıralı olarak çalıştırılabilen iş akışlarının Yönlendirilmiş Döngüsüz Grafiklerini (Directed Acyclic Graphs) oluşturmalarına izin verilir.
İki bölümden oluşur:
- İş akışı motoru: İş akışı motorunun sorumluluğu, Hadoop işlerinden oluşan iş akışlarını depolamak ve çalıştırmaktır, örneğin: Harita indirgeme, Domuz, kovan.
- Koordinatör motoru: Önceden tanımlanmış zaman çizelgelerine ve veri kullanılabilirliğine bağlı olarak iş akışı görevlerini yürütür.
Oozie ölçeklenebilir bir yapıya sahiptir ve bir Hadoop kümesinde binlerce iş akışının (her biri düzinelerce işten oluşur) zamanında yürütülmesini yönetebilir. Aşağıdaki diyagram, zamanlayıcının kümeye göre konumunu ve yönettiği işleri göstermektedir.
Oozie oldukça esnek bir yapıya sahip. İşlemleri kolayca başlatabilir, durdurabilir, askıya alabilir ve yeniden çalıştırabilirsiniz. Oozie, başarısız iş akışlarını yeniden çalıştırmayı çok kolaylaştırıyor. Kesinti veya arıza nedeniyle kaçırılan veya başarısız olan işleri yakalamanın ne kadar zor olabileceğini kolayca anlayabilirsiniz. Hatta belirli bir başarısız düğümü atlamak bile mümkün.
Proje durumu: Apache Oozie, Apache Yazılım Geliştirme Şirketi tarafından kullanımdan kaldırıldı. Foundation Şubat 2025'te ve taşınma Apache Çatı Katı Nisan 2025'te tamamlandı. Son sürüm Şubat 2021 tarihli 5.2.1 sürümü olarak kaldı ve kaynak deposu artık salt okunur durumda. Mevcut kümeler hala bunu çalıştırıyor, bu nedenle aşağıdaki mekanizmaları bilmekte fayda var, ancak yeni işlem hatları genellikle Apache Airflow üzerine kuruluyor.
Oozie nasıl çalışır?
Oozie, küme içinde bir servis olarak çalışır ve istemciler, anında veya daha sonra işlenmek üzere iş akışı tanımları gönderir.
Oozie iş akışı, eylem düğümlerinden ve kontrol akışı düğümlerinden oluşur.
Bir eylem düğümü, bir iş akışı görevini temsil eder; örneğin, dosyaları bir yere taşımak. HDFSMapReduce, Pig veya Hive işi çalıştırmak, veri içe aktarmak için kepçeveya bir shell betiği ya da yazılmış bir program çalıştırmak Java.
Bir kontrol akışı düğümü, koşullu mantık gibi yapıları mümkün kılarak eylemler arasındaki iş akışı yürütmesini kontrol eder; bu sayede önceki bir eylem düğümünün sonucuna bağlı olarak farklı dallar izlenebilir.
Başlangıç Düğümü, Bitiş Düğümü ve Hata Düğümü bu düğüm kategorisine girer.
- Düğümü Başlat iş akışı işinin başlangıcını belirtir.
- Bitiş Düğümü İşin sonunu işaret eder.
- Hata Düğümü Bir hatanın meydana geldiğini ve yazdırılacak ilgili hata mesajını belirtir.
Bir iş akışının yürütülmesinin sonunda, Oozie istemciyi iş akışının durumuyla ilgili olarak güncellemek için bir HTTP geri çağırma işlevi kullanır. Bir eylem düğümüne giriş veya çıkış da geri çağırma işlevini tetikleyebilir.
Oozie Kontrol Düğümleri ve Eylem Türleri
Başlangıç, bitiş ve hata noktalarının ötesinde, iş akışı XML'i, grafiği şekillendiren küçük bir kontrol düğümü sözlüğünü destekler.
- karar: Bir ifadeyi değerlendirir ve iş akışını çeşitli dallardan birine yönlendirir; bu, switch ifadesine eşdeğerdir.
- çatal: İşlem yolunu ikiye bölerek iki veya daha fazla eylemin paralel olarak çalışmasını sağlar.
- katılmak: Eşleşen her bir dalın tamamlanmasını bekler ve ardından devam eder.
- öldürmek: İş akışını derhal sonlandırır ve hata mesajını kaydeder.
Eylem düğümleri, işin kendisini kapsar ve her birinin kendi XML öğesi vardır:
- MapReduce, Pig, Hive ve Sqoop Bu işlemler ilgili Hadoop işini başlatır.
- Java Küme üzerinde ana bir sınıf çalıştırır; kabuk hem de ssh Komut dosyalarını çalıştır.
- fs HDFS ev temizlikçisi görevini yerine getiriyorping Taşıma, silme, mkdir ve chmod gibi komutlar.
- E-posta Alıcılara bildirim gönderir ve alt iş akışı başka bir iş akışı uygulamasını çağırır.
Örnek İş Akış Şeması
Aşağıdaki diyagram tracBu, başlangıç düğümünden başlayarak, bir MapReduce eylemi üzerinden, ya bitiş düğümüne ya da eylem başarısız olduğunda hata yoluna kadar uzanan küçük bir iş akışıdır.
Balçıkla Yapılan İş Türleri
Oozie, iş akışını üç seviyede tanımlar. Her katman bir altındaki katmanı sarar, bu nedenle bir paket nihayetinde birçok bireysel iş akışını kontrol eder.
| Iş türü | Neyi tanımlar? | Tetikleyen |
|---|---|---|
| İş Akışı | workflow.xml dosyasında yazılmış, eylem ve kontrol düğümlerinden oluşan yönlendirilmiş döngüsel olmayan bir grafik. | Manuel başvuru veya bir koordinatör |
| Koordinatör | Başlangıç zamanı, bitiş zamanı ve sıklığı belirtilmiş, tek bir iş akışı için tekrarlayan bir zamanlama. | Saat zamanı ve giriş verilerinin kullanılabilirliği |
| demet | Bir veri hattı olarak birlikte yönetilen koordinatör uygulamaları koleksiyonu. | Tüm koordinatörler için geçerli bir başlangıç saati belirlenmiştir. |
Bu ayrım pratikte önemlidir: bir iş akışı "ne çalışır" sorusuna, bir koordinatör "ne zaman çalışır" sorusuna ve bir paket ise "ne birlikte başlar ve biter" sorusuna cevap verir.
Oozie İş Akışı Uygulamasının Paketlenmesi ve Dağıtımı
Bir iş akışı uygulaması, iş akışı tanımını ve MapReduce Jar dosyaları, Pig komut dosyaları vb. gibi ilgili tüm kaynakları içerir. Uygulamaların basit bir dizin yapısını izlemesi ve Oozie'nin bunlara erişebilmesi için HDFS'ye dağıtılması gerekir.
Aşağıda örnek bir dizin yapısı gösterilmiştir:
<name of workflow>/
├── lib/
│ └── hadoop-examples.jar
└── workflow.xml
İş akışı tanım dosyası olan workflow.xml dosyasını en üst düzey dizinde (iş akışı adını taşıyan üst dizin) tutmak gereklidir. lib dizini, MapReduce sınıflarını içeren Jar dosyalarını içerir. Bu düzene uygun bir iş akışı uygulaması, Ant veya Maven gibi herhangi bir derleme aracıyla oluşturulabilir.
Bu tür bir derlemenin HDFS'ye kopyalanması için örneğin şu komut kullanılmalıdır:
% hadoop fs -put hadoop-examples/target/<name of workflow dir> name of workflow
Oozie İş Akışı Görevini Çalıştırma Adımları
Bu bölümde iş akışı işinin nasıl çalıştırılacağını göreceğiz. Bunu çalıştırmak için Oozie komut satırı aracını (Oozie sunucusuyla iletişim kuran bir istemci programı) kullanacağız.
1. OOZIE_'yi dışa aktarınURL Oozie komutuna hangi Oozie sunucusunu kullanacağını söyleyen ortam değişkeni (burada yerel olarak çalışan bir sunucu kullanıyoruz):
% export OOZIE_URL="http://localhost:11000/oozie"
2. İş akışı görevini şu komutu kullanarak çalıştırın:
% oozie job -config ch05/src/main/resources/max-temp-workflow.properties -run
-config seçeneği yerel bir öğeyi ifade eder Java iş akışı XML dosyasındaki parametrelerin tanımlarını içeren özellikler dosyasının yanı sıra Oozie'ye HDFS'deki iş akışı uygulamasının konumunu söyleyen oozie.wf.application.path.
Özellikler dosyasının örnek içeriği:
nameNode=hdfs://localhost:8020 jobTracker=localhost:8021 oozie.wf.application.path=${nameNode}/user/${user.name}/<name of workflow>
3. İş akışı görevinin durumunu öğrenin.
Bir iş akışının durumunu, '-info' seçeneğiyle birlikte 'job' alt komutunu kullanarak ve '-info'dan sonra iş kimliğini belirterek görebilirsiniz.
e.g., % oozie job -info <job id>
Çıktı, ÇALIŞIYOR, ÖLDÜRÜLDÜ veya BAŞARILI durumlarından birini gösterir.
4. Başarılı iş akışı yürütmesinin sonuçları, aşağıdaki gibi bir Hadoop komutu kullanılarak görülebilir:
% hadoop fs -cat <location of result>
Neden Oozie'yi kullanmalısınız?
Oozie'nin kullanılmasının temel amacı, Hadoop sisteminde işlenen farklı türdeki işleri yönetmektir.
İşler arasındaki bağımlılıklar, kullanıcı tarafından Yönlendirilmiş Döngüsüz Grafikler (Directed Acyclic Graphs) biçiminde belirtilir. Oozie bu bilgiyi alır ve iş akışında belirtildiği gibi doğru sırayla yürütülmelerini sağlar. Bu sayede, kullanıcının tüm iş akışını yönetmek için harcayacağı zamandan tasarruf sağlanır. Ayrıca, Oozie belirli bir işin yürütülme sıklığını belirleme olanağı da sunar.
Oozie'nin Özellikleri
- Oozie, bir istemci API'sine ve komut satırı arayüzüne sahiptir; bunlar, işleri başlatmak, kontrol etmek ve izlemek için kullanılabilir. Java uygulama.
- Web servis API'lerini kullanarak, işleri her yerden kontrol edebilirsiniz.
- Oozie, periyodik olarak çalışacak şekilde zamanlanmış görevleri yürütme olanağı sunar.
- Oozie, işler tamamlandığında e-posta bildirimi gönderme özelliğine sahiptir.
Oozie ve Apache Airflow karşılaştırması
Oozie'nin kullanım dışı kalması nedeniyle, günümüzde bir zamanlayıcıyı değerlendiren çoğu ekip, halihazırda kullandıkları sistemi Apache Airflow ile karşılaştırıyor. İki araç da aynı problemi zıt yönlerden çözüyor.
| Görünüş | Apaçi Oozie'si | Apache Hava Akışı |
|---|---|---|
| Tanım dili | XML olarak yazılmış iş akışları | DAG'ler şu şekilde yazılır: Python kod |
| kapsam | MapReduce, Pig, Hive ve Sqoop gibi Hadoop işlemleri etrafında geliştirilmiştir. | Bulut hizmetleri, veritabanları ve konteynerler için operatörler içeren genel amaçlı kullanım. |
| Çizelgeleme | Koordinatörlük işleri zaman ve veri kullanılabilirliğine bağlıdır. | Planlanmış aralıklar ve dış koşulları bekleyen sensörler. |
| Proje durumu | 2025'te Apache Çatı Katı'na emekli edildi; son sürüm 5.2.1 | Aktif olarak geliştirilen Apache üst düzey projesi |
Oozie, halihazırda çalıştırıldığı bir kümede daha basit bir seçenek olmaya devam ediyor çünkü işlemler Hadoop bileşenleriyle birebir eşleşiyor. Airflow ise özellikle bir işlem hattı Hadoop'un ötesine uzandığında, yeni her şey için pratik bir seçimdir.


