Apache Airflow и конвейеры обработки данных

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Конвейеры обработки данных управляют потоком данных с момента их первоначального сбора до консолидации, очистки, анализа, визуализации и многого другого. Эта книга научит вас создавать и сопровождать эффективные конвейеры обработки данных с использованием платформы Apache Airflow. Те, кто мало знаком с Airflow, получат базовое представление о принципах работы этой платформы в I части книги. Далее обсуждаются такие темы, как создание собственных компонентов, тестирование, передовые практики и развертывание, – эти главы можно читать в произвольном порядке в зависимости от конкретных потребностей читателя. Издание предназначено для специалистов по DevOps, обработке и хранению данных, машинному обучению, а также системных администраторов с навыками программирования на Python. https://github.com/BasPH/data-pipelines-with-apache-airflow

Author(s): Бас Харенслак, Джулиан де Руйтер
Publisher: ДМК Пресс
Year: 2021

Language: Russian
Pages: 502
City: М.

Оглавление
Содержание
Предисловие
Благодарности
О книге
Кому адресована эта книга
Структура книги
О коде
Отзывы и пожелания
Об авторах
Об иллюстрации на обложке
Часть I. Приступаем к работе
1. Знакомство с Apache Airflow
1.1. Знакомство с конвейерами обработки данных
1.1.1. Конвейеры обработки данных как графы
1.1.2. Выполнение графа конвейера
1.1.3. Графы конвейеров и последовательные сценарии
1.1.4. Запуск конвейера с по мощью диспетчеров рабочих процессов
1.2. Представляем Airflow
1.2.1. Определение конвейеров в коде (Python) гибким образом
1.2.2. Планирование и выполнение конвейеров
1.2.3. Мониторинг и обработка сбоев
1.2.4. Инкрементальная загрузка и обратное заполнение
1.3. Когда использовать Airflow
1.3.1. Причины выбрать Airflow
1.3.2. Причины не выбирать Airflow
1.4. Остальная часть книги
Резюме
2. Анатомия ОАГ
2.1. Сбор данных из множества источников
2.1.1. Изучение данных
2.2. Пишем наш первый ОАГ
2.2.1. Задачи и операторы
2.2.2. Запуск произвольного кода на Python
2.3. Запуск ОАГ в Airflow
2.3.1. Запуск Airflow в окружении Python
2.3.2. Запуск Airflow в контейнерах Docker
2.3.3. Изучаем пользовательский интерфейс Airflow
2.4. Запуск через равные промежутки времени
2.5. Обработка неудачных задач
Резюме
3. Планирование в Airflow
3.1. Пример: обработка пользовательских событий
3.2. Запуск через равные промежутки времени
3.2.1. Определение интервалов
3.2.2. Интервалы на основе Cron
3.2.3. Частотные интервалы
3.3. Инкрементная обработка данных
3.3.1. Инкрементное извлечение событий
3.3.2. Динамическая привязка ко времени с использованием дат выполнения
3.3.3. Разделение данных
3.4. Даты выполнения
3.4.1. Выполнение работы с фиксированными интервалами
3.5. Использование обратного заполнения
3.5.1. Назад в прошлое
3.6. Лучшие практики для проектирования задач
3.6.1. Атомарность
3.6.2. Идемпотентность
Резюме
4. Создание шаблонов задач с использованием контекста Airflow
4.1. Проверка данных для обработки с помощью Airflow
4.1.1. Определение способа загрузки инкрементальных данных
4.2. Контекст задачи и шаблонизатор Jinja
4.2.1. Создание шаблонов аргументов оператора
4.2.2. Что доступно для создания шаблонов?
4.2.3. Создание шаблона для PythonOperator
4.2.4. Предоставление переменных PythonOperator
4.2.5. Изучение шаблонных аргументов
4.3. Подключение других систем
Резюме
5. Определение зависимостей между задачами
5.1. Базовые зависимости
5.1.1. Линейные зависимости
5.1.2. Зависимости «один-ко-многим» и «многие-к-одному»
5.2. Ветвление
5.2.1. Ветвление внутри задач
5.2.2. Ветвление внутри ОАГ
5.3. Условные задачи
5.3.1. Условия в задачах
5.3.2. Делаем задачи условными
5.3.3. Использование встроенных операторов
5.4. Подробнее о правилах триггеров
5.4.1. Что такое правило триггеров?
5.4.2. Эффект неудач
5.4.3. Другие правила
5.5. Обмен данными между задачами
5.5.1. Обмен данными с по мощью XCom
5.5.2. Когда (не) стоит использовать XCom
5.5.3. Использование настраиваемых XCom-бэкендов
5.6. Связывание задач Python с по мощью Taskflow API
5.6.1. Упрощение задач Python с по мощью Taskflow API
5.6.2. Когда (не) стоит использовать Taskflow API
Резюме
Часть II. За пределами основ
6. Запуск рабочих процессов
6.1. Опрос условий с использованием сенсоров
6.1.1. Опрос пользовательских условий
6.1.2. Использование сенсоров в случае сбоя
6.2. Запуск других ОАГ
6.2.1. Обратное заполнение с по мощью оператора TriggerDagRunOperator
6.2.2. Опрос состояния других ОАГ
6.3. Запуск рабочих процессов с помощью REST API и интерфейса командной строки
Резюме
7. Обмен данными с внешними системами
7.1. Подключение к облачным сервисам
7.1.1. Установка дополнительных зависимостей
7.1.2. Разработка модели машинного обучения
7.1.3. Локальная разработка с использованием внешних систем
7.2. Перенос данных из одной системы в другую
7.2.1. Реализация оператора PostgresToS3Operator
7.2.2. Привлекаем дополнительные ресурсы для тяжелой работы
Резюме
8. Создание пользовательских компонентов
8.1. Начнем с PythonOperator
8.1.1. Имитация API для рейтинга фильмов
8.1.2. Получение оценок из API
8.1.3. Создание фактического ОАГ
8.2. Создание собственного хука
8.2.1. Создание собственного хука
8.2.2. Создание ОАГ с по мощью MovielensHook
8.3. Создание собственного оператора
8.3.1. Определение собственного оператора
8.3.2. Создание оператора для извлечения рейтингов
8.4. Создание нестандартных сенсоров
8.5. Упаковка компонентов
8.5.1. Создание пакета Python
8.5.2. Установка пакета
Резюме
9. Тестирование
9.1. Приступаем к тестированию
9.1.1. Тест на благонадежность ОАГ
9.1.2. Настройка конвейера непрерывной интеграции и доставки
9.1.3. Пишем модульные тесты
9.1.4. Структура проекта Pytest
9.1.5. Тестирование с файлами на диске
9.2. Работа с ОАГ и контекстом задачи в тестах
9.2.1. Работа с внешними системами
9.3. Использование тестов для разработки
9.3.1. Тестирование полных ОАГ
9.4. Эмулируйте промышленное окружение с помощью Whirl
9.5. Создание окружений
Резюме
10. Запуск задач в контейнерах
10.1. Проблемы, вызываемые множеством разных операторов
10.1.1. Интерфейсы и реализации операторов
10.1.2. Сложные и конфликтующие зависимости
10.1.3. Переход к универсальному оператору
10.2. Представляем контейнеры
10.2.1. Что такое контейнеры?
10.2.2. Запуск нашего первого контейнера Docker
10.2.3. Создание образа Docker
10.2.4. Сохранение данных с использованием томов
10.3. Контейнеры и Airflow
10.3.1. Задачи в контейнерах
10.3.2. Зачем использовать контейнеры?
Легкое управление зависимостями
Единый подход к запуску различных задач
Улучшенная тестируемость
10.4. Запуск задач в Docker
10.4.1. Знакомство с DockerOperator
10.4.2. Создание образов для задач
10.4.3. Создание ОАГ с задачами Docker
10.4.4. Рабочий процесс на базе Docker
10.5. Запуск задач в Kubernetes
10.5.1. Представляем Kubernetes
10.5.2. Настройка Kubernetes
10.5.3. Использование KubernetesPodOperator
10.5.4. Диагностика проблем, связанных с Kubernetes
10.5.5. Отличия от рабочих процессов на базе Docker
Резюме
Часть III. Airflow на практике
11. Лучшие практики
11.1. Написание чистых ОАГ
11.1.1. Используйте соглашения о стилях
Следуем руководству по стилям
Использование статических анализаторов для проверки качества кода
Использование инструментов для форматирования кода с целью обеспечения общепринятого форматирования
Соглашения о стилях, относящихся к Аirflow
11.1.2. Централизованное управление учетными данными
11.1.3. Единообразно указывайте детали конфигурации
11.1.4. Избегайте вычислений в определении ОАГ
11.1.5. Используйте фабричные функции для генерации распространенных шаблонов
11.1.6. Группируйте связанные задачи с по мощью групп задач
11.1.7. Создавайте новые ОАГ для больших изменений
11.2. Проектирование воспроизводимых задач
11.2.1. Всегда требуйте, чтобы задачи были идемпотентными
11.2.2. Результаты задачи должны быть детерминированными
11.2.3. Проектируйте задачи с использованием парадигмы функционального программирования
11.3. Эффективная обработка данных
11.3.1. Ограничьте объем обрабатываемых данных
11.3.2. Инкрементальная загрузка и обработка
11.3.3. Кешируйте промежуточные данные
11.3.4. Не храните данные в локальных файловых системах
11.3.5. Переложите работу на внешние/исходные системы
11.4. Управление ресурсами
11.4.1. Управление параллелизмом с по мощью пулов
11.4.2. Обнаружение задач с длительным временем выполнения с по мощью соглашений об уровне предоставления услуг и оповещений
Резюме
12. Эксплуатация Airflow в промышленном окружении
12.1. Архитектура Airflow
12.1.1. Какой исполнитель мне подходит?
12.1.2. Настройка базы метаданных для Airflow
12.1.3. Присмотримся к планировщику
Процессор ОАГ
Планировщик заданий
Исполнитель задач
12.2. Установка исполнителей
12.2.1. Настройка SequentialExecutor
12.2.2. Настройка LocalExecutor
12.2.3. Настройка CeleryExecutor
12.2.4. Настройка KubernetesExecutor
Использование ОАГ с подами с помощью PersistentVolume
Извлекаем последний код ОАГ из репозитория с помощью init-контейнера синхронизации с Git
Встраивайте ОАГ в образ Docker
12.3. Работа с журналами всех процессов Airflow
12.3.1. Вывод веб-сервера
12.3.2. Вывод планировщика
12.3.3. Журналы задач
12.3.4. Отправка журналов в удаленное хранилище
12.4. Визуализация и мониторинг метрик Airflow
12.4.1. Сбор метрик из Airflow
Какую систему сбора метрик выбрать?
12.4.2. Настройка Airflow для отправки метрик
12.4.3. Настройка Prometheus для сбора метрик
12.4.4. Создание дашбордов с Grafana
12.4.5. Что следует мониторить?
Задержка
Трафик
Ошибки
Насыщенность
12.5. Как получить уведомление о невыполненной задаче
12.5.1. Оповещения в ОАГ и операторах
12.5.2. Определение соглашений об уровне предоставления услуги
12.6. Масштабируемость и производительность
12.6.1. Контроль максимального количества запущенных задач
12.6.2. Конфигурации производительности системы
12.6.3. Запуск нескольких планировщиков
Резюме
13. Безопасность в Airflow
13.1. Обеспечение безопасности веб-интерфейса Airflow
13.1.1. Добавление пользователей в интерфейс RBAC
13.1.2. Настройка интерфейса RBAC
13.2. Шифрование хранимых данных
13.2.1. Создание ключа Fernet
13.3. Подключение к службе LDAP
13.3.1. Разбираемся с LDAP
13.3.2. Извлечение пользователей из службы LDAP
13.4. Шифрование трафика на веб-сервер
13.4.1. Разбираемся с протоколом HTTP
13.4.2. Настройка сертификата для HTTPS
13.5. Извлечение учетных данных из систем управления секретами
Резюме
14. Проект: поиск самого быстрого способа передвижения по Нью-Йорку
14.1. Разбираемся с данными
14.1.1. Файловый ресурс Yellow Cab
14.1.2. REST API Citi Bike
14.1.3. Выбор плана подхода
14.2. Извлечение данных
14.2.1. Скачиваем данные по Citi Bike
14.2.2. Загрузка данных по Yellow Cab
14.3. Применение аналогичных преобразований к данным
14.4. Структурирование конвейера обработки данных
14.5. Разработка идемпотентных конвейеров обработки данных
Резюме
Часть IV. Облако
15. Airflow и облако
15.1. Проектирование стратегий (облачного) развертывания
15.2. Операторы и хуки, предназначенные для облака
15.3. Управляемые сервисы
15.3.1. Astronomer.io
15.3.2. Google Cloud Composer
15.3.3. Amazon Managed Workflows for Apache Airflow
15.4. Выбор стратегии развертывания
Резюме
16. Airflow и AWS
16.1. Развертывание Airflow в AWS
16.1.1. Выбор облачных сервисов
16.1.2. Проектирование сети
16.1.3. Добавление синхронизации ОАГ
16.1.4. Масштабирование с по мощью CeleryExecutor
16.1.5. Дальнейшие шаги
16.2. Хуки и операторы, предназначенные для AWS
16.3. Пример использования: бессерверное ранжирование фильмов с AWS Athena
16.3.1. Обзор
16.3.2. Настройка ресурсов
16.3.3. Создание ОАГ
16.3.4. Очистка
Резюме
17. Airflow и Azure
17.1. Развертывание Airflow в Azure
17.1.1. Выбор сервисов
17.1.2. Проектирование сети
17.1.3. Масштабирование с по мощью CeleryExecutor
17.1.4. Дальнейшие шаги
17.2. Хуки и операторы, предназначенные для Azure
17.3. Пример: бессерверное ранжирование фильмов с Azure Synapse
17.3.1. Обзор
17.3.2. Настройка ресурсов
17.3.3. Создание ОАГ
17.3.4. Очистка
Резюме
18. Airflow в GCP
18.1. Развертывание Airflow в GCP
18.1.1. Выбор сервисов
18.1.2. Развертывание в GKE с по мощью Helm
18.1.3. Интеграция с сервисами Google
18.1.4. Проектирование сети
18.1.5. Масштабирование с по мощью CeleryExecutor
18.2. Хуки и операторы, предназначенные для GCP
18.3 Пример использования: бессерверный рейтинг фильмов в GCP
18.3.1. Загрузка в GCS
18.3.2. Загрузка данных в BigQuery
18.3.3. Извлечение рейтингов, находящихся в топе
Резюме
Приложение A. Запуск примеров кода
A.1 Структура кода
A.2 Запуск примеров
A.2.1 Запуск окружения Docker
A.2.2 Проверка запущенных сервисов
A.2.3 Завершение работы с окружением
Приложение В. Структуры пакетов Airflow 1 и 2
B.1 Структура пакета Airflow 1
B.2 Структура пакета Airflow 2
Приложение С. Сопоставление метрик в Prometheus
Предметный указатель