Neste artigo, vamos nos aprofundar em como instalar e configurar o Apache Airflow localmente. Antes de tudo, é importante dizer que esta abordagem também funcionará caso você precise ou queira instalar o Airflow em uma máquina virtual, tal como o Amazon EC2 ou Google Compute Engine.
O Apache Airflow é uma plataforma open-source para orquestrar fluxos de dados. A plataforma permite aos usuários definir, agendar e monitorar fluxos de dados por meio de DAGs (directed acyclic graphs), tornando fácil gerenciar e automatizar tarefas relacionadas a processamento de dados, ETL (extração, transformação e carregamento de dados) e demais tarefas computacionais.
O Airflow oferece suporte para dependência de tarefas, gerenciamento de erros e logging, sendo a escolha mais popular para quem precisa gerenciar pipeline de dados e automatizar processos relacionados a dados de uma forma escalável e confiável.
Instalar o Apache Airflow
Para instalar o Apache Airflow, você precisa instalar sua biblioteca Python. Para isso, abra uma janela do terminal e digite:
pip3 install apache-airflow
Depois, você precisará definir um diretório inicial (ROOT), que nada mais é que um local no seu computador em que você queira que o Airflow funcione. Dito isso, crie uma pasta com o nome do seu projeto (ex: airflow_project).
Agora, volte ao terminal, navegue até a pasta que você acabou de criar e digite o seguinte comando:
export AIRFLOW_HOME="$(pwd)"
Este comando irá configurar a pasta que você acabou de criar como a pasta inicial do Airflow (ROOT). Isto significa dizer que o Airflow só será capaz de identificar e trabalhar em arquivos que estejam dentro desta pasta e subpastas.
Iniciar o banco de dados do Apache Airflow
Para continuar o processo de instalar o Apache Airflow, precisamos de um banco de dados para gerenciar os workflows. O Apache Airflow suporta os seguintes bancos de dados: SQLite, MySQL e PostgreSQL. Por padrão, o Apache Airflow utiliza o SQLite, que comumente utilizado com objetivo de rodar testes e desenvolver localmente.
Embora o SQLite não seja recomendado para sustentar um ambiente de produção, pode ser uma opção inicial para testar se tudo está funcionando. Posteriormente, é aconselhável migrar o banco de dados para PostgreSQL ou MySQL.
Por outro lado, se a intenção for utilizar o Airflow de maneira oficial na empresa, minha sugestão seria começar diretamente com o PostgreSQL ou MySQL. Se, porém, o objetivo for apenas executar processos localmente ou utilizá-lo em um projeto ou pesquisa, o SQLite atenderá adequadamente às suas necessidades.
Para fins deste artigo, vamos cubrir SQLite e PostgreSQL.
SQLite
Iniciar um banco de dados do SQLite é bem direto ao ponto. Tudo que você precisa fazer é ir até o terminal (na pasta inicial do projeto, ou pasta ROOT) e digitar:
airflow db init
airflow standalone
Após executar esses comandos, o Airflow iniciará uma base de dados SQLite e criará um usuário para permitir o acesso à interface gráfica. Ao concluir esse processo, o sistema fornecerá um nome de usuário, senha e uma URL HTTP, que indica o local onde o Airflow está sendo executado.
Você pode acessar a UI digitando http://localhost:8080/ no seu browser de escolha.
O login padrão no Airflow é admi
n e a senha normalmente estará armazenada no arquivo: standalone_admin_password.txt.
Se este processo de alguma forma não fiuncionar, o principal motivo é que a variável AIRFLOW_HOME
não foi definida corretamente. Para garantir que você esteja rodando os comandos na pasta certa, confira se a variável AIRFLOW_HOME
está apontando para o caminho certo. Para fazer isso, utilize o comando echo $AIRFLOW_HOME
Se, por algum motivo você precisar da senha do banco de dados, o Airflow cria automaticamente um arquivo chamado standalone_admin_password.txt
que contém a senha.
PostgreSQL
Para configurar um banco de dados PostgreSQL, você precisa de instalar o Postgres na sua máquina. Você pode instalá-lo por meio do Homebrew (que é um gerenciador de pacotes no terminal) ou por meio do site oficial. Para fins deste artigo, vamos seguir com a instalação via Homebrew.
Antes de instalar o PostgreSQL, você precisa garantir que o Homebrew esteja atualizado. Para isso, digite no terminal:
brew update
Depois de atualizar o Homebrew, você pode rodar o seguinte comando para instalar o Postgres:
brew install postgresql
Agora, o próximo passo será iniciar o serviço. Você pode fazer isso digitando o seguinte comando:
services start postgresql
Configurando o server do banco de dados Postgres
Após iniciar o servidor do PostgreSQL, o passo seguinte é configurá-lo para uso. Em seguida, procederemos à criação de um usuário ROOT, conferindo-lhe privilégios de administrador no banco de dados do servidor.
Garanta que o serviço esteja rodando e digite o seguinte comando no terminal:
psql postgres
Este comando abrirá a interface do Postgres no terminal e permitirá que você rode consultas SQL diretamente de lá.
Agora, precisamos criar a banco de dados do Airflow a um usuário que terá privilégios de administrador nesta banco de dados. Para isto, digite os seguintes comandos (altere os comandos entre [colchetes] para os nomes de sua preferência:
CREATE DATABASE airflow;
CREATE USER [INSERT YOUR USERNAME] WITH LOGIN PASSWORD [INSERT YOUR PASSWORD]
ALTER ROLE [YOUR USERNAME] CREATEDB;
ALTER ROLE [YOUR USERNAME] SUPERUSER;
GRANT ALL PRIVILEGES ON DATABASE airflow TO [YOUR USERNAME]
Iniciar o banco de dados do Apache Airflow
Agora que temos nossa banco de dados e usuários configurados, vamos iniciar a banco de dados com o seguinte comando no terminal:
airflow db init
Agora vamos criar um usuário do Airflow. Este será o usuário responsável por rodar os processos dentro do Airflow, o que é diferente do usuário do banco de dados. Para criá-lo, basta rodar o seguinte comando no terminal:
airflow users create \
--username admin \
--password admin \
--firstname Peter \
--lastname Parker \
--role Admin \
--email [INSERT YOUR EMAIL]
Inicie o webserver:
airflow webserver -D
A flag ‘-D’ indica daemon mode
, que significa que os logs gerados pelo webserver do Airflow não ficarão aparecendo na janela do seu terminal, te permitindo rodar outros comandos livremente.
Iniciar o scheduler
Diferentemente do modo standalone, o Airflow precisa que tanto o webserver quanto o scheduler estejam rodando. Dito isso, você pode abrir uma nova janela do terminal para rodar o scheduler. Para iniciar o scheduler, utilize os comandos abaixo.
** Você precisa estar na pasta inicial do projeto (ROOT) para os comandos abaixo funcionarem.
export AIRFLOW_HOME="$(pwd)"
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
airflow scheduler
Para rodar o scheduler no modo daemon
, você precisará rodar os seguintes comandos no terminal:
rm airflow-scheduler.err
rm airflow-scheduler.pid
airflow scheduler -D
Depois de tudo isso, você vai abrir seu browser, digitar o diretório abaixo e logar com seu nome de usuário e senha. A partir daí, você já estará com tudo pronto para começar a escrever suas primeiras DAGs. Por padrão, o diretório estará configurado para rodar em:
http://localhost:8080/
Se isto, de alguma forma, não funcionar, a causa principal é a de que o PATH da variável AIRFLOW_HOME
não foi configurado. Desta forma, garanta que a variável AIRFLOW_HOME
sempre aponte para o diretório inicial do projeto (ROOT).
Se o PATH da variável AIRFLOW_HOME
estiver configurado e ainda sim não funcionar, você precisa garantir que a variável OBJC_DISABLE_INITIALIZE_FORK_SAFETY
está configurada na mesma janela do terminal em que o Airflow Scheduler estiver rodando.
Comandos úteis
Utilize o comando abaixo para verificar quais processos estão ativos em uma porta específica, tal como a porta 8080, que é ocupada pelo webserver do Aifrlow ou a porta 8793 que é ocupada pelo Airflow Scheduler.
lsof -i TCP:8080
lsof -i TCP:8793
Assim como o comando acima, você pode utilizar o comando a seguir para eliminar um processo que esteja rodando em uma porta específica, como por exemplo, eliminar o processo do Airflow webserver ou o processo do Airflow scheduler.
fuser -k 8080/tcp
Estes dois comandos acima são muito úteis e servem de suporte no seu dia a dia caso você tenha processos de pipelines de dados no Airflow que não deveriam estar rodando naquele momento e você precisa que o processo pare imediatamente.