Airflow【部署 01】调度和监控工作流工具Airflow官网Quick Start实操(一篇学会部署Airflow)

Airflow官网Quick Start实操

  • 1.环境变量设置
  • 2.使用约束文件进行安装
  • 3.启动单机版
    • 3.1 快速启动
    • 3.2 分步骤启动
    • 3.3 启动后
    • 3.4 服务启动停止脚本
  • 4.访问
    • 4.1 登录
    • 4.2 测试

来自官网的介绍: https://airflow.apache.org/ Airflow™是一个由社区创建的平台,以编程方式编写,调度和监控工作流。这个快速入门指南将帮助您在本地机器上引导一个独立的Airflow实例。如果您按照下面的说明安装,Airflow的安装是很简单的。使用约束文件来实现可重复的安装,因此建议使用pip和约束文件。

1.环境变量设置

Airflow需要一个主目录,默认使用~/airflow,但如果您喜欢,可以设置一个不同的位置。AIRFLOW_HOME环境变量用于通知Airflow所需的位置。设置环境变量的这一步应该在安装Airflow之前完成,以便安装过程知道在哪里存储必要的文件。

export AIRFLOW_HOME=~/airflow

2.使用约束文件进行安装

官网给出的文件内容:

AIRFLOW_VERSION=2.7.2# Extract the version of Python you have installed. If you're currently using a Python version that is not supported by Airflow, you may want to set this manually.
# See above for supported versions.
PYTHON_VERSION="$(python --version | cut -d " " -f 2 | cut -d "." -f 1-2)"CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
# For example this would install 2.7.2 with python 3.8: https://raw.githubusercontent.com/apache/airflow/constraints-2.7.2/constraints-3.8.txtpip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"

本次使用虚拟环境进行安装:

# 创建并切换到airflow虚拟环境
conda create -n airflow python=3.8
conda activate airflow

创建约束文件airflowInstall.sh添加官网给出的内容:

AIRFLOW_VERSION=2.7.2
PYTHON_VERSION="$(python --version | cut -d " " -f 2 | cut -d "." -f 1-2)"
CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"

执行文件即可。也可以使用pip进行安装:

pip install "apache-airflow==2.7.2"

查询版本:

airflow version

3.启动单机版

3.1 快速启动

该命令初始化数据库、创建用户并启动所有组件。

airflow standalone# 启动成功标志
standalone | Airflow is ready
standalone | Login with username: admin  password: ZUUNtd9ppZZTQuqy
standalone | Airflow Standalone is for development purposes only. Do not use this in production!

3.2 分步骤启动

如果您想手动运行Airflow的各个部分,而不是使用一体化的独立命令,您可以运行:

  1. 该命令用于执行数据库迁移。在使用 Airflow 之前,你需要初始化数据库结构。db migrate 命令会根据你的配置文件创建数据库表格,以便存储任务调度、任务实例、DAG(Directed Acyclic Graph,有向无环图)等信息。运行后的信息:
airflow db migrate

初始化数据库后的输出信息:

DB: sqlite:root/airflow/airflow.db
Performing upgrade to the metadata database sqlite:root/airflow/airflow.db
[2023-10-19T14:21:37.687+0800] {migration.py:213} INFO - Context impl SQLiteImpl.
[2023-10-19T14:21:37.688+0800] {migration.py:216} INFO - Will assume non-transactional DDL.
[2023-10-19T14:21:37.690+0800] {db.py:1620} INFO - Creating tables
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
WARNI [unusual_prefix_911b7e3bced5159145cb88698226ecde6e08c7be_example_kubernetes_executor] The example_kubernetes_executor example DAG requires the kubernetes provider. Please install it with: pip install apache-airflow[cncf.kubernetes]
WARNI [unusual_prefix_008dd7238a3787d68b758fe337b9f566c5014ba3_tutorial_taskflow_api_virtualenv] The tutorial_taskflow_api_virtualenv example DAG requires virtualenv, please install it.
WARNI [unusual_prefix_db2b4614a7fb1ba43706f0a1f2be91e808476bfa_example_python_operator] The virtalenv_python example task requires virtualenv, please install it.
WARNI [unusual_prefix_5624127e5a8d9c88ab5a41d62ecf92869309dd74_example_local_kubernetes_executor] Could not import DAGs in example_local_kubernetes_executor.py
Traceback (most recent call last):File "/root/anaconda3/envs/airflow/lib/python3.8/site-packages/airflow/example_dags/example_local_kubernetes_executor.py", line 37, in <module>from kubernetes.client import models as k8s
ModuleNotFoundError: No module named 'kubernetes'
WARNI [unusual_prefix_5624127e5a8d9c88ab5a41d62ecf92869309dd74_example_local_kubernetes_executor] Install Kubernetes dependencies with: pip install apache-airflow[cncf.kubernetes]
WARNI [unusual_prefix_f16a910b73b9eed67cbb95faa136bc7fd6c14eb6_workday] Could not import pandas. Holidays will not be considered.
Database migrating done!
  1. 该命令用于创建 Airflow 的用户。在这个例子中,它创建了一个名为 “admin” 的用户,具有管理员角色(Admin),并提供了一些用户信息,如名字、姓氏、电子邮件等。
airflow users create \--username admin \--firstname Peter \--lastname Parker \--role Admin \--email spiderman@superhero.org# 测试
airflow users create \--username test \--firstname te \--lastname st \--role Admin \--email testman@superhero.org# 输入密码并确认后即可创建新用户
Password:
Repeat for confirmation:
[2023-10-19T15:08:26.070+0800] {manager.py:211} INFO - Added user %s
User "test" created with role "Admin"
  1. 该命令启动 Airflow 的 Web 服务器。Web 服务器提供了一个用户界面,你可以通过浏览器访问。–port 8080 选项指定了 Web 服务器监听的端口号,这里是 8080。你可以通过访问 http://localhost:8080 来打开 Airflow Web UI。
# 用于启动
airflow webserver --port 8080 -D
  1. 该命令启动 Airflow 的调度器。调度器负责按照你的 DAG(工作流)定义定期运行任务。它会检查定义的任务调度时间,然后触发相应的任务实例。调度器是 Airflow 中关键的组件之一,确保任务按照计划执行。
airflow scheduler -D

-D: 表示以守护进程(daemon)模式运行。以守护进程模式运行意味着该进程将在后台持续运行,而不占用当前终端。

3.3 启动后

在运行这些命令后,Airflow将创建$AIRFLOW_HOME文件夹,并创建默认值为Airflow .cfg的文件,这将使您快速运行。您可以使用环境变量覆盖默认值,请参见配置参考:https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html。您可以在$AIRFLOW_HOME/airflow.cfg中检查该文件,或者通过Admin->Configuration菜单中的UI检查该文件。如果由systemd启动webserver的PID将存储在$AIRFLOW_HOME/airflow-webserver.pid/run/airflow/webserver.pid文件中。

files-0.jpg

3.4 服务启动停止脚本

感谢 https://blog.csdn.net/weixin_45417821/article/details/128729413 的分享,脚本airflow-service.sh内容:

#!/bin/bashstart
case $1 in
"start"){echo " --------start airflow-------"conda activate airflow;airflow webserver -p 8080 -D;airflow scheduler -D;conda deactivate
};;
"stop"){echo " --------stop airflow-------"ps -ef | egrep 'scheduler|airflow-webserver' | grep -v grep | awk '{print $2}' | xargs kill -15
};;
esa

脚本使用:

# 启动
./airflow-service.sh start
# 停止
./airflow-service.sh stop

4.访问

4.1 登录

在浏览器中访问localhost:8080,并使用终端显示的管理员帐户详细信息登录。

login-0.jpg

4.2 测试

在主页中启用example_bash_operatorDAG。

example-0.jpg
页面的两条信息说明:

  • 开箱即用,Airflow使用SQLite数据库,由于使用此数据库后端不可能实现并行化,因此您应该很快就能适应该数据库。它与SequentialExecutor一起工作,后者只按顺序运行任务实例。虽然有很多限制,但它允许您快速启动和运行,并了解UI和命令行实用程序。
  • 当您将Airflow扩展并部署到生产环境中时,您还需要从我们在这里使用的独立命令转移到单独运行组件。您可以在生产部署中了解更多信息:https://airflow.apache.org/docs/apache-airflow/stable/administration-and-deployment/production-deployment.html。

任务的详情:

example-1.jpg
下面是几个将触发几个任务实例的命令。当您运行下面的命令时,您应该能够在example_bash_operator DAG中看到作业的状态变化。

# 1.run your first task instance
airflow tasks test example_bash_operator runme_0 2015-01-01# 执行成功标志
[2023-10-19T14:15:55.666+0800] {taskinstance.py:1400} INFO - Marking task as SUCCESS. dag_id=example_bash_operator, task_id=runme_0, execution_date=20150101T000000, start_date=20231019T061426, end_date=20231019T061555# 2.run a backfill over 2 days
airflow dags backfill example_bash_operator \--start-date 2015-01-01 \--end-date 2015-01-02# 执行成功标志
[2023-10-19T14:17:59.128+0800] {backfill_job_runner.py:412} INFO - [backfill progress] | finished run 2 of 2 | tasks waiting: 0 | succeeded: 10 | running: 0 | failed: 0 | skipped: 4 | deadlocked: 0 | not ready: 0
[2023-10-19T14:17:59.136+0800] {backfill_job_runner.py:971} INFO - Backfill done for DAG <DAG: example_bash_operator>. Exiting.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/771613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg+mediamtx 实现将本地摄像头推送成RTSP流

文章目录 概要推流过程实现过程安装FFmpeg安装Mediamtx 启动推流 概要 FFmpegmediamtx实现将本地摄像头推送成RTSP流 FFmpeg 版本号为&#xff1a;N-114298-g97d2990ea6-20240321 mediamtx 版本号为&#xff1a;v1.6.0 推流过程 摄像头数据&#xff0c;经过ffmpeg的推流代码…

ESCTF-OSINT赛题WP

这你做不出来?check ESCTF{湖北大学_嘉会园食堂} 这个识图可以发现是 淡水渔人码头 但是 osint 你要发现所有信息 聊天记录说国外 同时 提示给了美国 你综合搜索 美国 渔人码头 在美国旧金山的渔人码头&#xff08;英语&#xff1a;Fisherman’s Wharf&#xff09;是一个著名旅…

ubuntu虚拟机扩展容量后,无效,其实还需要分配

参考这位大佬&#xff1a;https://www.cnblogs.com/learningendless/p/17718003.html 如果直接使用磁盘调整大小会发现有钥匙 会被锁住&#xff0c;无法调整&#xff0c;按照大佬步骤做&#xff0c;亲测有效

pandas中cumsum() 函数的应用

cumsum() 函数用于计算 DataFrame 或 Series 中数值型数据的累积和。它将沿着指定的轴&#xff08;行或列&#xff09;对数据进行累积求和&#xff0c;并返回一个具有相同形状的 DataFrame 或 Series。 下面是一个示例&#xff0c;说明如何使用 cumsum() 函数&#xff1a; im…

Android获取经纬度的最佳实现方式

Android中获取定位信息的方式有很多种&#xff0c;系统自带的LocationManager&#xff0c;以及第三方厂商提供的一些定位sdk&#xff0c;都能帮助我们获取当前经纬度&#xff0c;但第三方厂商一般都需要申请相关的key&#xff0c;且调用量高时&#xff0c;还会产生资费问题。这…

浅谈关于Linux的学习

Linux的整个知识构架是&#xff1a; 1、基本指令 2、系统编程 3、网络编程 指令只是很基础的一部分&#xff0c;学习Linux更加重要的是其底层原理的知识&#xff0c;需要从基本的指令开始&#xff0c;逐级而上&#xff0c;次第往深处挖掘。最后构建起整个的知识体系。而不是仅…

了解什么是Docker

了解什么是Docker Docker是一个开源的容器化平台&#xff0c;它使得开发者可以将应用程序及其依赖项打包到一个轻量级的、可移植的容器中。这些容器可以在任何支持Docker的系统上运行&#xff0c;确保了应用程序在不同环境之间的一致性和可移植性。&#xff0c;同时享受隔离性…

大数据中TopK问题

1.给定100个int数字&#xff0c;在其中找出最大的10个; import java.util.PriorityQueue;public class Main {public static void main(String[] args) {final int topK 3;int[] vec {4, 1, 5, 8, 7, 2, 3, 0, 6, 9};PriorityQueue<Integer> pq new PriorityQueue<…

java网络

服务端打印请求者的ip https://blog.csdn.net/qq_42405688/article/details/122225412 /*** 从HTTP请求中获取客户IP地址** param request http请求* return 客户IP地址*/public static String getIPAddress( HttpServletRequest request ){String ip null;String header re…

docker容器虚拟化-4

文章目录 虚拟化网络单节点容器间通信不同节点容器间通信 虚拟化网络 Network Namespace 是 Linux 内核提供的功能&#xff0c;是实现网络虚拟化的重要功能&#xff0c;它能创建多个隔离的网络空间&#xff0c;它们有独自网络栈信息。不管是虚拟机还是容器&#xff0c;运行的时…

【大模型 数据增强】LLM2LLM:迭代学习 + 针对性增强 + 错误分析 + 合成数据生成 + 质量控制

LLM2LLM&#xff1a;迭代学习 针对性增强 错误分析 合成数据生成 质量控制 提出背景针对性和迭代性数据增强&#xff08;LLM2LLM&#xff09;步骤1&#xff1a;在数据集上训练步骤2&#xff1a;在数据集上评估步骤3&#xff1a;生成额外数据 算法流程医学领域数据增强&…

c++之旅第八弹——多态

大家好啊&#xff0c;这里是c之旅第八弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 一&#xff0…

Java项目:74 ssm基于Java的超市管理系统+jsp

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 功能包括:商品分类&#xff0c;供货商管理&#xff0c;库存管理&#xff0c;销售统计&#xff0c;用户及角色管理&#xff0c;等等功能。项目采用mave…

Selenium 自动化 —— 浏览器窗口操作

更多内容请关注我的专栏&#xff1a; 入门和 Hello World 实例使用WebDriverManager自动下载驱动Selenium IDE录制、回放、导出Java源码 当用 Selenium 打开浏览器后&#xff0c;我们就可以通过 Selenium 对浏览器做各种操作&#xff0c;就像我们日常用鼠标和键盘操作浏览器一…

记录下Jenkins调用docker打包前端项目后无法清理工作工具的问题

背景&#xff1a;最近经理要求前端新项目在Jenkins使用docker镜像来临时编译打包&#xff0c;本来是没有问题的&#xff1b;但Jenkins是在Ubuntu系统上二进制包安装的&#xff0c;使用的普通用户devops部署的&#xff0c;docker镜像内部是用的root用户&#xff0c;这就导致打包…

Spring Data Elasticsearch 与ES版本对应关系记录

参考&#xff1a; Versions :: Spring Data Elasticsearch

富格林:利用可信技巧租阻止暗箱陷阱

富格林指出&#xff0c;理财投资有盈有亏为常态&#xff0c;投资者要做的就是尽可能提高盈利降低亏损风险。想要降低陷阱分下提高的收益&#xff0c;投资者在投资做单期间投资者要注意辨别揪出暗箱陷阱&#xff0c;阻止落入陷阱受害亏损情况。以下总结几点可信的投资技巧&#…

探索文件管理新境界:XYplorer,您的高效办公助手

在这个数字化时代&#xff0c;文件管理已经成为我们日常工作和生活中不可或缺的一部分。但是&#xff0c;你是否经常在寻找一个文件时感到力不从心&#xff1f;是否厌倦了传统的文件管理方式&#xff1f;别担心&#xff0c;XYplorer 来了&#xff0c;它将彻底改变你的文件管理体…

python进阶:装饰器一系列高级使用方式记录:常规方式、带参数装饰器、类装饰器、类内定义装饰器并传递self参数等

文章目录 概要一、函数定义装饰器&#xff08;装饰器不带参数&#xff09;二、函数定义装饰器&#xff08;装饰器带参数&#xff09;三、装饰器装饰同一个类里的函数四、类装饰器五、装饰器 描述符 应用于class 概要 装饰器来自decorator的直译。什么叫装饰&#xff0c;就是装…

❤ leetCode简易题1-两数之和、简易2--回文数判断、简易14-最长公共前缀

❤ leetCode简易题1-两数之和、简易题14- 最长公共前缀 1、简易1-两数之和 ① 题目要求 数字A B target&#xff0c;以target为求和结果&#xff0c;找出数组中符合的A、B数字下标。 第一次做的时候完全脑子一片蒙&#xff0c;随后认真看了看题目发现是发现找符合target和…