0. Фон
Я действительно не могу понять это Airflow намного лучше, чем Azkaban и EasyScheduler с точки зрения активности сообщества и звезд Github, но почему у него даже нет полного руководства по установке? Мои потребности слишком высоки? Я очень устал, и весь этот ворочание поисковика и ютуба не приносил мне удовлетворения... Но, к счастью, шаг за шагом среда и оператор наконец-то были построены. Что ж, без лишних слов, давайте сегодня начнем руководство по установке Airflow.
1. Подготовка перед установкой
- Примечания к выпуску установки
инструмент для установки | Версия | использовать |
---|---|---|
Python | 3.6.5 | Установите воздушный поток и его зависимости и разработайте использование dag воздушного потока. |
MySQL | 5.7 | Метабаза как воздушный поток |
Airflow | 1.10.0 | Платформа планирования задач |
Выберите чистую физическую машину или облачный хост. В противном случае я не несу ответственности за любое ненужное влияние или последствия!
- Пожалуйста, убедитесь, что вы знакомы со средой Linux и основными операционными командами.Кстати, вы знаете некоторые основные команды Python.Если вы не знакомы с ним, пожалуйста, поверните налево и зарядите его снова.
2. Установите Python3
3. Установите MySQL
3 года назад я тоже писал оУчебник Centos по установке MySQL, но хоть и практично, но содержание слишком длинное.Здесь мы используем самый простой способ быстрой установки MySQL и настройки пользователей (конечно, если использовать готовыеRDS
Вы также можете пропустить процесс установки и сразу перейти к этапам создания базы данных и создания пользователя для Airflow).
- Старые правила, удалите mariadb
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64
sudo rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64
rpm -qa | grep mariadb
- Загрузите источник репозитория mysql
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
- Устанавливать через RPM
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
- Установить mysql и авторизоваться
sudo yum install mysql-server
sudo chown -R mysql:mysql /var/lib/mysql
- запустить mysql
sudo service mysqld start
В клиенте mysql выполняются следующие операции: Во-первых, вам нужно подключиться и войти в mysql.
Войдите в mysql с подключением пользователя root:
mysql -uroot
- сбросить пароль майкл
use mysql;
update user set password=password('root') where user='root';
flush privileges;
- Создайте базу данных и создайте пользователей для Airflow
Создайте библиотеку:
create database airflow;
Создать пользователя:
create user 'airflow'@'%' identified by 'airflow';
create user 'airflow'@'localhost' identified by 'airflow';
Авторизовать пользователя:
grant all on airflow.* to 'airflow'@'%';
flush privileges;
exit;
4. Установите воздушный поток
Теперь, когда все на месте, давайте перейдем к сегодняшней теме!
4.1 Основы
- 1) Установите леса воздушного потока через pip
Перед установкой нужно установить временную переменную окруженияSLUGIFY_USES_TEXT_UNIDECODE
, иначе произойдет сбой установки.Команда выглядит следующим образом:
export SLUGIFY_USES_TEXT_UNIDECODE=yes
Установите вентиляционные леса:
sudo pip install apache-airflow===1.10.0
airflow будет установлен в каталоге site-packages под python3, полный каталог:${PYTHON_HOME}/lib/python3.6/site-packages/airflow
, мой каталог воздушного потока выглядит так:
-
- Официально установить воздушный поток
Перед установкой airflow нам нужно настроить каталог установки airflow.AIRFLOW_HOME
, В то же время, чтобы облегчить использование команд, связанных с воздушным потоком, мы также раз и навсегда настраиваем воздушный поток в переменных среды.
редактировать/etc/profile
Файл переменной системной среды:
sudo vim /etc/profile
Внесите следующие изменения (конечно, конкретный каталог необходимо изменить на свой собственный соответствующий каталог, не копируйте его):
Сделайте так, чтобы измененная переменная среды вступила в силу немедленно:
sudo source /etc/profile
- 3) Выполнить
airflow
команда для инициализации
Поскольку переменные среды воздушного потока были настроеныSITE_AIRFLOW_HOME
, мы можем выполнять следующие команды где угодно:
airflow
В этот момент поток воздуха будетAIRFLOW_HOME
Некоторые файлы создаются в каталоге. Конечно, при выполнении этой команды могут быть сообщения об ошибках, вы можете их игнорировать! В результате список файлов выглядит следующим образом:
-
- Установите модуль mysql для воздушного потока
sudo pip install 'apache-airflow[mysql]'
Таким образом можно установить зависимости пакета airflow.Официальная документация по воздушному потоку
[стучит по доске, подчеркивая ключевые моменты]
При установке модуля mysql может появиться следующая ошибка:
mysql_config not found
Шаги решения следующие:
(1) Сначала проверьте, существует ли уже файл mysql_config:
find / -name mysql_config
(2) Если нет, установите mysql-devel:
sudo yum install mysql-devel
(3) После завершения установки снова проверьте наличие файла mysql_config:
-
- Использование mysql в качестве базы данных метаданных для воздушного потока
Измените файл airflow.cfg, чтобы настроить mysql в качестве метабазы воздушного потока:
Здесь огромная яма, многие туториалы пишут так прямо, а потом все кончено! ! ! Если вы мне не верите, попробуйте, подождите, пока вы инициализируете базу данных, и вы обязательно умрете! И нет никаких действительных решений для поиска! ! ! Во-вторых, не верьте, что что-то изменилосьpymysql
С реализацией пакета pymysql все еще хуже, будут проблемы с анализом типов данных, оставив вас в неведении! ! ! Помните, помните! ! !
sql_alchemy_conn = mysql://airflow:airflow@localhost:3306/airflow
или
sql_alchemy_conn = mysql+pymysql://airflow:airflow@localhost:3306/airflow
Итак, если это невозможно, что мы должны делать? Пути всегда сложнее, чем труднее! Поскольку Python3 больше не поддерживает MySQLdb, поддерживается только Python2. Однако лучшим результатом является только MySQLdb.
Во-первых, давайте установим mysqlclient через pip:
sudo pip install mysqlclient
Затем установите MySQLdb через pip:
sudo pip install MySQLdb
Наконец, мы модифицируем конфигурацию sql_alchemy_conn в файле airflow.cfg:
sql_alchemy_conn = mysql+mysqldb://airflow:airflow@localhost:3306/airflow
На данный момент мы настроили метаданные для воздушного потока и подготовили зависимости.
-
- Инициализировать информацию базы данных метаданных (на самом деле это создание новой таблицы, зависящей от воздушного потока)
airflow initdb
На данный момент таблица зависимостей воздушного потока была создана в нашей метабазе mysql (имя библиотеки — воздушный поток):
[стучит по доске, подчеркивая ключевые моменты]
При инициализации базы данных в это время могут быть сообщены следующие ошибки:
Global variable explicit_defaults_for_timestamp needs to be on (1) for mysql
Решение этой проблемы описано в официальной документации Airflow по ссылке:airflow.apache.org/faq.html. Его необходимо обработать, изменив файл конфигурации MySQL my.cnf. Шаги следующие:
(1) Найдите местоположение my.cnf:
mysql --help | grep my.cnf
(2) Измените файл my.cnf:
существует[mysqld] Ниже (нельзя писать не туда)Добавьте следующую конфигурацию:
explicit_defaults_for_timestamp=true
(3)) Перезапустите MySQL, чтобы конфигурация вступила в силу:
sudo service mysqld restart
(4) Проверьте, вступила ли в силу измененная конфигурация:
(5) Повторно выполнитьairflow initdb
Просто
-
- Основные команды для применения
- Компоненты воздушного потока: веб-сервер, планировщик, рабочий, цветок
- Запустите каждую команду компонента в фоновом режиме:
airflow xxx -D
- Ознакомьтесь со списком дагов:
airflow list_dags
- Посмотреть список задач дага:
airflow list_tasks dag_id
- Приостановить/возобновить даг:
airflow pause/unpause dag_id
- Протестируйте даг-задачу:
airflow test dag_id task_id execution_date
[стучит по доске, подчеркивая ключевые моменты]
При запуске компонента веб-сервера может быть сообщено о следующей ошибке:
Ошибка 1:
Error: 'python:airflow.www.gunicorn_config' doesn‘t exist
Установите указанную версию gunicorn:
(1) Версия Airflow 1.10 соответствует версии gunicorn 19.4.0:
sudo pip install gunicorn==19.4.0
(2) Airflow версии 1.8 устанавливает версию 19.3.0 gunicorn:
sudo pip install gunicorn==19.3.0
Ошибка 2:
FileNotFoundError: [Errno 2] No such file or directory: 'gunicorn': 'gunicorn'
Вам нужно только настроить переменную среды каталога bin Python (также см.Блог Woohoo.cn на.com/lChinaLinux/afraid/…):
sudo vim /etc/profile
source /etc/profile
4.2 Расширенная глава
-
- Первое знакомство с исполнителем (для вступления в силу требуется перезагрузка)
Зачем тут исправлять? Поскольку SequentialExecutor — это последовательное выполнение задач в одном процессе, исполнитель по умолчанию обычно используется только для тестирования, LocalExecutor используется для многопроцессорного локального выполнения задач, CeleryExecutor используется для распределенного планирования (конечно, он также может быть одиночным). машина), обычно используемая в производственных средах, DaskExecutor используется для динамического планирования задач, часто используемого для анализа данных.
- 2) Как изменить часовой пояс на Dongba (для вступления в силу требуется перезагрузка)
Зачем менять часовой пояс? Поскольку время Airflow по умолчанию — время по Гринвичу, хотя можно гарантировать, что время будет одинаковым, когда кластер Airflow распределен в разных часовых поясах, проблем с синхронизацией времени не будет, но это время на 8 часов раньше, чем в Пекине. что не соответствует нашим привычкам чтения. , недостаточно лаконично и интуитивно понятно. Учитывая, что мы обычно обслуживаем один узел, или даже если расширение находится в том же часовом поясе, часовой пояс меняется на восточно-восьмой округ, то есть пекинское время, которое нам удобнее использовать.
Come on!
(1) Измените файл airflow.cfg:
default_timezone = Asia/Shanghai
Здесь изменено время планирования планировщика, что означает, что пекинское время может быть записано непосредственно при записи времени планирования.
(2) Измените время, отображаемое в правом верхнем углу страницы веб-сервера:
необходимо изменить${PATHON_HOME}/lib/python3.6/site-packages/airflow/www/templates/admin/master.html
документ.
Эффект после модификации показан на рисунке:
(3) Измените время последнего запуска веб-сервера:
Поправка 1${PATHON_HOME}/lib/python3.6/site-packages/airflow/models.py
документ.
def utc2local(self,utc):
import time
epoch = time.mktime(utc.timetuple())
offset = datetime.fromtimestamp(epoch) - datetime.utcfromtimestamp(epoch)
return utc + offset
Эффект следующий:
2-я поправка${PATHON_HOME}/lib/python3.6/site-packages/airflow/www/templates/airflow/dags.html
документ.
dag.utc2local(last_run.execution_date).strftime("%Y-%m-%d %H:%M")
dag.utc2local(last_run.start_date).strftime("%Y-%m-%d %H:%M")
Эффект следующий:
После завершения модификации вы можете увидеть эффект, перезапустив веб-сервер!
-
- Добавить аутентификацию пользователя
Здесь мы используем простой метод аутентификации по паролю, достаточно!
(1) Установите компонент пароля:
sudo pip install apache-airflow[password]
(2) Измените файл конфигурации airflow.cfg:
[webserver]
authenticate = True
auth_backend = airflow.contrib.auth.backends.password_auth
(3) Напишите скрипт Python для добавления учетных записей пользователей:
написатьadd_account.py
документ:
import airflow
from airflow import models, settings
from airflow.contrib.auth.backends.password_auth import PasswordUser
user = PasswordUser(models.User())
user.username = 'airflow'
user.email = 'test_airflow@wps.cn'
user.password = 'airflow'
session = settings.Session()
session.add(user)
session.commit()
session.close()
exit()
воплощать в жизньadd_account.py
документ:
python add_account.py
Вы обнаружите, что в пользовательской таблице метабазы mysql будет еще одна запись.
Конечно, вы также можете создавать/модифицировать код DAG для учетных записей пользователей и визуального интерфейса с помощью сторонних плагинов. Ссылка:GitHub.com/latte-plates/ах…, к сожалению, поддерживает только Python2.x. Но позже обновлю.
-
- Изменить адрес веб-сервера (для вступления в силу требуется перезагрузка)
-
- Как изменить интервал обнаружения нового DAG (для вступления в силу требуется перезагрузка)
Если планировщик слишком часто обнаруживает DAG, это вызовет очень высокую нагрузку на ЦП. Время обнаружения планировщика по умолчанию равно 0, то есть интервал времени отсутствует.
Вы можете изменить файл airflow.cfg, изменивmin_file_process_interval
Установите временной интервал следующим образом, я изменил его, чтобы обнаруживать каждые 5 секунд:
-
- Как изменить количество потоков планировщика для управления параллелизмом (для вступления в силу требуется перезапуск)
Вы можете изменить файл airflow.cfg, изменивparallelism
Для управления параллелизмом планировщика:
4.3 Расширенный
-
- Настройка распределенного кластера воздушного потока
(Продолжение следует...)