我有几个关于气流启动的问题。
启动气流,我用三种不同的方法:
方式1:我使用命令pip install apache-airflow
安装气流我用airflow initdb
初始化数据库我用airflow webserver -p 8080
命令启动web服务器我可以进入localhost:8080
进入UI
方式2:我用airflow standalone
命令
启动气流第三道:我下载了以下docker-compose。yamlcurl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.5.0/docker-compose.yaml'
我使用以下命令创建目录dags、日志、插件和env文件
mkdir -p ./dags ./logs ./plugins
echo -e "AIRFLOW_UID=$(id -u)" > .env
然后我运行命令docker-compose up airflow-init
我用docker-compose up
启动服务
所以我有几点不明白:
- 如果我在情况1和2中理解正确,我在本地安装并启动气流。
airflow webserver -p 8080
和airflow standalone
有什么区别? - 在案例2中,我们运行
docker-compose up airflow-init
命令,这将启动airflow-init服务。然后我们将运行docker-compose up
命令来启动所有其他服务。不能直接启动docker-compose up
而不启动docker-compose up airflow-init
吗?乍一看,我会说没有,因为在下面的docker-compose .yaml 中
我们在一些服务中有:
depends_on:
<<: *airflow-common-depends-on
airflow-init:
condition: service_completed_successfully
例如,在服务airflow-triggerer
中,我们有:
airflow-triggerer:
<<: *airflow-common
command: triggerer
healthcheck:
test: ["CMD-SHELL", 'airflow jobs check --job-type TriggererJob --hostname "$${HOSTNAME}"']
interval: 10s
timeout: 10s
retries: 5
restart: always
depends_on:
<<: *airflow-common-depends-on
airflow-init:
condition: service_completed_successfully
- 最后我想在气流中创建一个Spark连接。为此,我首先使用命令
pip install 'apache-airflow-providers-apache-spark'
安装apache-airflow-providers-apache-spark插件。当我运行命令airflow providers list
时,我看到插件被添加。我不明白的是,当我通过命令airflow webserver -p 8080
或airflow standalone
访问UI时,我可以在Admin>Connections>Connection类型中看到,我有Spark插件。但是当我通过命令docker-compose up
访问UI时,我看不到Spark插件。
是因为命令pip install 'apache-airflow-providers-apache-spark'
只在本地气流中安装插件吗?如果是,我如何在集装箱气流上也安装插件?
非常感谢你的帮助!
airflow webserver -p 8080
和airflow standalone
命令的区别是什么?
airflow standalone
是一个集所有功能于一体的命令,它初始化db,创建用户,运行web服务器,调度程序和触发器,它类似于下面的bash脚本(但都在同一个进程中):
airflow db init
airflow users create
--username admin
--firstname admin
--lastname admin
--role Admin
--email admin@example.com
airflow webserver --port 8080
airflow scheduler
airflow triggerer
通过分别调用它们,你可以选择你想要启动的服务,你可以在不影响其他服务的情况下重新启动一个服务,你可以在不同的主机上运行它们(如果你的数据库对所有主机都是可访问的)。
是否可以直接启动
docker-compose up
而不启动docker-compose up airflow-init
?
由于所有的服务都有airflow-init
服务作为依赖项,docker将运行airflow-init
服务并等待它成功完成后再启动其他任务,因此您可以直接运行docker-compose up
是因为命令pip install 'apache-airflow-providers-apache-spark'只在本地气流中安装了插件吗?如果是,我如何在集装箱气流上也安装插件?
是的,通过执行这个命令,你在本地安装lib,如果你想在docker compose中拥有它,你需要构建你自己的镜像并在docker compose中使用它
Dockerfile:
FROM apache/airflow:2.5.0
RUN pip install 'apache-airflow-providers-apache-spark'
创建图像:
docker run -it my_airflow_image:2.5.0 .
运行docker compose up:
AIRFLOW_IMAGE_NAME=my_airflow_image:2.5.0 docker-compose up