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:
- Instalação padrão do CentOS7
- Corrigir erro de não conseguir mais executar comando yum no CentOS
- Configurando o SSSD para integrar o CentOS com o LDAP (Active Directory)
- Montar compartilhamentos CIFS no CentOS
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.