Airflow ile Projeleri Nasıl Yürütebiliriz?

Hıdır Can Saltık
MLOpsTurkey
Published in
5 min readAug 4, 2022

Projelerin yönetilmesi ve orkestrasyonun sağlanması büyük önem arz etmektedir. Büyüyen veri setleri ve tasklar ile projelerin orkestrasyonunun sürdürülmesi güç hale gelmeye başlamıştır. Burada devreye Airflow girmektedir.

Airflow nedir?

Airflow uçtan uca projelerin çalışmasını ve hiyerarşik olarak tasklar halinde yürütülmesini sağlayan bir orkestrasyon aracıdır. Airflow ilk olarak Airbnb tarafından paylaşılmıştır. Daha sonradan Apache Software Foundation bünyesine katılmıştır. Projeyi yürütürken her bir task’ın hazırlanmasını ve loglanmasını sağlayarak, oluşabilecek hata yönetimi konusunda da “user friendly” bir araçtır.

Airflow taskları veya diğer bir tabirle süreçleri “DAG” (Directed Acylic Graph) denilen bir yapı ile sürdürmektedir. DAG’lerin testi Airflow üzerinde oldukça rahattır. Çünkü Airflow oluşabilecek herhangi bir hatanın veya çıktının loglanmasını sağladığından her bir DAG için bir log üretir ve bu log DAG’e özeldir. Ayrıca günümüz teknolojilerinde community konusu önemli olduğundan Airflow bu konuda güçlü bir community’e de sahiptir.

UI

Airflow UI kısmı “Flask” ile yazılmıştır. UI üzerinde her proje ayrı ayrı gösterilmektedir. Projelerin içinde ise yazılan script’e göre DAG’ler bulunmaktadır. Bu sayede projeler birbirinden bağımsız bir şekilde çalışabilmektedir. Airflow ekranının üst tarafında Airflow hakkında bilgilere ya da herhangi bir bilgiye ulaşılabilecek bir menü bulunmaktadır.

“DAGs” sekmesinde DAG’ler bulunmaktadır.

“Security” sekmesinde kullanıcı bilgileri, rol bilgileri gibi bilgilerin yönetildiği bir alan bulunmaktadır.

“Browse” sekmesinde DAG’lerin çalışmaları, logları vs. olan bilgiler tutulmaktadır.

“Admin” sekmesinde konfigürasyon, bağlantılar(Postgresql, mysql vs.) gibi bilgiler tutulmaktadır.

“Docs” sekmesinde Airflow için yazılmış olan dokümanlara ait bilgiler bulunmaktadır.

Konfigürasyon

Konfigürasyon konusuna gelecek olursak, Airflow bir config dosyası üzerinden bağlantıları yönetmektedir. Airflow kütüphane olarak yüklendiğinde otomatik olarak “airflow.cfg” olarak bu dosyayı da yüklemektedir. Bu config dosyası içinde oluşturulacak DAG’lerin bulunacağı dizin’in de ayarlandığı yollar bulunmaktadır. Bu sayede kişiye özgü Airflow akışları ve dizinleri oluşturulabilmektedir.

Aşağıda airflow.cfg dosyasının örnek bir kısmı bulunmaktadır.

Veritabanı

Veritabanı konusunda ise Airflow değişime açık bir araçtır. Default olarak SQLite kullanmaktadır. Kullanıcı kayıtlarının, giriş ve çıkışlarının, DAG’lerin loglarının vs. kaydı burada tutulmaktadır. Fakat tabii veritabanı istenilirse değiştirilebilir. Bu da config dosyası üzerinde başka bir veritabanı bağlantıları verilerek sağlanılabilir.

Airflow veritabanını Airflow’un kurulduğu dizin içinde tutmaktadır. Bunu da “airflow.db” olarak adlandırmaktadır.

DAG Yapısı

DAG yapısına gelecek olursak, operatörler aracılığıyla taskların çağrılmasını, bu taskların çalışma şeklini ve hiyerarşisini, projelerin çalışma zamanı ve sıklığı gibi ayarlamaların yapıldığı bir yapıdır. Airflow için ana merkez noktadır. Aşağıda bir DAG yapısı örneği bulunmaktadır.

“dag_id” ile Airflow UI’ında DAG’in hangi isim ile tutulacağı belirtilmektedir.

“schedule_interval” ile DAG’in ne kadar sıklıkla çalışacağı belirtilmektedir. Burada örnek olarak “@daily” verilerek projenin günlük bir şekilde çalışacağı belirtilebilir.

Operatörler

Yukarıdaki görsel Airflow’un sitesinden alınmıştır. Bu görselde DAG içinde kullanılabilecek operatörler bulunmaktadır. Yukarıdaki görseller bir örnektir. Bunlar dışında da operatörler bulunmaktadır. Bu operatörler ile taskların tetiklenerek çalışması sağlanmaktadır. Örnek olarak aşağıda çok kullanılan operatörleri açıklamaya çalışacağım.

PythonOperator: DAG scriptinin olduğu proje içerisinde veya başka bir scriptte yer alan bir fonksiyonun çağrılarak çalıştırılmasını sağlamaktadır.

“task_id” ile DAG içinde task’ın hangi ad ile tutulacağı belirtilmektedir.

“python_callable” ile çağrılacak olan fonksiyonun ismi belirtilmektedir.

Yukarıdaki özellikler dışında daha farklı özellikler de bulunmaktadır. Fakat task’ın çalışması için minimum olarak gereken parametreler bunlardır.

BashOperator: Bu operator bir scripti çalıştırmaktadır. DAG scripti haricinde yazılan bir script üzerinden çalışan bu operator ile task çağrılarak çalışması sağlanır.

“task_id” ile DAG içinde task’ın hangi ad ile tutulacağı belirtilmektedir.

“bash_command” ile scriptin çalıştırılması sağlanmaktadır.

Uygulama

Airflow’un yüklenmesi:

Airflow’un çalıştırılması için linux işletim sistemine ihtiyaç bulunmaktadır. Burada eğer Windows işletim sistemi kullanıyorsanız, Microsoft Store üzerinden bir Ubuntu makine indirebilirsiniz. Veya Docker Desktop üzerinden bir Ubuntu makinesi ayağa kaldırabilirsiniz.

  1. İlk olarak aşağıdaki komutlar ile makineye pip ve python yüklenir.
sudo apt-get install software-properties-commonsudo apt-add-repository universesudo apt-get updatesudo apt-get install python-setuptoolssudo apt install python3-pip

2. Daha sonrasında Airflow’un çalışacağı yol belirtilir.

export AIRFLOW_HOME=/root/airflow

3. Aşağıdaki komut ile airflow kütüphanesi yüklenir.

pip3 install apache-airflow

4. Airflow database’i aktif edilir.

airflow db init

5. Airflow’a giriş için bir kullanıcı tanımlanır.

airflow users create --username admin --firstname admin --lastname testing --role Admin --email admin@domain.com

6. Son olarak airflow çalıştırılarak UI aktif hale getirilir.

airflow webserver -p 8080

Bu komutlar ile Airflow UI’ı çalışır hale getirilir. UI’ı görmek için tarayıcıdan http://localhost:8080 ‘e gidilmelidir. Tabii ki projelerin gösterimi için bir komuta daha ihtiyaç bulunmaktadır. Başka bir terminal daha açılır ve aşağıdaki komut ile projelerin UI’da gösterimi sağlanmaktadır.

airflow scheduler

Bu aşamada artık bir projenin test edilmesi gerekmektedir. Airflow dizini altına gidilerek “dags” isminde bir klasör oluşturulmalıdır. Bunun sebebi ise “airflow.cfg” dosyasında belirtilen “dags_folder” satırında bulunan path’in bu dizin altındaki dags klasörü olmasından dolayıdır. Aşağıdaki komut ile dags klasörü oluşturulur.

mkdir /root/airflow/dags

Buradan sonra artık yapılan bir çalışmanın dags klasörü altında scripti bulunmalıdır. Son olarak airflow scheduler komutu sonrası ekrana gelen örnek dag’lere bakalım.

Sağ üstte yer alan butona tıklayarak dag’in çalışması sağlanır.

Trigger DAG kısmına tıklanarak DAG çalıştırılır.

Nihai olarak DAG’in başarılı bir şekilde çalıştığını gözlemlemekteyiz. Bunu ise taskların çerçevesinin yeşil rengi almasından anlayabiliriz. Veya task’ın üzerine geldiğimizde de status kısmında “success” yazısını görerek de anlayabiliriz.

Bu yazımızda Airflow ile bir projenin nasıl orkestrasyonunun yapılacağını ve yönetileceğini görmüş olduk. Aşağıda yararlandığım yardımcı kaynakları bulabilirsiniz. Bir sonraki yazımızda görüşmek üzere :)

Yardımcı Kaynaklar

--

--