Utwórz potok za pomocą notebooka
Potoki danych często wymagają uruchomienia wielu notebooków w określonej sekwencji. Podczas tworzenia potoku przy użyciu notesów w usłudze Azure Databricks należy skonfigurować zależności zadań kontrolujące kolejność wykonywania. Te zależności zapewniają, że każdy krok zakończy się przed rozpoczęciem kroków zależnych.
Dodaj zadanie notebooka do zadania Lakeflow
Zadanie notatnika uruchamia notatnik usługi Databricks w ramach przepływu pracy zadania. Należy określić ścieżkę notatnika, skonfigurować zasoby obliczeniowe i zdefiniować wszystkie parametry wymagane przez notatnik. Wiele zadań notebooka można połączyć w łańcuch w celu utworzenia kompletnego pipeline danych.
Po dodaniu zadań notatnika do pracy, każde zadanie jest wyświetlane jako węzeł w skierowanym grafie acyklicznym (DAG). DAG udostępnia wizualizację przepływu wykonania potoku, pokazując, które zadania uruchamiają się jako pierwsze i które zależą od innych.
Rozważ typowy potok danych, który przetwarza dane sprzedaży. Pipeline może zawierać trzy notebooki: jeden do ingestii danych, jeden do przekształcania, i jeden do ładowania danych do ostatecznej tabeli. Bez skonfigurowanych zależności te notatniki mogą być uruchamiane jednocześnie i powodować błędy, gdy notatnik przekształcania próbuje odczytać dane, które nie zostały jeszcze pobrane.
Konfigurowanie zależności zadań
Zależności zadań określają, kiedy każdy notebook jest uruchamiany względem innych zadań w ramach zadania. Podczas konfigurowania zależności należy określić, że jedno zadanie musi czekać na ukończenie innego zadania przed rozpoczęciem.
Aby dodać zależność między zadaniami:
- Wybierz zadanie w DAG zadań.
- W polu Zależy od wybierz nadrzędne zadanie z menu rozwijanego.
- Wybierz pozycję Zapisz zadanie.
Po wybraniu zadania w grupie DAG przed utworzeniem nowego zadania nowe zadanie automatycznie ma zależność od wybranego zadania. To domyślne zachowanie ułatwia szybkie tworzenie potoków sekwencyjnych.
Zależności tworzą wyraźną ścieżkę wykonywania za pośrednictwem potoku. W czterodaniowym zadaniu, w którym zadanie 2 i zadanie 3 zależą od zadania 1, a zadanie 4 zależy zarówno od zadania 2, jak i zadania 3, usługa Azure Databricks uruchamia zadanie 1 jako pierwsze. Po pomyślnym ukończeniu zadania 1 zadanie 2 i zadanie 3 są uruchamiane równolegle. Zadanie 4 jest uruchamiane tylko po zakończeniu zadania 2 i zadania 3.
Task 1 (ingest_data)
├── Task 2 (transform_customers)
└── Task 3 (transform_orders)
└── Task 4 (generate_report)
Tworzenie zadania notesu od podstaw
Tworzenie potoku opartego na notesach rozpoczyna się od utworzenia zadania i dodania pierwszego zadania notesu. W poniższych krokach przedstawiono kompletny proces konfiguracji.
- W swoim obszarze roboczym Azure Databricks, wybierz pozycję Zadania i Potoki w panelu bocznym.
- Wybierz pozycję Utwórz, a następnie wybierz pozycję Zadanie.
- Wprowadź nazwę zadania opisującego przeznaczenie notesu, na przykład
ingest_sales_data. - W menu rozwijanym Typ wybierz pozycję Notes.
- W menu rozwijanym Źródło wybierz pozycję Obszar roboczy , aby użyć notesu przechowywanego w obszarze roboczym.
- Wybierz pole Ścieżka i przejdź do lokalizacji notesu.
- Konfigurowanie zasobów obliczeniowych przy użyciu pola Obliczenia .
- Wybierz pozycję Utwórz zadanie.
Po utworzeniu pierwszego zadania dodaj dodatkowe zadania w notatniku i skonfiguruj ich zależności, aby dokończyć strukturę potoku. Każde nowe zadanie dodawane podczas wybierania innego zadania automatycznie dziedziczy zależność od tego zadania.
Przekazywanie parametrów między notesami
Zadania notebooka mogą odbierać parametry w czasie wykonywania za pomocą konfiguracji parametrów. Te parametry są dostępne w notesie przy użyciu polecenia dbutils.widgets. Przekazywanie parametrów umożliwia ponowne używanie notesów w różnych zadaniach z różnymi danymi wejściowymi.
Aby skonfigurować parametry zadania notatnika:
- Wybierz zadanie w konfiguracji pracy.
- W obszarze Parametry wybierz pozycję Dodaj.
- Wprowadź nazwę parametru w polu Klucz .
- Wprowadź wartość parametru w polu Wartość .
- Wybierz pozycję Zapisz zadanie.
W notesie pobierz parametry przy użyciu polecenia dbutils.widgets.get():
# Retrieve a parameter named 'process_date' with a default value
dbutils.widgets.text("process_date", "2024-01-01", "Process Date")
process_date = dbutils.widgets.get("process_date")
# Use the parameter in your processing logic
df = spark.read.table("sales_raw").filter(f"date = '{process_date}'")
Takie podejście zapewnia elastyczność notesów i umożliwia tym samym notesom przetwarzanie różnych danych na podstawie parametrów zadania.
Najlepsze rozwiązania dotyczące potoków notebooków
Podczas tworzenia potoków notatników produkcyjnych postępuj zgodnie z tymi praktykami, aby zachować niezawodność i przejrzystość.
Użyj opisowych nazw zadań , które wskazują funkcję notesu. Nazwy takie jak
bronze_ingest_orderslubsilver_transform_customerssprawiają, że przeznaczenie potoku jest natychmiast jasne w widoku DAG.Organizuj notesy w folderach , które odzwierciedlają strukturę potoku. Hierarchia folderów, taka jak
/pipelines/sales/bronze/i/pipelines/sales/silver/ułatwia członkom zespołu szybkie lokalizowanie notesów.Zminimalizuj zależności zadań , jeśli to możliwe. Chociaż zależności zapewniają poprawną kolejność realizacji, nadmierne zależności mogą zmniejszyć równoległość i spowolnić pipeline. Dodaj tylko zależności, w których istnieje prawdziwa relacja danych.
Użyj notesów obszarów roboczych dla zadań produkcyjnych , a nie notesów w folderach Git, gdy musisz śledzić eksperymenty MLflow. Notatniki uruchamiane ze zdalnych repozytoriów Git są efemeryczne i nie mogą niezawodnie śledzić uruchomień lub modeli MLflow.
Podczas projektowania notesów należy wziąć pod uwagę limity danych wyjściowych . Dane wyjściowe komórek notesu są ograniczone do 20 MB łącznie, a każda z poszczególnych komórek ograniczona jest do 8 MB. Jeśli notesy generują duże dane wyjściowe, zapisuj wyniki w tabelach zamiast wyświetlać je w danych wyjściowych komórek.