Apache Airflow: Temelleri, Çalışma Prensipleri ve Kurulum Rehberi
1. Giriş
Apache Airflow, iş akışlarını (workflow) programatik olarak tanımlamayı, zamanlamayı ve denetlemeyi sağlayan açık kaynaklı bir araçtır. Bu makalede, Airflow’un ne olduğu, ne amaçla kullanıldığı, temel algoritması ve çalışma prensiplerine ek olarak, RedHat 9.5 tabanlı sistemler üzerinde 3 nodelu bir cluster kurulumu için adım adım uygulama rehberi bulacaksınız.
2. Airflow Nedir? Ne İçin Kullanılır?
Apache Airflow;
- İş Akışı Tanımlama: İş süreçlerini, görevleri ve bunların arasındaki bağımlılıkları Python kodu ile tanımlayarak Directed Acyclic Graphs (DAG) adı verilen grafiklerle ifade eder.
- Zamanlama ve Yürütme: Belirli aralıklarla veya istediğiniz zamanlarda otomatik olarak planlanmış görevleri çalıştırır.
- Monitor ve Denetleme: Web arayüzü üzerinden iş akışlarınızı izleyebilir, hata durumlarını inceleyebilir ve log’ları kontrol edebilirsiniz.
Airflow, özellikle veri işleme, ETL (Extract, Transform, Load) süreçleri, raporlama, model eğitimleri gibi kompleks pipeline’ların yönetimi ve otomasyonu için tercih edilir.
3. Airflow’un Temel Algoritması ve Çalışma Prensipleri
Airflow, iş akışlarını DAG (Directed Acyclic Graph) yapısı ile tanımlar. Bu yapıda;
- Görevler (Tasks): Her bir node, belirli bir işi temsil eder.
- Bağımlılıklar: Görevler arasındaki yönlü kenarlar, hangi işin önce çalıştırılması gerektiğini belirtir.
Temel Adımlar:
- DAG Tanımlanması: Kullanıcı, Python kullanarak hangi görevlerin hangi sırayla çalışacağını belirten bir dosya (DAG dosyası) oluşturur.
- Zamanlama (Scheduler): Airflow Scheduler, tanımlı DAG’leri izleyerek çalıştırma zamanlarını belirler. Bağımlılıkların karşılandığı görevleri, ilgili çalıştırma motoruna (Executor) gönderir.
- Yürütme (Executor & Workers): Executor (örneğin; CeleryExecutor) görevleri ilgili Worker nodlara dağıtır. Worker’lar, kendilerine gönderilen görevleri çalıştırır.
- Geri Bildirim ve İzleme: Görev tamamlandığında, sonuçlar merkezi veritabanına kaydedilir ve web arayüzü üzerinden görüntülenebilir.
Bu mekanizma, aynı anda birden fazla görevin paralel yürütülmesini ve büyük veri iş akışlarının zamanında tamamlanmasını sağlar.
4. Airflow’un Kullanım Alanları ve Avantajları
- Otomatik ETL Süreçleri: Veri toplama, temizleme ve yükleme işlemlerinin otomasyonu.
- Makine Öğrenimi İş Akışları: Model eğitim, değerlendirme ve dağıtım adımlarının programatik yürütülmesi.
- Veri Entegrasyonu: Farklı veri kaynaklarından gelen verilerin entegre edilmesi ve senkronizasyonu.
- Esneklik: Python tabanlı tanımlamalar sayesinde kullanıcılar iş akışlarını kolayca özelleştirebilir.
Avantajları arasında modüler yapı, geniş eklenti ekosistemi ve kolay entegrasyon yetenekleri bulunmaktadır.
5. 3 Nodelu Airflow Cluster Kurulumu
Aşağıdaki adımlar, Airflow cluster kurulumu için hem temel hazırlık, hem de sistem yapılandırması ve servislerin başlatılmasını kapsamaktadır.
5.1. Ortak Sistem Hazırlıkları (Tüm Nodlarda)
Her nodda ilk olarak sistem paketleri güncellenmeli, gerekli araçlar ve Airflow kullanıcısı oluşturulmalıdır.
# Her nodda sistem paketlerini güncelle
sudo dnf update -y
# Gerekli paketleri yükle
sudo dnf install -y python3-devel python3-pip gcc gcc-c++ kernel-devel make
sudo dnf groupinstall -y "Development Tools"
# Airflow kullanıcısını oluştur
sudo useradd -m -d /opt/airflow -s /bin/bash airflow
# /opt/airflow dizin yapısını oluştur ve izinleri ayarla
sudo mkdir -p /opt/airflow/{dags,logs,plugins}
sudo chown -R airflow:airflow /opt/airflow
# Airflow kullanıcısı olarak Python sanal ortam oluşturma
sudo su - airflow
python3 -m venv airflow_env
source airflow_env/bin/activate
# pip'i güncelle ve Airflow'u yükle
pip install --upgrade pip
pip install 'apache-airflow==2.10.4' \
--constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.10.4/constraints-3.9.txt"
# Celery ve diğer eklentileri yükle
pip install 'apache-airflow[celery]' \
'apache-airflow[redis]' \
'apache-airflow[postgres]'
5.2. Airflow Yapılandırması
Tüm nodlarda, /opt/airflow/airflow.cfg
yapılandırma dosyası düzenlenmelidir. Eğer dosya mevcut değilse, airflow config list
komutu ile oluşturulabilir.
vi /opt/airflow/airflow.cfg
Aşağıdaki örnek ayarlar, temel konfigürasyonu içermektedir:
[core]
executor = CeleryExecutor
sql_alchemy_conn = postgresql+psycopg2://airflow:airflow123@192.168.1.107:5432/airflow_db
load_examples = False
[celery]
broker_url = redis://192.168.1.108:6379/0
result_backend = db+postgresql+psycopg2://airflow:airflow123@192.168.1.107:5432/airflow_db
[webserver]
base_url = http://192.168.1.109:8080
web_server_host = 0.0.0.0
rate_limit_storage_url = redis://192.168.1.108:6379/0
[scheduler]
dag_dir_list_interval = 30
5.3. PostgreSQL Veritabanı ve Kullanıcı Oluşturulması
Airflow’un merkezi veritabanı olarak kullanılacak PostgreSQL’de aşağıdaki adımları uygulayın:
- PostgreSQL Terminaline Giriş:
sudo -u postgres psql
- SQL Komutları ile Veritabanı ve Kullanıcı Oluşturma:
CREATE DATABASE airflow_db;
CREATE USER airflow WITH PASSWORD 'airflow123';
ALTER ROLE airflow SET client_encoding TO 'utf8';
ALTER ROLE airflow SET default_transaction_isolation TO 'read committed';
ALTER ROLE airflow SET timezone TO 'UTC'; GRANT ALL PRIVILEGES ON DATABASE airflow_db TO airflow; \q
5.4. Airflow Yönetici Kullanıcısının Oluşturulması
Airflow arayüzüne erişim ve yönetim için aşağıdaki komut ile kullanıcı oluşturun:
airflow users create \
--username admin \
--firstname Admin \
--lastname Admin \
--role Admin \
--email admin@example.com \
--password admin
5.5. Master Node – Airflow Webserver ve Scheduler Servislerinin Yapılandırılması
Master Node üzerinde, Airflow webserver ve scheduler servislerinin otomatik başlatılması için systemd servis dosyaları oluşturun.
Airflow Webserver Servisi
sudo tee /etc/systemd/system/airflow-webserver.service <<EOF
[Unit]
Description=Airflow webserver
After=network.target
[Service]
Environment="PATH=/opt/airflow/airflow_env/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
User=airflow
Group=airflow
Type=forking
ExecStart=/opt/airflow/airflow_env/bin/airflow webserver
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
Airflow Scheduler Servisi
sudo tee /etc/systemd/system/airflow-scheduler.service <<EOF
[Unit]
Description=Airflow scheduler
After=network.target
[Service]
Environment="PATH=/opt/airflow/airflow_env/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
User=airflow
Group=airflow
Type=forking
ExecStart=/opt/airflow/airflow_env/bin/airflow scheduler
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
5.6. Worker Node – Celery Worker Servisinin Yapılandırılması
Worker node’larda, görevleri yürütecek Celery Worker servisini oluşturun:
sudo tee /etc/systemd/system/airflow-worker.service <<EOF
[Unit]
Description=Airflow celery worker
After=network.target
[Service]
Environment="PATH=/opt/airflow/airflow_env/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
User=airflow
Group=airflow
Type=simple
ExecStart=/opt/airflow/airflow_env/bin/airflow celery worker
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
5.7. Servislerin Başlatılması
Airflow servislerini başlatmak için iki yöntem mevcuttur.
a. Komut Satırı Üzerinden Başlatma
# Webserver'ı 8080 portuyla başlatma (ön planda)
airflow webserver -p 8080
# veya arka planda başlatma
airflow webserver -D
# Scheduler'ı arka planda başlatma
airflow scheduler -D
b. Systemd Kullanarak Başlatma
Master Node:
sudo systemctl daemon-reload
sudo systemctl enable airflow-webserver airflow-scheduler
sudo systemctl start airflow-webserver airflow-scheduler
Worker Node:
sudo systemctl daemon-reload
sudo systemctl enable airflow-worker
sudo systemctl start airflow-worker
5.8. Güvenlik Duvarı Ayarları
Master Node üzerinde servislerin kullanacağı portların dış erişime açılması gerekmektedir:
sudo firewall-cmd --permanent --add-port=8080/tcp # Webserver
sudo firewall-cmd --permanent --add-port=5432/tcp # PostgreSQL
sudo firewall-cmd --permanent --add-port=5555/tcp # Flower (opsiyonel)
sudo firewall-cmd --permanent --add-port=6379/tcp # Redis
sudo firewall-cmd --reload
6. Örnek DAG
Aşağıda, Airflow kurulumu için örnek bir DAG tanımı ve bu DAG çalıştırıldığında elde edilebilecek örnek çıktıların nasıl görüneceğine dair adım adım örnekler bulabilirsiniz.
6.1. Örnek DAG Tanımı
Bu örnekte, basit bir DAG tanımı bulunmaktadır. DAG içerisinde üç görev yer almaktadır:
- start: Başlangıç görevi (DummyOperator)
- hello_task: Komut çalıştıran görev (BashOperator)
- end: Bitiş görevi (DummyOperator)
DAG tanımını, Airflow’un dags
klasöründe örneğin /opt/airflow/dags/ornek_dag.py
isimli dosyaya ekleyebilirsiniz:
from datetime import datetime
from airflow import DAG
from airflow.operators.bash import BashOperator
from airflow.operators.dummy import DummyOperator
default_args = {
'owner': 'airflow',
'start_date': datetime(2023, 1, 1),
}
with DAG(
dag_id='ornek_dag',
default_args=default_args,
schedule_interval='@daily',
catchup=False,
description="Airflow üzerinde basit bir örnek DAG tanımı"
) as dag:
start = DummyOperator(
task_id='start'
)
hello_task = BashOperator(
task_id='hello_task',
bash_command='echo "Hello, Airflow!"'
)
end = DummyOperator(
task_id='end'
)
start >> hello_task >> end
Bu dosyayı ekledikten sonra, Airflow web arayüzünde ornek_dag
adlı DAG otomatik olarak listelenecektir.
6.2. DAG Çalıştırma ve Beklenen Çıktılar
DAG’iniz çalıştığında, her bir görevin loglarında hangi çıktıları alabileceğinizi aşağıda görebilirsiniz:
- start Görevi:
Bu, sadece bir dummy görevidir; herhangi bir işlem yapılmaz fakat görevin başladığı ve tamamlandığı loglanır. - hello_task Görevi:
Bu görev,echo "Hello, Airflow!"
komutunu çalıştırır. Çalışma esnasında loglarda aşağıdaki gibi bir çıktı alabilirsiniz:[2023-10-05 12:00:00,000] {bash_operator.py:123} INFO - Running command: echo "Hello, Airflow!" Hello, Airflow! [2023-10-05 12:00:00,500] {bash_operator.py:141} INFO - Command succeeded.
- end Görevi:
Bu görev de bir dummy görevidir ve görev tamamlandığında basit bir tamamlanma mesajı loglanır.
Airflow web arayüzündeki “Task Instance” lockup kısmından ilgili görevlerin durumlarını (başarılı, başarısız vs.) ve log detaylarını inceleyebilirsiniz.
6.3. Özet
- Örnek DAG tanımını
/opt/airflow/dags/ornek_dag.py
dosyasına ekleyin. - Airflow web arayüzünden DAG’i etkinleştirip çalıştırın.
- Çalışma sırasında
hello_task
görevinin loglarında “Hello, Airflow!” mesajını görüntüleyin.
7. Sonuç
Airflow hem iş akışlarınızı programatik olarak tanımlamanızı hem de bu akışları zamanlamanızı sağlayan güçlü bir platformdur. Üstteki genel bilgilerde:
- Airflow’un temel yapısına ve algoritmasına: DAG yapısı, scheduler’ın görevleri kontrol etmesi, executor ve worker’ların paralel görev yürütmesi gibi konulara değinilmiş,
- Kullanım alanlarına: Veri işleme, ETL, makine öğrenimi pipeline’ları gibi uygulamalara örnekler verilmiş,
- Ayrıntılı cluster kurulumu: Master (webserver ve scheduler) ile worker node’larda yapılması gereken işlemler adım adım anlatılmıştır.
Bu rehber sayesinde, RedHat 9.5 tabanlı sistemler üzerinde 3 nodelu bir Airflow cluster’ı kurarak, iş akışlarınızı otomatikleştirip merkezi bir şekilde yönetebilirsiniz. Herhangi bir aksaklık durumunda log dosyaları ((/opt/airflow/logs)) aracılığıyla hata ayıklaması yapabilir, web arayüzü üzerinden sistem durumunu kontrol edebilirsiniz.
Başarılı ve sorunsuz bir kurulum dilerim!
Apache Airflow çözümlerimiz için bizimle iletişime geçebilirsiniz.