Первые 2 раздела
This commit is contained in:
@@ -1,9 +1,17 @@
|
|||||||
# Почему Apache Airflow стал незаменимым инструментом для работы с данными
|
# Почему Apache Airflow стал незаменимым инструментом для работы с данными
|
||||||
# Почему Apache Airflow стал незаменимым инструментом для работы с данными
|
|
||||||
|
|
||||||
Обычно работа с автоматизацией процессов обработки информации начинается с ручного управления задачами. Например, в машинном обучении это может включать подготовку наборов данных, обучение моделей, анализ результатов и развертывание решений в рабочей среде. По мере роста команды и развития продукта эти процессы усложняются: увеличивается количество повторяющихся операций, появляются зависимости между задачами, и каждая из них приобретает всё большее значение для бизнеса. В результате формируется полноценный конвейер задач, требующий регулярного запуска.
|
Обычно работа с автоматизацией процессов обработки информации начинается с ручного управления задачами. Например, в машинном обучении это может включать подготовку наборов данных, обучение моделей, анализ результатов и развертывание решений в рабочей среде. По мере роста команды и развития продукта эти процессы усложняются: увеличивается количество повторяющихся операций, появляются зависимости между задачами, и каждая из них приобретает всё большее значение для бизнеса. В результате формируется полноценный конвейер задач, требующий регулярного запуска.
|
||||||
|
|
||||||

|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
in[Данные] --> op1[Операция № 1] --> op2[Операция № 2] --> op3[Операция № 3] --> out[Данные]
|
||||||
|
|
||||||
|
subgraph PIPE[Конвейер]
|
||||||
|
op1
|
||||||
|
op2
|
||||||
|
op3
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
Аналогичная ситуация возникает при обработке данных: в определенный момент необходимо собрать актуальную информацию, преобразовать её и выполнить различные операции — создать витрину данных и сохранить в базу, обучить модель машинного обучения, подготовить отчет в Excel и разослать его по электронной почте. Вариантов множество, и для решения таких задач требуются специализированные инструменты.
|
Аналогичная ситуация возникает при обработке данных: в определенный момент необходимо собрать актуальную информацию, преобразовать её и выполнить различные операции — создать витрину данных и сохранить в базу, обучить модель машинного обучения, подготовить отчет в Excel и разослать его по электронной почте. Вариантов множество, и для решения таких задач требуются специализированные инструменты.
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,18 @@
|
|||||||
Проще говоря, DAG — это упорядоченный набор задач, которые выполняются строго по расписанию и никогда не повторяются в рамках одного запуска. Создавая пайплайны для обработки данных, вы фактически создаете DAG.
|
Проще говоря, DAG — это упорядоченный набор задач, которые выполняются строго по расписанию и никогда не повторяются в рамках одного запуска. Создавая пайплайны для обработки данных, вы фактически создаете DAG.
|
||||||
|
|
||||||

|

|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
n1((1)) --> n2((2))
|
||||||
|
n1 --> n3((3))
|
||||||
|
|
||||||
|
n2 --> n4((4))
|
||||||
|
n3 --> n6((6))
|
||||||
|
n6 --> n7((7))
|
||||||
|
|
||||||
|
n7 --> n12
|
||||||
|
n4 --> n12((12))
|
||||||
|
```
|
||||||
|
|
||||||
# Шаги вашего пайплайна: Задачи
|
# Шаги вашего пайплайна: Задачи
|
||||||
|
|
||||||
@@ -26,14 +38,52 @@
|
|||||||
|
|
||||||
На примере ниже видно, как задача E зависит от успешного завершения всех предыдущих задач:
|
На примере ниже видно, как задача E зависит от успешного завершения всех предыдущих задач:
|
||||||
|
|
||||||

|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
A["Task A"] --> B["Task B"]
|
||||||
|
A --> C["Task C"]
|
||||||
|
|
||||||
|
B --> D["Task D"]
|
||||||
|
C --> D
|
||||||
|
|
||||||
|
D --> E["Task E"]
|
||||||
|
```
|
||||||
|
|
||||||
Airflow позволяет создавать сложные сценарии:
|
Airflow позволяет создавать сложные сценарии:
|
||||||
- Зависимости между разными DAG-ами с помощью TriggerDagRunOperator и ExternalTaskSensor
|
- Зависимости между разными DAG-ами с помощью TriggerDagRunOperator и ExternalTaskSensor
|
||||||
- Условное выполнение задач в зависимости от результатов предыдущих шагов
|
- Условное выполнение задач в зависимости от результатов предыдущих шагов
|
||||||
- Сложные ветвления и параллельные ветки выполнения
|
- Сложные ветвления и параллельные ветки выполнения
|
||||||
|
|
||||||

|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
%% без цветов, только форма и рамка
|
||||||
|
classDef taskGroup stroke-width:3px;
|
||||||
|
classDef endpoint stroke-width:2px,stroke-dasharray: 5 3;
|
||||||
|
|
||||||
|
start(("начало")):::endpoint --> print_start["print_start_bash"]
|
||||||
|
|
||||||
|
print_start --> py1["python_function_with_input_1"]
|
||||||
|
print_start --> py4["python_function_with_input_4"]
|
||||||
|
|
||||||
|
py1 --> py2["python_function_with_input_2"]
|
||||||
|
py1 --> py3["python_function_with_input_3"]
|
||||||
|
|
||||||
|
py4 --> py5["python_function_with_input_5"]
|
||||||
|
py4 --> py6["python_function_with_input_6"]
|
||||||
|
|
||||||
|
py2 --> py_join["python_function_with_input"]
|
||||||
|
py3 --> py_join
|
||||||
|
py5 --> py_join
|
||||||
|
py6 --> py_join
|
||||||
|
|
||||||
|
py_join --> tg["task_group_with_two_tasks"]:::taskGroup
|
||||||
|
|
||||||
|
tg --> dyn123["dynamic_task_123"]
|
||||||
|
tg --> dyn456["dynamic_task_456"]
|
||||||
|
|
||||||
|
dyn123 --> finish(("конец")):::endpoint
|
||||||
|
dyn456 --> finish
|
||||||
|
```
|
||||||
|
|
||||||
# Инструменты для выполнения: Операторы
|
# Инструменты для выполнения: Операторы
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 25 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 60 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 28 KiB |
Reference in New Issue
Block a user