O Apache Airflow é uma ferramenta open source desenvolvida pela Apache Foundation para realizar a criação, agendamento e monitoramento de processos de ETL/ELT de forma programática. É escrito em Python (inclusive para os códigos ETL), funciona de maneira simples, dinâmica, escalável e possuí alguns diferenciais que auxiliam na administração como interface web, autenticação ldap (com gestão de acesso a cada ETL por grupos).

Conhecendo agora o Airflow, vamos falar como instalar ele em sua organização.

Vamos considerar aqui que você já tem um CentOS instalado com um padrão de sua empresa. Se você ainda não tem um padrão de instalação, sugerimos que leia primeiro alguns de nossos posts para se basear em uma instalação padrão para sua empresa:

Com o sistema operacional instalado e configurado, acesse como root e execute os seguintes comandos para instalar os pacotes mínimos necessários:

yum install bzip2-devel gcc libffi-devel libpq libpq-devel openssl-devel sqlite-libs sqlite-devel unixODBC unixODBC-devel xz-devel zlib-devel -y

yum groupinstall "Development Tools" -y

Com os requisitos mínimos instalados, vamos instalar o Python 3.10. Para isso, execute:

cd /opt
wget https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz
tar xvf Python-3.10.0.tgz
cd Python-3.10.0

./configure --enable-loadable-sqlite-extensions --enable-optimizations

make altinstall

Vamos instalar o pip, do repositório yum, que irá nos ajudar a suprir alguns erros e requisitos, execute o comando:

yum install python3-pip -y

Agora, vamos atualizar o pip e instalar os módulos que usaremos do Python. Para isso, execute os seguintes comandos:

/usr/local/bin/python3.10 -m pip install --upgrade pip

pip install PyYAML
pip install wheel
pip install pysqlite3
pip install pyodbc
pip install psycopg2
pip install pandas
pip install apache-airflow

Agora vamos baixar os arquivos de serviço do Airflow e configurá-los no ambiente, para isso execute:

useradd airflow
mkdir /etc/airflow
mkdir /run/airflow
chown airflow:airflow /run/airflow
chmod 0755 -R /run/airflow

Agora vamos fazer download dos arquivos do https://github.com/apache/airflow/tree/main/scripts/systemd

wget -P /etc/sysconfig/ https://raw.githubusercontent.com/apache/airflow/master/scripts/systemd/airflow
wget -P /usr/lib/systemd/system/ https://raw.githubusercontent.com/apache/airflow/master/scripts/systemd/airflow-scheduler.service
wget -P /usr/lib/systemd/system/ https://raw.githubusercontent.com/apache/airflow/master/scripts/systemd/airflow-webserver.service
wget -P /etc/airflow/ https://raw.githubusercontent.com/apache/airflow/master/scripts/systemd/airflow.conf

Para criarmos a estrutura padrão do Airflow, tanto de arquivos, permissões e exemplos na intergade, execute o seguinte comando:

export AIRFLOW_HOME=/opt/airflow
echo "AIRFLOW_HOME=/opt/airflow" >> /etc/environment
airflow db init

Agora vamos criar a conta de administrador:

airflow users create --username admin --firstname Admin --lastname Airflow --role Admin --email email_da_sua_equipe_de_ti@sua_empresa.com.br

Irá solicitar uma senha, informe-a (e confirme-a), em seguida execute:

ln -s /etc/airflow/airflow.conf /usr/lib/tmpfiles.d/airflow.conf
ln -s /opt/airflow/airflow.cfg /etc/airflow/airflow.cfg
ln -s /opt/airflow/webserver_config.py /etc/airflow/webserver_config.py

ln -s `which airflow` /bin/airflow

sed -i "s/hostname_callable = socket.getfqdn/hostname_callable = socket:gethostname/g" /etc/airflow/airflow.cfg
sed -i "s/warn_deployment_exposure = True/warn_deployment_exposure = False/g" /etc/airflow/airflow.cfg

mkdir /opt/airflow/dags
mkdir /opt/airflow/plugins

chown -R airflow:airflow /opt/airflow
chmod -R 775 /opt/airflow

Caso possua, coloque algum arquivo/script etl na pasta dags criada acima, para o que o Airflow leia, quando for iniciado. Com o ambiente preparado, vamos inicializar o diretório home do Airflow, para isso, execute:

echo "AIRFLOW_CONFIG=/opt/airflow/airflow.cfg" >> /etc/sysconfig/airflow
echo "AIRFLOW_HOME=/opt/airflow" >> /etc/sysconfig/airflow

Com todo o ambiente pronto, configure o serviço para iniciar automaticamente

systemctl enable airflow-scheduler
systemctl enable airflow-webserver

Para configurar o envio de e-mail, verifique no seu servidor de e-mail se está liberado o relay a partir do IP do seu servidor de Airflow e que há toda a liberação de rede (portas TCP no firewall, etc.), em seguida execute:

sed -i "s/smtp_host = localhost/smtp_host = seu_servidor_smtp.seu_dominio.com.br/g" /etc/airflow/airflow.cfg

sed -i "s/smtp_mail_from = airflow@example.com/smtp_mail_from = airflow@seu_dominio.com.br/g" /etc/airflow/airflow.cfg

Reinicie o servidor com o comando:

init 6

Acesse a interface do Airflow por um navegador, com o endereço http://seu_servidor_airflow:8080 (com o usuário admin e a senha que você definiu durante a instalação)

Controlando os logs do Airflow

A configuração padrão do Airflow, além de gerar muitos logs, gera uma pasta diferente para cada log gerado. O que inviabiliza uma gerência da informação e do espaço em disco. Agora que seu Airflow está instalado e funcionando, caso queira mudar essa configuração sugerimos que leia nosso post Controlando os logs do Airflow, para reduzir consumo de disco

Opcional – Adicionar módulos adicionais no Python

Caso ache necessário colocar alguns desses módulos listados abaixo, execute:

pip install bcrypt
pip install iso8601
pip install isodate
pip install pandas-gbq
pip install mypy-extensions
pip install psycopg2-binary
pip install pyOpenSSL
pip install redis

pip install sshtunnel
pip install mysql-connector-python
pip install virtualenv
pip install pysftp

pip install websocket-client
pip install tornado
pip install httplib2

pip install grpcio-gcp
pip install ldap3
pip install python-http-client

pip install apache-airflow-providers-odbc
pip install apache-airflow-providers-ssh

yum install mysql-common mysql-libs mysql-devel -y

pip install mysqlclient
pip install apache-airflow-providers-mysql
pip install apache-airflow-providers-postgres

yum install openldap-devel -y

pip install python-ldap

Opcional – Instalando o driver MSSQL

Para instalar o driver MSSQL, execute os seguintes comandos:

curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/mssql-tools.repo

yum remove unixODBC-utf16 unixODBC-utf16-devel

ACCEPT_EULA=Y yum install msodbcsql17 mssql-tools -y

echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc

source ~/.bashrc

yum install -y unixODBC-devel

pip install pymssql

Fontes/Referências

NVLAN – Configurando o SSSD para integrar o CentOS com o LDAP (Active Directory)
NVLAN – Controlando os logs do Airflow, para reduzir consumo de disco
NVLAN – Corrigir erro de não conseguir mais executar comando yum no CentOS
NVLAN – Instalação padrão do CentOS7
NVLAN – Montar compartilhamentos CIFS no CentOS

https://airflow.apache.org/docs/apache-airflow/stable/installation/installing-from-pypi.html
https://airflow.apache.org/docs/apache-airflow/stable/start/local.html
https://docs.microsoft.com/pt-br/sql/connect/python/pyodbc/step-1-configure-development-environment-for-pyodbc-python-development?view=sql-server-ver16
https://github.com/danilosousadba/airflow
https://medium.com/@ryanroline/installing-apache-airflow-on-windows-10-5247aa1249ef
https://mlopshowto.com/an-apache-airflow-mvp-complete-guide-for-a-basic-production-installation-using-localexecutor-beb10e4886b2
https://stackoverflow.com/questions/1210664/no-module-named-sqlite3
https://tecadmin.net/install-python-3-7-on-centos-8/
https://towardsdatascience.com/how-to-run-apache-airflow-as-daemon-using-linux-systemd-63a1d85f9702
https://www.youtube.com/watch?v=s6TygwvYdN0
https://www.youtube.com/watch?v=SYOUbiGtGiU

Mais Informações

Esperamos ter ajudado da melhor forma possível e estaremos sempre a disposição para mais informações.

Se você tem interesse em algum assunto específico, tem alguma dúvida que precisa de ajuda, ou quer sugerir um post, entre em contato conosco pelo e-mail equipe@nvlan.com.br.

NVLAN - Consultoria