Problem:

Działasz w dużej organizacji ale pracujesz w jednym z projektów rozwijających rozwiązanie w oparciu o Databricks. Organizacja narzuca dwie dobre praktyki projektowe: stosowanie job clusters do wywołania jobów oraz nie używania spot instances w ładowaniach produkcyjnych. Jakich argumentów użyjesz, żeby przekonać, że w Twoim przypadku użycie interactive cluster i spot instance jest optymalnym rozwiązaniem

Rozwiązanie:

Przedstawimy kontekst decyzji w oparciu o scenariusz, który mamy. W przetwarzaniu ETL ładującym dane do wszystkich warstw Brązowej, Srebrnej i Złotej (Bronze Silver i Gold - Medalion Architecture) stworzone jest 35 (!) jobów. Nie jest to jeden duży job ładujący wszystko ale w celu zwiększenia odporności na błędy, elastyczności, łatwości debugowania i zrównoleglenia przetwarzań. Dodatkowo ładowanie ma być optymalne kosztowo dlatego używamy spot instance. Pójdziemy dzisiaj pod prąd rekomendacjom Databricks. Zacznijmy jednak od początku.

Rekomendacje Databricks

Databricks inaczej wycenia cluster, który jest stworzony jako all purpose compute a inaczej jako job compute. To jest kluczowy argument przy decydowaniu jaki cluster powinien być zastosowany dla wybranego job'a. To jest też kluczowy argument, który stosuje organizacja. Redukujemy koszty, przechodzimy wszyscy na job compute. Zauważ, że nie wspominamy tutaj o spot instance. Dzięki tej opcji możemy znacznie zredukować koszty.

Kolejny argument ze strony Databricks:

Zgadza się. All purpose compute nie zatrzumuje się automatycznie po zakończeniu ładowania. Dla all purpose cluster można:

  • ustawić auto termination na 10 minut nieaktywności i po tym czasie cluster zostanie wyłączony
  • Wykorzystać REST API i zatrzymywać cluster po zakończeniu joba.

Są sposoby, żeby zrobić "automatyczne wyłączenie" w inny sposób. Ten argument możemy odrzucić.

Jeżeli wykorzystać all purpose compute do uruchamiania jobów i tylko do tego, wtedy żadne inne zasoby nie będą go wykorzystywać. Tu jest przedstawiony schemat użycia all-purpose compute, gdy joby walczą o zasoby. W naszym przypadku sekwencja ładowania jobów jest ustawiona w ten sposób, żeby optymalnie wykorzystać zasoby clustra. To jest słaby argument.

Mhm.. To niestety bardzo ogólne stwierdzenie. Też odrzucimy je jako nie poparte żadnymi przykładami.

Argumenty za all-pupose compute i spot instance

Zastanówmy się jakie są argumenty za użyciem all-purpose compute w ładowaniu.

Na środowisku produkcyjnym mamy 35 jobów, które odpowiadają za przeprowadzenie jednego dużego batchowego ładowania. Tak, zgadza się jest ich dużo ale też ta architektura pozwala łatwiej zidentyfikować błędy. W przypadku, gdy ładowanie zakończy się niepowodzeniem, pozwala uruchomić job od miejsca gdzie był błąd.

Łatwiej zarządzać 35 mniejszymi ładowniami, niż jednym wielkim.

Cześć ładowań uruchamiane jest równolegle, żeby zapewnić odpowiednie obciążenie clustra.

Argumenty za all-purpose compute.

  1. Cluster startujemy raz a nie 35 razy. Raz płacimy karę za start clustra.
  2. Cluster wykorzystuje spot instances co znacznie minimalizuje koszty

Argument za spot instance.

Powiesz, że spot instance nie powinno być stosowane na środowisku produkcyjnym? Oczywiście to zależy od przetwarzania. Gdy zależy Ci na niezawodności wtedy masz racę, nie należy włączać spot instance. Gdy zależy nam na minimalizacji kosztów przy zachowaniu rozsądnej wydajności wtedy nie widzę przeszkód do włączenia spot instance.

Ostatnie myśli

Wykorzystanie 35 job cluster w tej sytuacji sprawi, że 35 razy będziemy płacili karę za uruchomienie job clustra.

Możliwe, że ładowanie będzie mniej kosztować ale 35 razy będziemy czekali 7 minut. Jak przełożymy ten czas wykonania? Nasi biznesowi użytkownicy nie będą zadowoleni.

Czy all-purpose compute to optymalne rozwiązanie? Nie. Niestety organizacja nie pozwala na razie tworzenia serverless compute.

Orchistracja przy użyciu DBT też daje możliwości na użycie job cluster. Niestety na razie tego nie ma w planach.

Zachęcam do eksperymentowania i nie uleganiu na namowom i rekomendacjom Databricks, tylko sprawdzanie na swoim środowisku, co jest bardziej optymalne.

Powodzenia w eksperymentowaniu!

Źródło artykułu aktywne na dzień 26.03.2026:
https://docs.databricks.com/gcp/en/jobs/run-classic-jobs