Инженеры по обработке данных: шаг за шагом проект по разработке данных

Nov 28 2022
если вы планируете улучшить свои навыки и принять участие в некоторых тяжелых технических проектах, я вас понял, эта статья для вас, а также следующие, я собираюсь выделить для вас лучшее, как я уже упоминал, всегда, хорошие знания распространяются здесь. В этой статье мы расскажем, как создать стек данных с помощью инструмента управления рабочим процессом apache airflow, построить информационные панели с помощью Dash plottly, собрать метрики с помощью Statsd и визуализировать производительность с помощью Prometheus и Grafana.

если вы планируете улучшить свои навыки и принять участие в некоторых тяжелых технических проектах, я вас понял, эта статья для вас, а также следующие, я собираюсь выделить для вас лучшее, как я уже упоминал, всегда, хорошие знания распространяются здесь.

Рисунок 1: архитектура проекта

В этой статье мы расскажем, как создать стек данных с помощью инструмента управления рабочим процессом apache airflow , построить информационные панели с помощью Dash plottly , собрать метрики с помощью Statsd и визуализировать производительность с помощью Prometheus и Grafana .

Все задачи, указанные выше, будут объединены вместе с помощью docker compose . у некоторых из вас не было возможности работать с ним, поэтому давайте дадим ему краткое определение.

Рис. 2. Создание Docker

Представьте, что вы работаете со многими контейнерами одновременно, у каждого из них есть своя специфическая задача, вы собираетесь обрабатывать каждый из них отдельно? КОНЕЧНО НЕТ ! . Docker Compose — это инструмент, помогающий преодолеть эту проблему и легко обрабатывать несколько контейнеров одновременно.

Я вижу, вы недоумеваете, почему я начал статью с обсуждения docker compose , но это нормально, я объясню почему. Я хочу, чтобы вы, ребята, поняли, что необходимо подумать об основах каждого ИТ-проекта, прежде чем начинать копать глубже. Docker compose позволит нам запустить все службы, необходимые для нашего проекта.

Давайте посмотрим на наш файл компоновки докеров ( docker-compose-LocalExecutor.yml ):

каждый файл docker-compose имеет атрибуты, которые нам нужно понять:

  • версия : версия компоновки докера
  • image : образ докера, который нужно извлечь из концентратора докеров
  • depend_on: здесь нам нужно указать, какие сервисы связаны с текущим сервисом, например, apache airflow нуждается в Postgres и Mysql для хранения метаданных дагов.
  • среда: здесь мы определяем переменные среды службы, например POSTGRES_USER = поток воздуха будет использоваться при запуске службы.
  • command : первая команда bash, которую вам нужно запускать при каждом запуске службы
  • тома: место внутри вашего контейнера, которое будет смонтировано в вашей файловой системе, например, преобразованные данные из конвейеров будут храниться в постоянном хранилище
  • порты: это носитель, который ваши контейнеры будут использовать для связи с другими службами, например, данные будут загружаться в Statsd из воздушного потока через порт 8125 с использованием протокола udp (см. скриншот ниже).
  • Запустите службы базы данных:
  • Рисунок 3: служба mysql
    Рисунок 4: веб-сервер воздушного потока

    3. Запустите статистику:

    Рисунок 5: Служба Statsd

    4. Запустите Prometheus и Grafana:

    Рисунок 6: Служба Prometheus
    Рисунок 7: Служба Grafana

    Итак, как мы видим, все эти определения записаны в один и тот же файл, и все они будут запущены вместе с помощью простой команды для достижения того, на что нацелен проект.

    Проект разделен на 3 основных этапа:

    1. парсинг данных и автоматизировать его с помощью Apache airflow .
    2. панели с использованием Dash plotly .
    3. контролировать его с помощью 3 инструментов: Statsd, Prometheus, Grafana.
    • источник данных :https://www.fahrrad.de/
    Рис. 8. Скриншот с веб-сайта Fahrrad.de.

    мы собираемся извлечь:

    • торговая марка
    • категория
    • название модели
    • Цена
    • картина с велосипедом

    Скрипты очистки будут автоматизированы с помощью самого мощного инструмента apache airflow, но если вы никогда не использовали его раньше, я дам краткий обзор инструмента.

    Apache airflow — это инструмент управления рабочими процессами, в котором есть множество операторов, которые могут помочь любому инженеру по обработке и анализу данных разрабатывать и организовывать задания в проектах специалистов по работе с большими данными, например, автоматизировать сценарии сбора данных. операторы, используемые в этом проекте:

    • PythonOperator : для скрипта парсинга веб-страниц.
    • BashOperator: для определения заданий администрирования Linux.
    • EmailOperator : для отправки электронных писем после завершения конвейера.

    Даг представляет собой последовательность задач и каждая задача определяется с помощью одного оператора

    задача должна иметь определенное и упорядоченное место (t1 >> t2: задача 1 должна выполняться перед задачей 2)

    Рисунок 9: снимок экрана конвейера

    После сбора данных из источника (веб-сайт с использованием метода очистки) пришло время получить от него информацию, поэтому мы создали интерактивную панель инструментов с использованием Dash plotly .

    Dash plotly : это фреймворк для написания интерактивных веб-приложений, написанных поверх Flask, Plotly. js и Реакт. js.

    Рис. 10. Панель инструментов для визуализации данных

    Прямо сейчас, давайте сделаем какой-нибудь модный персонал, пока работа выполняется, она будет генерировать метрики, которые следует отслеживать, эти метрики будут проталкиваться из воздушного потока через порт 8125 в Statsd с использованием протокола udp (вы можете проверить файл компоновки докера ), данные метрик не могут быть отображены в организованном интерфейсе, если мы используем только statsd, поэтому мы будем полагаться на Prometheus и Grafana для достижения того, что мы ищем.

    Рисунок 11: метрики в Statsd
    Рис. 12. Показатели, отображаемые в Prometheus
    Рис. 13. Панель инструментов Grafana

    весь процесс делается так:

    Рис. 14. Мониторинг воздушного потока

    Видео проекта:

    Вывод :

    В этой статье мы создали целый стек данных: начиная со сбора данных с помощью скрипта Python, переходя к созданию информационной панели для извлечения из нее полезной информации, а также отслеживая конвейер данных и наблюдая за производительностью различных задач. Надеюсь, вам понравилось читать мою статью, и вы можете задать мне любой вопрос, и я с нетерпением жду ваших идей о следующей статье.

    репозиторий GIT:

    https://github.com/chiheb08/data_enginnering_project