Как использовать DockerOperator от Apache Airflow - PullRequest
0 голосов
/ 16 января 2020

Этот вопрос связан с пониманием концепции, касающейся DockerOperator и Apache Airflow, поэтому я не уверен, является ли этот сайт правильным местом. Если нет, пожалуйста, дайте мне знать, где я могу опубликовать это.

Ситуация следующая: я работаю с ноутбуком Windows, у меня есть очень простой c конвейер ETL, который извлекает данные с какого-либо сервера и записывает необработанные данные в MongoDB по расписанию основа с Apache -потоком. У меня есть файл docker-compose.yml с тремя службами: служба mon go для MongoDB, служба mon go - express в качестве инструмента администратора для MongoDB, служба веб-сервера для Apache -Airflow и postgres служба в качестве базы данных для Apache -Airflow.

До сих пор я разработал некоторый код Python в функциях, и эти функции вызываются экземпляром Airflow с использованием PythonOperator. Поскольку отладка с помощью PythonOperator очень сложна, я хочу вместо этого попробовать DockerOperator. Я следовал этому учебному пособию , в котором утверждается, что с помощью DockerOperator вы можете разрабатывать свой исходный код независимо от операционной системы, в которой код будет позже выполняться из-за однократной сборки Docker концепции, запуска где угодно'.

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

Упакуйте артефакты вместе со всеми зависимостями в Docker изображение. ==> Значит ли это, что мне нужно создавать Dockerfile для каждой задачи, а затем создавать образ с помощью этого Dockerfile? Предоставить Entrypoint из вашего контейнера для вызова и параметризации задачи с помощью DockerOperator. ==> Как вы это делаете?

Спасибо за ваше время, я очень ценю это!

1 Ответ

0 голосов
/ 19 января 2020

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

Здесь есть несколько соображений относительно вашего вопроса, который конкретно касается развертывания .

  1. Вам нужно создать Docker изображение . Скорее всего, вы захотите добавить к этому тегу , так как вы захотите создать версию изображения. DockerOperator по умолчанию использует тег latest на изображении.
  2. Изображение должно быть доступно для вашего развернутого экземпляра Airflow. Они могут быть созданы на компьютере, на котором вы запускаете Airflow, если вы хотите запустить его локально. Если вы развернули Airflow где-то в сети, более распространенной практикой будет отправлять их в облачный сервис. Вы можете использовать несколько провайдеров (Docker Hub, Amazon ECR и т. Д. c ...).

Предоставить Entrypoint из вашего контейнера для вызова и параметризации задача с помощью DockerOperator. ==> Как вы это делаете?

Если у вас есть встроенное изображение и оно доступно для Airflow, вам просто нужно создать задачу, используя DockerOperator, например:

dag = DAG(**kwargs)
task_1 = DockerOperator(
    dag=dag,
    task_id='docker_task',
    image='dummyorg/dummy_api_tools:v1',
    auto_remove=True,
    docker_url='unix://var/run/docker.sock',
    command='python extract_from_api_or_something.py'
)

Я бы рекомендовал потратить некоторое время на понимание Docker. Поначалу немного сложно обернуть голову, но это очень ценный инструмент, особенно для таких систем, как Airflow.

...