Airflow Architectures
Single Node Architectures -> bu arxitekturada Airflow ning barcha komponentlari bitta kompyuterda yoki bitta serverda ishlaydi.Bunda oddiy usulda qollaniladigan arxitekturadir.
Multi-node Architectures -> bu arxitektura Airflow ni bir nechta kompyuter yokida serverlarda ishlatilinadi.
Single Node Architectures vs Multi-node Architectures Single Node Architectures -> bu arxitekturada Airflow ning barcha komponentlari bitta kompyuterda yoki bitta serverda ishlaydi.Bunda oddiy usulda qollaniladigan arxitekturadir.
Multi-node Architectures -> bu arxitektura Airflow ni bir nechta kompyuter yokida serverlarda ishlatilinadi.
👍1
Executor -> bu task bajarmaydi!nomiga qaramasdan, u tasklarni togridan togri ishlatish uchun ishlamaydi.
U tasklarni qaysi tizimda qanday bajarilishini aniqlaydi.
Turlari 3 xil.
1.Local Executor:
2.sequential executors
3.remote executors(celery, kubernetes executor)
Ma'lumotlar orkestratsiyasi - bu turli tizimlar va jarayonlar bo'ylab ma'lumotlarning harakatlanishini, o'zgarishini va integratsiyasini muvofiqlashtirish va avtomatlashtirish jarayoni bo'lib, samarali va ishonchli ma'lumotlar ish oqimini ta'minlaydi.
Streaming: Airflow real vaqt rejimini qo‘llab-quvvatlamaydi. Uni batch oriented pipeline’lar uchun ishlating.
Data Processing: Ma'lumotlarni qayta ishlashda ehtiyot bo‘ling; resurslar yetarli ekanligini tekshiring yoki tashqi vositalardan (Masalan SPARK )foydalaning.
Data Processing: Ma'lumotlarni qayta ishlashda ehtiyot bo‘ling; resurslar yetarli ekanligini tekshiring yoki tashqi vositalardan (Masalan SPARK )foydalaning.
max_active_runs:
Faqat bitta DAG Run ishlaydi.
Yangu DAG Rn faqat oldingisi tugagandan keyin boshlanadi.
max_active_runs_per_dag:
Agar barcha Daglar uchun cheklash kiritish kerak bolsa
Faqat bitta DAG Run ishlaydi.
Yangu DAG Rn faqat oldingisi tugagandan keyin boshlanadi.
max_active_runs_per_dag:
Agar barcha Daglar uchun cheklash kiritish kerak bolsa
Bugun Spark haqida gaplashamiz biroz:
Spark'ning ikki xil bajarilish rejimi (execution mode) bor:
Client Mode – ishga tushiruvchi mijoz (client) jarayoni o‘zining lokal mashinasida ishlaydi.
Cluster Mode – ishga tushiruvchi jarayon Spark klasterining o‘zida bajariladi.
Lekin uchta asosiy ish modeli (execution model) bor:
Local Mode – mahalliy kompyuterda ishlash uchun.
Client Mode – YARN klasterida, lekin mijozning terminal yoki Notebook orqali boshqarishi.
Cluster Mode – YARN yoki boshqa klaster menejerda to‘liq avtonom ishga tushirish.
Bu tushunchalar Spark arxitekturasi va bajarilish jarayonini tushunish uchun muhim. Agar chuqurroq tushuntirish kerak bo‘lsa, bemalol so‘rang via tg!🚀
Spark'ning ikki xil bajarilish rejimi (execution mode) bor:
Client Mode – ishga tushiruvchi mijoz (client) jarayoni o‘zining lokal mashinasida ishlaydi.
Cluster Mode – ishga tushiruvchi jarayon Spark klasterining o‘zida bajariladi.
Lekin uchta asosiy ish modeli (execution model) bor:
Local Mode – mahalliy kompyuterda ishlash uchun.
Client Mode – YARN klasterida, lekin mijozning terminal yoki Notebook orqali boshqarishi.
Cluster Mode – YARN yoki boshqa klaster menejerda to‘liq avtonom ishga tushirish.
Bu tushunchalar Spark arxitekturasi va bajarilish jarayonini tushunish uchun muhim. Agar chuqurroq tushuntirish kerak bo‘lsa, bemalol so‘rang via tg!
Please open Telegram to view this post
VIEW IN TELEGRAM
Cluster Managers turlari:
1. Local[n]
2.YARN
3.Kubernetes
4.Mesos
5.Standalone
Execution Modes:
1. Client
2. Cluster
Execution tools:
1.IDE, Notebook
2. Submit
1. Local[n]
2.YARN
3.Kubernetes
4.Mesos
5.Standalone
Execution Modes:
1. Client
2. Cluster
Execution tools:
1.IDE, Notebook
2. Submit
Storytelling with Data
Bugun Spark haqida gaplashamiz biroz: Spark'ning ikki xil bajarilish rejimi (execution mode) bor: Client Mode – ishga tushiruvchi mijoz (client) jarayoni o‘zining lokal mashinasida ishlaydi. Cluster Mode – ishga tushiruvchi jarayon Spark klasterining o‘zida…
lekin Biz Yarn bn Local dan foydalanamiz bu interview larda soralsa javob beramiz tushuntirishda esa bu korinishda tushuntirsak boladi!
Spark DataFrame o‘zgarmas (immutable) malumotlar tuzilmasi.
Immutable -> ozgarmas degani
biz ozgarish qilganda eskisidan foydalanib yangi dataframe yaratamiz!
Immutable -> ozgarmas degani
biz ozgarish qilganda eskisidan foydalanib yangi dataframe yaratamiz!
Biz driver ga qanaqa ozgartirish qilmoqchi ekanligimizni yokida dataframe (df )dan nima olmoqchi ekanligimizni aytamiz bular transformations deb ataladi.
Va ushbu transformatsiyalar oddiy SQL operatsiyalari kabi bo‘lishi mumkin. yokida Pyspark orqali ikki xil yoli mavjud.
example:
select(), filter(), va groupBy().
Va ushbu transformatsiyalar oddiy SQL operatsiyalari kabi bo‘lishi mumkin. yokida Pyspark orqali ikki xil yoli mavjud.
example:
select(), filter(), va groupBy().
Xop Spark ozi aslida qanaqa tartibda ishlaydi.
Biz malumotlarni store qilganda 10 ta cluster ga yuklab qoymoqdamiz lekin aslida dataframe miz ni ozi 100 ta bolaklarga bolinib store boladi.
va bularni har biri kichik dataframe shaklida qabul qilsak boladi.
Endi biz transformatsiya qilganimizda ham har bir df ni alohida transformatsiya qilish imkonimiz bor.
Bularning barchasi bitta SparkSession obyektida ketadi.
Aslida biz SparkSession ni bosqichma bosqich yaratish uchun builder patterndan foydalanamiz.
keyin esa hammasini bir biriga boglamasdan oraliq ozgaruvchilarga olib bosqichlarga bolib transformatsiya qilishimiz mumkin alohida dataframe larga!
Biz malumotlarni store qilganda 10 ta cluster ga yuklab qoymoqdamiz lekin aslida dataframe miz ni ozi 100 ta bolaklarga bolinib store boladi.
va bularni har biri kichik dataframe shaklida qabul qilsak boladi.
Endi biz transformatsiya qilganimizda ham har bir df ni alohida transformatsiya qilish imkonimiz bor.
Bularning barchasi bitta SparkSession obyektida ketadi.
Aslida biz SparkSession ni bosqichma bosqich yaratish uchun builder patterndan foydalanamiz.
keyin esa hammasini bir biriga boglamasdan oraliq ozgaruvchilarga olib bosqichlarga bolib transformatsiya qilishimiz mumkin alohida dataframe larga!
❤1
SPARK malumotlarini qayta ishlash asosan operatsiyalarin DAG (Directed Acyclic Graph) yaratish haqida.
Spark dasturlarida asosan dag yaratamiz.
Transformations and Actions
Transformations bitta dataframe ni boshqasiga ozgartirish uchun ishlatiladi va asl dataframe ozgarmaydi.
example: where() transformatsiyasi bunda u kirish df da ishlaydi va chiqish df yaratadi.
birinchi df ozgarishsiz qoladi.
shuning uchun spark da df ozgarishsiz qoladi.
endi Transformations ozi ham ikkiga bolinadi:
1.Narrow dependency transformation(Tor boglikdagi transformatsiya)
2.Wide dependency transformation(keng boglikdagi transformatsiya)
1.Narrow dependency transformation ->Agarda biz transformatsiyani alohida bolak yani partition ustida bajarilsa va natijaga tasir qilmasa bu Narrow dependency transformation hisoblanadi.
example: where() transformatsiyasi tor boglikdagi transformatsiya hisoblanadi.
2.Wide dependency transformation -> Agar transformatsiya boshqa bolaklardan malumotlarni talab qilsa, bu keng boglikdagi transformatsiya hisoblanadi.
example: groupBy() transformatsiyasi.
endi deylik hozir group nega bogliq mustaqil deb oyladingiz men ham birinchi marta shunaqa oylaganman😁 😁
keling misol koramiz:
Ikki df ni bolaklarga boldik va biz groupBy() transformatsiyasini qolladik va ichidagi yozuvlar sonini aniqladik.Spark nima qiladi har bir alohida bolakga groupBy() qiladi va yangi df yaratishi mumkin.
Ammo natijalar birlashganda nima boladi umumiylik yoqoladi va togri umumiy natija chiqmaydi.
Demak, groupBy() bolaklarning mustaqilligini buzadi.
shuning uchun ham groupBy() keng bogliqlikdagi transformatsiya hisoblanadi.
xop qanaqa qilamiz unda desak:
REPARTITIONING orqali tuzatish mumkin.
Yani barcha bolaklarni birlashtirib, malum guruhlarning barcha yozuvlarini bir xil bolakka joylashtiramiz.
Bu Jarayon esa Shuffle va sort operatsiyalari deyiladi.
keyin esa biz count() orqali sanab qoyamiz.boldi!
Spark dasturlarida asosan dag yaratamiz.
Transformations and Actions
Transformations bitta dataframe ni boshqasiga ozgartirish uchun ishlatiladi va asl dataframe ozgarmaydi.
example: where() transformatsiyasi bunda u kirish df da ishlaydi va chiqish df yaratadi.
birinchi df ozgarishsiz qoladi.
shuning uchun spark da df ozgarishsiz qoladi.
endi Transformations ozi ham ikkiga bolinadi:
1.Narrow dependency transformation(Tor boglikdagi transformatsiya)
2.Wide dependency transformation(keng boglikdagi transformatsiya)
1.Narrow dependency transformation ->Agarda biz transformatsiyani alohida bolak yani partition ustida bajarilsa va natijaga tasir qilmasa bu Narrow dependency transformation hisoblanadi.
example: where() transformatsiyasi tor boglikdagi transformatsiya hisoblanadi.
2.Wide dependency transformation -> Agar transformatsiya boshqa bolaklardan malumotlarni talab qilsa, bu keng boglikdagi transformatsiya hisoblanadi.
example: groupBy() transformatsiyasi.
endi deylik hozir group nega bogliq mustaqil deb oyladingiz men ham birinchi marta shunaqa oylaganman
keling misol koramiz:
Ikki df ni bolaklarga boldik va biz groupBy() transformatsiyasini qolladik va ichidagi yozuvlar sonini aniqladik.Spark nima qiladi har bir alohida bolakga groupBy() qiladi va yangi df yaratishi mumkin.
Ammo natijalar birlashganda nima boladi umumiylik yoqoladi va togri umumiy natija chiqmaydi.
Demak, groupBy() bolaklarning mustaqilligini buzadi.
shuning uchun ham groupBy() keng bogliqlikdagi transformatsiya hisoblanadi.
xop qanaqa qilamiz unda desak:
REPARTITIONING orqali tuzatish mumkin.
Yani barcha bolaklarni birlashtirib, malum guruhlarning barcha yozuvlarini bir xil bolakka joylashtiramiz.
Bu Jarayon esa Shuffle va sort operatsiyalari deyiladi.
keyin esa biz count() orqali sanab qoyamiz.boldi!
Please open Telegram to view this post
VIEW IN TELEGRAM
Endi Sparkning eng muhim jihatlaridan biri – kechiktirilgan baholashga (Lazy Evaluation) haqida gaplashamiz! 😲
Kechiktirilgan baholash – bu funksional dasturlash texnikasi.
Bu Spark dasturlari uchun nimani anglatadi?
Oddiy!
Dasturchilar ushbu transformatsiyalarni individual kod qatorlari sifatida ko‘radi,
ya’ni qadam-baqadam bajariladi deb o‘ylaydi.
Lekin Spark bunday ishlamaydi.
Nega?
Chunki biz DAG yaratmoqdamiz.
Barcha transformatsiyalar drayverga boradi,
drayver ularni optimallashtirib, bajarish rejasini yaratadi,
va ushbu reja bajaruvchilar tomonidan bajariladi.
Harakatlar (Actions) DAG’ni ishga tushiradi.
Masalan, show(), collect(), write(), read().
Barcha transformatsiyalar bajarilganidan keyin natijani olish uchun biz show() yoki collect() kabi harakatlarni bajarishimiz kerak.
Shuning uchun, transformatsiyalar kechiktirilgan (lazy),
ammo harakatlar darhol bajariladi.
Kechiktirilgan baholash – bu funksional dasturlash texnikasi.
Bu Spark dasturlari uchun nimani anglatadi?
Oddiy!
Dasturchilar ushbu transformatsiyalarni individual kod qatorlari sifatida ko‘radi,
ya’ni qadam-baqadam bajariladi deb o‘ylaydi.
Lekin Spark bunday ishlamaydi.
Nega?
Chunki biz DAG yaratmoqdamiz.
Barcha transformatsiyalar drayverga boradi,
drayver ularni optimallashtirib, bajarish rejasini yaratadi,
va ushbu reja bajaruvchilar tomonidan bajariladi.
Harakatlar (Actions) DAG’ni ishga tushiradi.
Masalan, show(), collect(), write(), read().
Barcha transformatsiyalar bajarilganidan keyin natijani olish uchun biz show() yoki collect() kabi harakatlarni bajarishimiz kerak.
Shuning uchun, transformatsiyalar kechiktirilgan (lazy),
ammo harakatlar darhol bajariladi.
Please open Telegram to view this post
VIEW IN TELEGRAM
Dataframe ga malumot yuklash bu ACTION.
va har bir spark action bir spark job ga masul bo'ladi.
va har bir spark action bir spark job ga masul bo'ladi.
har bir job kamida bitta stage ga ega bolishi kerak
va har bir stage kamida bitta task ga ega bolishi shart.
Har bir Stage ozining ichki operatsiyalarining DAG(Directeg Acyclic Graph) ni hosil qiladi.
va har bir stage kamida bitta task ga ega bolishi shart.
Har bir Stage ozining ichki operatsiyalarining DAG(Directeg Acyclic Graph) ni hosil qiladi.
RDD - Resilient Distributed Dataset
• RDD → Moslashuvchan, lekin murakkab va sekin
• DataFrame API→ Tezroq va optimallashtirilgan (Spark SQL bilan ishlaydi)
• Dataset API→ Tiplangan va samarali, lekin faqat Scala/Java uchun
• RDD → Moslashuvchan, lekin murakkab va sekin
• DataFrame API→ Tezroq va optimallashtirilgan (Spark SQL bilan ishlaydi)
• Dataset API→ Tiplangan va samarali, lekin faqat Scala/Java uchun
Catalyst Optimizer – bu Apache Spark SQL Engine ning ichki optimizatsiya tizimi bo‘lib,
DataFrame API va Spark SQL da yozilgan kodni samarali bajarilishini taminlaydi
✔ Catalyst Optimizer – bu Spark SQL va DataFrame API kodlarini optimallashtirish uchun mo‘ljallangan
✔ Ma’lumotlarni tezroq va samaraliroq qayta ishlashga yordam beradi
✔ RDD lar Catalyst Optimizer bilan ishlamaydi, shuning uchun DataFrame API ishlatish yaxshiroq
✔ SQL so‘rovlarini va DataFrame transformatsiyalarini avtomatik optimallashtiradi
✔ Barcha Spark ilovalari Catalyst Optimizer orqali samarali ishlaydi
DataFrame API va Spark SQL da yozilgan kodni samarali bajarilishini taminlaydi
✔ Catalyst Optimizer – bu Spark SQL va DataFrame API kodlarini optimallashtirish uchun mo‘ljallangan
✔ Ma’lumotlarni tezroq va samaraliroq qayta ishlashga yordam beradi
✔ RDD lar Catalyst Optimizer bilan ishlamaydi, shuning uchun DataFrame API ishlatish yaxshiroq
✔ SQL so‘rovlarini va DataFrame transformatsiyalarini avtomatik optimallashtiradi
✔ Barcha Spark ilovalari Catalyst Optimizer orqali samarali ishlaydi
RDD – bu Resilient Distributed Dataset degan ma’noni anglatadi.
RDD – bu oddiygina ma’lumotlar to‘plami.
Bu malumotlarni saqlash va qayta ishlash uchun malum bir tuzilma.
RDD DataFrame ga o‘xshaydi,
chunki DataFrame ham RDD ustida qurilgan.
Biroq, RDD va DataFrame o‘rtasidagi asosiy farq:
1.RDD – oddiy obyektlar to‘plami (strukturaga ega emas)
2.DataFrame – qator/ustun tuzilmasi va sxemaga ega
qisqaroq qilib, RDD – bu Scala, Java yoki Python kolleksiyalariga juda o‘xshash.
Ammo RDD ichki jihatdan partitsiyalarga ajratiladi va parallel ishlash uchun executor yadro (core) lariga tarqatiladi.
RDD ning Asosiy Xususiyatlari:
Taqsimlangan (Distributed) ->
• RDD partitsiyalarga bo‘linadi
• Executor yadrolari orasida tarqatiladi
• Shu sababli, RDD parallel ishlaydi
Qayta tiklanadigan (Resilient) ->
• RDD lar xatolarga bardoshli
• Har bir RDD qayta tiklash uchun metama’lumotlarni saqlaydi
• Agar executor ishdan chiqsa, boshqa executor xuddi shu RDD partitsiyasini qayta yaratib, bajarishni davom ettiradi
RDD API larining Cheklovlari
1. RDD lar qolda boshqarilishi kerak
• Ma’lumotlar strukturasi yo‘q
• Qolda optimallashtirish kerak
• Ma’lumotlarni qo‘lda siqish va tezlashtirish kerak
2.Spark RDD’ning ichki tuzilishini tushunmaydi
• RDD faqatgina oddiy obyektlar jamlanmasi
• Catalyst Optimizer bu obyektlarning tuzilmasini bilmaydi
• Spark optimallashtirish imkoniyatlarini yo‘qotadi
3. DataFrame API lari RDD larni to‘liq almashtiradi
• DataFrame API lar avtomatik optimallashtirilgan
• SQL funksiyalari bilan ishlash mumkin
• RDD API’larga nisbatan ancha qulay
RDD – bu oddiygina ma’lumotlar to‘plami.
Bu malumotlarni saqlash va qayta ishlash uchun malum bir tuzilma.
RDD DataFrame ga o‘xshaydi,
chunki DataFrame ham RDD ustida qurilgan.
Biroq, RDD va DataFrame o‘rtasidagi asosiy farq:
1.RDD – oddiy obyektlar to‘plami (strukturaga ega emas)
2.DataFrame – qator/ustun tuzilmasi va sxemaga ega
qisqaroq qilib, RDD – bu Scala, Java yoki Python kolleksiyalariga juda o‘xshash.
Ammo RDD ichki jihatdan partitsiyalarga ajratiladi va parallel ishlash uchun executor yadro (core) lariga tarqatiladi.
RDD ning Asosiy Xususiyatlari:
Taqsimlangan (Distributed) ->
• RDD partitsiyalarga bo‘linadi
• Executor yadrolari orasida tarqatiladi
• Shu sababli, RDD parallel ishlaydi
Qayta tiklanadigan (Resilient) ->
• RDD lar xatolarga bardoshli
• Har bir RDD qayta tiklash uchun metama’lumotlarni saqlaydi
• Agar executor ishdan chiqsa, boshqa executor xuddi shu RDD partitsiyasini qayta yaratib, bajarishni davom ettiradi
RDD API larining Cheklovlari
1. RDD lar qolda boshqarilishi kerak
• Ma’lumotlar strukturasi yo‘q
• Qolda optimallashtirish kerak
• Ma’lumotlarni qo‘lda siqish va tezlashtirish kerak
2.Spark RDD’ning ichki tuzilishini tushunmaydi
• RDD faqatgina oddiy obyektlar jamlanmasi
• Catalyst Optimizer bu obyektlarning tuzilmasini bilmaydi
• Spark optimallashtirish imkoniyatlarini yo‘qotadi
3. DataFrame API lari RDD larni to‘liq almashtiradi
• DataFrame API lar avtomatik optimallashtirilgan
• SQL funksiyalari bilan ishlash mumkin
• RDD API’larga nisbatan ancha qulay
Data Pipeline larda malumotlarni tekshirish (validatsiya qilish) juda muhim bolib, u pipeline jarayonining turli bosqichlarida amalga oshiriladi.
data analyst lar uchun pipeline larda validatsiya odatda ma'lumotlarni olish (ingestion, extract-load) bosqichidan keyin va malumotlarni modellashtirish (transform) jarayonidan song amalga oshiriladi.
ML pipeline larida esa, yuklab olingan malumotlarni validatsiya qilish ayniqsa muhim. Bu bosqichda notogri yoki sifatsiz malumotlarni aniqlash va yoq qilish amalga oshiriladi.
Muhimi, malumot validatsiyasini ML modelning validatsiyasi bilan aralashtirmaslik kerak. Malumot validatsiyasi kiruvchi malumotlarning sifatini tekshirishga qaratilgan bolsa, ML model validatsiyasi esa modelning ishlash samaradorligini baholash jarayonidir.