发行说明¶
Apache Airflow 发行版本
Airflow 2.10.4 (2024-12-09)¶
重大更改¶
TaskInstance priority_weight
在 32 位有符号整数范围内被限制 (#43611)¶
一些数据库引擎被限制为 32 位整数值。由于一些用户报告了权重滚动到负值的错误,我们决定将该值限制为 32 位整数。即使在 python 内部支持小于或大于 64 位的值,priority_weight
仍被限制,并且只存储 -2147483648 到 2147483647 范围内的值。
错误修复¶
修复失败任务自动重试后动态映射任务的统计信息 (#44300)
修复筛选后日志中多行消息显示错误的问题 (#44457)
允许指标验证器中使用“/” (#42934) (#44515)
修复甘特图闪烁问题 (#44488) (#44517)
修复无法从连接表单中删除字段的问题 (#40421) (#44442)
在部分任务导入时检查 pool_slots,而不是执行时检查 (#39724) (#42693)
避免为动态映射任务按 try_number 对任务实例统计信息进行分组 (#44300) (#44319)
当任务卡在队列中时重新排队任务 (#43520) (#44158)
当我们检查敏感值时,禁止显示警告 (#44148) (#44167)
修复 get_task_instance_try_details 以返回适当的架构 (#43830) (#44133)
日志消息源详细信息已分组 (#43681) (#44070)
修复 UI 中任务尝试重复的问题 (#43891) (#43950)
在 OpenAPI 规范中添加正确的 mime 类型 (#43879) (#43901)
如果链接为空或空,则禁用额外的链接按钮 (#43844) (#43851)
禁用按 execution_date 对 XCom 列表进行排序 (#43680) (#43696)
修复 venv numpy 示例,该示例至少需要 1.26 才能在 Python 3.12 中工作 (#43659)
修复映射任务中索引 0 上的尝试选择器 (#43590) (#43591)
防止在动态映射任务中使用
trigger_rule="always"
(#43810)防止在裸任务中的任务生成映射中使用
trigger_rule=TriggerRule.ALWAYS
(#44751)
仅文档更改¶
更新围绕容器/helm 的 XCom 文档 (#44570) (#44573)
其他¶
当通过 str 访问入口或出口事件时,引发弃用警告 (#43922)
Airflow 2.10.3 (2024-11-04)¶
重大更改¶
增强 BashOperator 以执行作为临时文件的模板化 Bash 脚本 (44641)¶
启用 Jinja 模板的 Bash 脚本文件(.sh
和 .bash
)(文件扩展名后没有空格)现在被渲染为临时文件,然后执行。而不是直接作为内联命令执行。
错误修复¶
改进了在设置 Airflow 变量时处理值掩码的方式,以增强安全性。 (#43123) (#43278)
添加了 task_instance_mutation_hook 的支持,以处理索引为 0 的映射运算符。 (#42661) (#43089)
修复了执行器清理,以在终止任务实例时正确处理僵尸任务。 (#43065)
为内部 API 调用中的 HTTP 502 和 504 错误添加了重试逻辑,以处理 Web 服务器启动问题。 (#42994) (#43044)
恢复使用单独的会话来写入和删除 RTIF 数据,以防止 StaleDataError。 (#42928) (#43012)
通过将 DAG 名称中的连字符替换为下划线来修复 PythonOperator 错误。 (#42993)
改进任务重试的验证以处理 None 值 (#42532) (#42915)
修复了数据集管理器在将数据集别名解析为新数据集时出现的错误处理问题 (#42733)
启用在 DAG 图形视图中单击任务名称以正确选择相应任务的功能。 (#38782) (#42697)
防止使用标签/上次运行过滤器时在 /home 上出现重定向循环。 (#42607) (#42609) (#42628)
支持 OTEL 指标中的 host.name,并在指标中使用 OTEL_RESOURCE_ATTRIBUTES。 (#42428) (#42604)
通过降低对比度和饱和度来减少深色模式下的眼睛疲劳。 (#42567) (#42583)
正确处理触发表单中的 ENTER 键,并允许手动 JSON。 (#42525) (#42535)
确保 DAG 触发表单在键盘提交时使用更新的参数提交。 (#42487) (#42499)
如果启用了序列化,则不要尝试通过 xcom 将非
stringified
对象提供给 UI。 (#42388) (#42486)修复任务实例的 span 链接,使其指向 scheduler_job_loop 中的正确 span。 (#42430) (#42480)
修复 Windows 中来自运行程序的任务执行。 (#42426) (#42478)
允许使用环境变量覆盖硬编码的 OTEL_SERVICE_NAME。 (#42242) (#42441)
通过使用
selectinload
而不是joinedload
来提高触发性能。 (#40487) (#42351)屏蔽敏感配置时抑制警告。 (#43335) (#43337)
屏蔽与 DAG 作者无关的配置值。 (#43040) (#43336)
在 BashOperator 中将模板化的 bash 脚本作为文件执行。 (#43191)
修复 schedule_downstream_tasks 以包含 one_success 触发规则的上游任务。 (#42582) (#43299)
在调度程序中添加重试逻辑,以防死锁更新触发超时。 (#41429) (#42651)
手动使 dag_run 失败时,将所有任务标记为跳过。 (#43572)
修复日志和详细信息网格面板中映射任务的
TrySelector
。 (#43566)在处理执行程序事件时有条件地添加 OTEL 事件。 (#43558) (#43567)
修复损坏的 stat
scheduler_loop_duration
。 (#42886) (#43544)确保 /api/v1/dags 中的 total_entries。 (#43377) (#43429)
在列表任务实例(批量)端点的请求主体模式中包含 limit 和 offset。 (#43479)
当从扩展运算符调用 execute 时,不要在 ExecutorSafeguard 中引发警告。 (#42849) (#43577)
如果 TaskInstance 状态与 Executor 状态不同,则再次检查 TaskInstance 状态。 (#43063)
杂项¶
弃用会话身份验证后端。 (#42911)
为 Airflow 版本 2.8.0 及以上版本的提供程序删除了 unicodecsv 依赖项。 (#42765) (#42970)
从 Webserver 中删除对 Scarf 的引用。 (#42901) (#42942)
将 /airflow/www 中的
dompurify
从 2.2.9 更新到 2.5.6。 (#42263) (#42270)更正 _get_template_context 中的文档字符串格式。 (#42244) (#42272)
向后移植:将 Flask-AppBuilder 更新到
4.5.2
。 (#43309) (#43318)检查用于安装 pre-commit venv 的 python 版本。 (#43282) (#43310)
解决数据集别名迁移中的警告。 (#43425)
仅文档更改¶
通过 DAG 作者澄清 PLUGINS_FOLDER 权限。 (#43022) (#43029)
将模板信息添加到 TaskFlow 教程。 (#42992)
Airflow 本地设置不再可从 dags 文件夹导入。 (#42231) (#42603)
修复 cpu 和内存使用情况的文档。 (#42147) (#42256)
修复 docker compose 的说明。 (#43119) (#43321)
更新文档以反映返回的是 dag_warnings 而不是 import_errors。 (#42858) (#42888)
Airflow 2.10.2 (2024-09-18)¶
重大更改¶
没有重大更改。
错误修复¶
还原“修复:如果 dags 文件夹更改,则 DAG 不会被标记为过时”。 (#42220, #42217)
添加缺少的 Open Telemetry span 并更正计划插槽文档。 (#41985)
修复 require_confirmation_dag_change。 (#42063) (#42211)
仅在呈现 XComEntry 时将 null/undefined 视为假值。 (#42199) (#42213)
添加 extra 和
renderedTemplates
作为键来跳过camelCasing
。 (#42206) (#42208)不要
camelcase
xcom 条目。 (#42182) (#42187)修复列表视图中的 task_instance 和 dag_run 链接。 (#42138) (#42143)
支持在触发 UI 表单中为字符串类型的参数进行多行输入。 (#40414) (#42139)
修复详细信息选项卡日志 URL 检测。 (#42104) (#42114)
添加新的异常类型来捕获超时。 (#42064) (#42078)
重写 DAG 到数据集/数据集别名的存储方式。 (#41987) (#42055)
允许数据集别名添加多个数据集事件。 (#42189) (#42247)
杂项¶
将 universal-pathlib 限制在
0.2.4
以下,因为它会破坏我们的集成。 (#42101)使用
LibCST
自动修复默认的可延迟任务。 (#42089)弃用
tasks list
cli 命令的--tree
标志。 (#41965)
仅文档更改¶
更新
security_model.rst
以清除未经身份验证的端点异常。 (#42085)在 XComs 页面上添加有关 dataclasses 和 attrs 的注释。 (#42056)
改进 DAG 中 markdown 文档的文档。 (#42013)
添加有关侦听器可能很危险的警告。 (#41968)
Airflow 2.10.1 (2024-09-05)¶
重大更改¶
没有重大更改。
错误修复¶
在检查缺少的文件时处理示例 DAG 的情况。 (#41874)
修复“没有角色”错误页面中的注销链接。 (#41845)
为以 end_from_trigger 为 True 完成的触发器设置 end_date 和 duration。 (#41834)
如果 dags 文件夹发生更改,则 DAG 不会被标记为过时。 (#41829)
修复与 FAB 提供程序版本 <1.3.0 的兼容性。 (#41809)
不要在心跳时使 LocalTaskJob 失败。 (#41810)
删除插件管理器中 cgitb 的弃用警告。 (#41793)
修复没有
__name__
的通知程序(实例)的日志。 (#41699)将 syspath 准备工作分成几个阶段。 (#41694)
为额外的链接添加 URL 净化功能。 (#41680)
修复 InletEventsAccessors 类型存根。 (#41607)
修复 XCom 为 INT、FLOAT、BOOL 或 NULL 时的 UI 呈现。 (#41605)
修复尝试选择器刷新。 (#41503)
不正确的尝试次数减法导致 OTEL Airflow 的 span id 无效。 (#41535)
为触发页面呈现添加 WebEncoder,以避免呈现失败。 (#41485)
将
tojson
过滤器添加到 example_inlet_event_extra 示例 dag。 (#41890)为不继承 BaseExecutor 的执行程序添加向后兼容性检查。 (#41927)
杂项¶
将 /airflow/www 中的 webpack 从 5.76.0 更新到 5.94.0。 (#41879)
向日志中的超链接添加 rel 属性。 (#41783)
编辑连接时发出字段删除警告。 (#41504)
使 Scarf 使用情况报告以主要 + 次要版本和桶中的计数器进行。 (#41900)
将 universal-pathlib 最低版本降低到 0.2.2。 (#41943)
防止 universal pathlib xcom 后端的 None 组件。 (#41938)
仅文档更改¶
删除 Debian bullseye 支持。 (#41569)
添加使用
keycloak
进行身份验证的示例。 (#41791)
Airflow 2.10.0 (2024-08-15)¶
重大更改¶
数据集不再触发非活动的 DAG。 (#38891)¶
以前,当 DAG 暂停或删除时,传入的数据集事件仍然会触发它,并且当 DAG 恢复暂停或重新添加到 DAG 文件时,该 DAG 将会运行。 此行为已更改;现在,DAG 的数据集计划只能由 DAG 处于活动状态时发生的事件满足。 虽然这是一项重大更改,但之前的行为被认为是错误。
基于时间的调度的行为保持不变,包括 DatasetOrTimeSchedule
的时间表部分。
try_number
不再在任务执行期间递增。 (#39336)¶
以前,尝试次数 (try_number
) 在 worker 上任务执行开始时递增。 这在许多方面都存在问题。 例如,这意味着当不应该递增时(即从重新调度或延迟恢复时),尝试次数会递增。 并且当任务尚未开始时,还会导致尝试次数“错误”。 这两个问题的解决方法引起了很多混乱。
现在,相反,任务运行的尝试次数是在调度任务时确定的,并且在运行中不会更改,并且永远不会减少。 因此,在任务运行后,观察到的尝试次数与任务运行时相同;只有在有“新尝试”时,尝试次数才会再次递增。
此更改的一个后果是,如果用户“手动”运行任务(例如,通过直接调用 ti.run()
或命令行 airflow tasks run
),尝试次数将不再递增。 Airflow 假定任务总是在调度程序调度后运行,因此我们不认为这是一项重大更改。
FAB 身份验证管理器中的 /logout
端点现在受到 CSRF 保护。 (#40145)¶
所有现有 AuthView(AuthDBView
、AuthLDAPView
、AuthOAuthView
、AuthOIDView
、AuthRemoteUserView
)中,FAB 身份验证管理器中 /logout
端点的方法已从 GET
更改为 POST
,现在包含 CSRF 保护,以增强安全性并防止未经授权的注销。
Apache Airflow 的 OpenTelemetry 跟踪。 (#37948).¶
此新功能为 Apache Airflow 增加了以下功能: 1) 调度程序、触发器、执行程序、处理器的 Airflow 系统跟踪,2) 以 OpenTelemetry 格式部署的 DAG 运行的 DAG 运行跟踪。 以前,仅支持指标,这些指标以 OpenTelemetry 格式发出指标。 此新功能将为用户添加更丰富的数据,以便用户使用 OpenTelemetry 标准将其跟踪数据发送到 OTLP 兼容的端点。
用于 Task Flow 的装饰器 (@skip_if, @run_if)
,可以简单地应用是否跳过任务。 (#41116)¶
此功能添加了一个装饰器,可以简单地跳过任务。
同时使用多个执行程序。 (#40701)¶
此前称为混合执行器,这项新功能允许 Airflow 同时使用多个执行器。可以配置 DAG(有向无环图),甚至单个任务,以使用最适合其需求的特定执行器。单个 DAG 可以包含所有使用不同执行器的任务。请参阅 Airflow 文档了解更多详细信息。注意:此功能仍处于实验阶段。有关更详细的描述,请参阅关于执行器的文档。
基于 Scarf 的遥测:Airflow 是否收集任何遥测数据? (#39510)¶
Airflow 集成了 Scarf 以在操作期间收集基本使用数据。部署可以通过将 [usage_data_collection]enabled
选项设置为 False,或使用 SCARF_ANALYTICS=false 环境变量来选择不进行数据收集。有关更多信息,请参阅此方面的常见问题解答。
新功能¶
AIP-61 混合执行 (AIP-61)
AIP-62 从 Hook Instrumentation 获取血统信息 (AIP-62)
AIP-64 TaskInstance 尝试历史记录 (AIP-64)
AIP-44 内部 API (AIP-44)
允许直接从触发器结束任务,而无需进入 worker。 (#40084)
扩展数据集依赖项 (#40868)
为内部 API 添加令牌身份验证功能 (#40899)
添加 DatasetAlias 以支持动态数据集事件发射和数据集创建 (#40478)
为 inlet_events 添加示例 DAG (#39893)
实现
accessors
以读取定义为 inlet 的数据集事件 (#39367)任务流的装饰器,使其可以简单地应用是否跳过任务。 (#41116)
添加从触发器支持动态任务映射开始执行的功能 (#39912)
将 try_number 添加到日志表 (#40739)
在宏中添加了 ds_format_locale 方法,允许使用 Babel 对日期时间格式进行本地化 (#40746)
添加 DatasetAlias 以支持动态数据集事件发射和数据集创建 (#40478, #40723, #40809, #41264, #40830, #40693, #41302)
使用 sentinel 将 dag 标记为在重新序列化时已删除 (#39825)
为 DAG 文件处理统计信息中数据库查询的最后数量添加参数 (#40323)
为 Airflow UI 添加原型版本深色模式 (#39355)
能够在
dag test
中将某些任务标记为成功 (#40010)允许将可调用对象用于 template_fields (#37028)
在主页上筛选正在运行/失败和活动/暂停的 DAG (#39701)
添加有关任务 CPU 和内存使用情况的指标 (#39650)
DAG 重新解析功能的 UI 更改 (#39636)
添加基于 Scarf 的遥测 (#39510, #41318)
添加 dag 重新解析请求端点 (#39138)
从网格视图触发后重定向到新的 DAG 运行 (#39569)
在任务实例工具提示中显示
endDate
。 (#39547)实现
accessors
以读取定义为 inlet 的数据集事件 (#39367, #39893)根据关键字在 UI 中为错误和警告的日志行添加颜色 (#39006)
将渲染的 k8s pod 规范选项卡添加到 ti 详细信息视图 (#39141)
使审核日志可以按之前/之后筛选 (#39120)
将网格折叠操作整合到单个全屏切换中 (#39070)
实现元数据以发出运行时额外信息 (#38650)
将执行器字段添加到数据库和运算符的参数 (#38474)
实现 DatasetEvent extra 的上下文访问器 (#38481)
将数据集事件信息添加到 dag 图中 (#41012)
添加一个按钮以在 dag 图中打开/关闭数据集 (#41200)
添加
run_if
和skip_if
装饰器 (#41116)添加 dag_stats REST API 端点 (#41017)
为 Dag 导入错误添加侦听器 (#39739)
允许 DateTimeSensorAsync、FileSensor 和 TimeSensorAsync 在动态任务映射期间从触发器开始执行 (#41182)
改进¶
允许将 DAG 运行资源设置为 DAG 级别的权限:扩展 DAG 的 access_control 功能以允许 DAG 运行资源的权限。 (#40703)
改进内部 API 的安全性和错误处理 (#40999)
数据集 UI 改进 (#40871)
将 DAG 审核日志选项卡更改为事件日志 (#40967)
使独立 DAG 文件处理器在数据库隔离模式下工作 (#40916)
在使用者 DAG 页面上仅显示源,在生产者 DAG 页面上仅显示触发的 DAG 运行 (#41300)
更新指标名称,以允许多个执行器报告指标 (#40778)
格式化 DAG 运行计数 (#39684)
更新
renderedjson
组件的样式 (#40964)改进 ATTRIBUTE_REMOVED sentinel 以使用类和更多上下文 (#40920)
将 XCom 显示为 react json (#40640)
使用日志表替换任务上下文日志记录器的用法 (#40867)
回滚所有重试异常 (#40882) (#40883)
支持渲染 ObjectStoragePath 值 (#40638)
为日志事件端点添加 try_number 和 map_index 作为参数 (#40845)
分批轮换 fernet 密钥以限制内存使用 (#40786)
为 'last_num_of_db_queries' 参数添加计量指标 (#40833)
将并行日志消息设置为警告级别,以提高可见性 (#39298)
为编码 DAG 运行添加错误处理 (#40222)
在示例 DAG 中使用 params 而不是 dag_run.conf (#40759)
加载带有示例 DAG 的示例插件 (#39999)
当 target_dttm 在过去时,停止推迟 TimeDeltaSensorAsync 任务 (#40719)
将重要的执行器日志发送到任务日志 (#40468)
在新标签页中打开外部链接 (#40635)
尝试将 ReactJSON 视图添加到渲染的模板 (#40639)
加快自定义警告的正则表达式匹配时间 (#40513)
将 DAG.dataset_triggers 重构到时间表类中 (#39321)
将 next_kwargs 添加到 StartTriggerArgs (#40376)
改进 UI 错误处理 (#40350)
当配置值已弃用时,删除 CLI 中的双重警告 (#40319)
实现 XComArg concat() (#40172)
添加了具有嵌套参数的
get_extra_dejson
方法,该方法允许您指定是否也希望反序列化嵌套 json 字符串 (#39811)将执行器字段添加到任务实例 API (#40034)
支持在 Windows 上检查数据库路径的绝对性 (#40069)
引入 StartTriggerArgs 并防止调度程序中启动触发器初始化 (#39585)
将任务文档添加到网格视图中的详细信息选项卡 (#39899)
允许仅使用执行器的类名称指定执行器 (#40131)
删除与 try_number 相关的过时条件逻辑 (#40104)
允许将任务组 ID 作为分支传递到 BranchMixIn (#38883)
Javascript 连接表单将动态地将 CodeMirror 应用于所有 textarea (#39812)
在序列化时确定 needs_expansion (#39604)
在引用表中的 dag_id 列上添加索引,以加快删除 dag 记录的速度 (#39638)
将任务失败依赖项添加到详细信息页面 (#38449)
删除 Web 服务器 try_number 调整 (#39623)
在惰性序列中实现切片 (#39483)
统一惰性数据库序列实现 (#39426)
将
__getattr__
添加到任务装饰器存根 (#39425)允许将标签传递给通过插件注册的 FAB 视图 (#39444)
尝试使用 sqlite 进行脱机迁移时,显示更简单的错误消息 (#39441)
为 TriggerDagRunOperator 添加 soft_fail (#39173)
在上下文中使用 “outlet” 重命名 “dataset event” (#39397)
解决
airflow task
命令中的RemovedIn20Warning
(#39244)在数据库隔离时,在客户端确定 fail_stop (#39258)
在 Python 运算符/装饰器中重构 cloudpickle 支持 (#39270)
更新触发器 kwargs 迁移以指定 existing_nullable (#39361)
允许任务直接从触发器开始执行,而无需进入 worker (#38674)
更好的
db migrate
错误消息 (#39268)将 stacklevel 添加到
suppress_and_warn
警告中 (#39263)支持按 dag_display_name 搜索 (#39008)
允许在 MappedInstances.tsx 中的所有字段上进行排序 (#38090)
在指标中公开计划任务的计数 (#38899)
使用
sqlalchemy.orm
中的declarative_base
而不是sqlalchemy.ext.declarative
(#39134)添加示例 DAG 以演示发射方法 (#38821)
让
on_task_instance_failed
访问导致失败的错误 (#38155)简化数据集序列化 (#38694)
将心跳恢复消息添加到作业 (#34457)
删除 TaskInstance.get_task_instance 中的 select_column 选项 (#38571)
如果不是从数据库读取 DAG,则不要在 get_dag 中创建会话 (#38553)
为加密的触发器 kwargs 添加迁移脚本 (#38358)
在 TaskInstancePydantic 上实现 render_templates (#38559)
处理 _refresh_from_db 中的可选会话 (#38572)
使 task_command.py 中的类型注释不那么混乱 (#38561)
直接使用 fetch_dagrun 以避免创建会话 (#38557)
为
BashProcessor
添加了output_processor
参数 (#40843)改进数据库隔离模式的序列化 (#41239)
仅孤立非孤立的数据集 (#40806)
根据任务历史记录日期调整甘特图宽度 (#41192)
启用具有大量元素的图例的滚动。 (#41187)
错误修复¶
使用 LocalExecutor 运行时 get_parsing_context() 的错误修复 (#40738)
在视图中显示之前验证提供程序的文档 URL (#40933)
移动导入以使 PythonOperator 在 Windows 上工作 (#40424)
修复 dataset_with_extra_from_classic_operator 示例 DAG (#40747)
在 ti 状态更改后调用侦听器 on_task_instance_failed() (#41053)
在 BaseSensor 中添加
never_fail
(#40915)修复当 DAG 没有
start_date
时任务 API 端点的问题 (#40878)修复并调整 UI 网格和旧运行的 URL 生成 (#40764)
轮换 Fernet 密钥优化 (#40758)
修复 validate_database_executor_compatibility() 调用中的类实例与类类型问题 (#40626)
清理暗黑模式 (#40466)
验证 DAG、BaseOperator 和 TaskGroup 的参数的预期类型 (#40269)
在 BaseSensorOperator 重调度模式下指数退避不起作用 (#39823)
本地任务作业:添加超时,避免过早终止 on_task_instance_success 监听器 (#39890)
将执行后日志分组移动到异常打印之后 (#40146)
修复 HA 设置中的触发器竞争条件 (#38666)
将触发的或已存在的 DAG 运行逻辑日期传递给 DagStateTrigger (#39960)
将
external_task_group_id
传递给WorkflowTrigger
(#39617)ECS 执行器:将任务设置为活动后的 RUNNING 状态 (#39212)
仅在回填循环中必要时才发送心跳 (#39399)
修复触发器 kwarg 加密迁移 (#39246)
修复降级时触发器 kwargs 的解密问题。 (#38743)
修复 TriggeredDagRuns 中的错误链接 (#41166)
将 MapIndex 传递给外部日志系统的 LogLink 组件 (#41125)
为 worker 任务添加 NonCachingRotatingFileHandler (#41064)
在方法 resolve an optional value 中添加参数 include_xcom (#41062)
清理 example_bash_decorator DAG 中的文件名 (#40949)
在依赖关系图中显示数据集别名 (#41128)
在 DAG 图视图中渲染数据集条件 (#41137)
添加跨 DAG 运行的任务持续时间图 (#40755)
为现有核心传感器添加从触发器启动执行的支持 (#41021)
为 dataset_alias 添加示例 DAG (#41037)
添加数据集别名唯一约束并删除错误的数据集别名删除逻辑 (#41097)
如果存在“数据集别名”,则将“has_outlet_datasets”设置为 true (#41091)
使 HookLineageCollector 按分组数据集 (#41034)
增强 start_trigger_args 序列化 (#40993)
重构
BaseSensorOperator
,引入skip_policy
参数 (#40924)修复当任务被延迟时从触发器查看日志的问题 (#41272)
重构触发的 DAG 运行 URL 的替换方式 (#41259)
为额外的 sql alchemy 会话参数添加支持 (#41048)
允许 TriggerDagRun failed_state 中为空列表 (#41249)
清理当 run_as_user 是 Airflow 用户时的异常处理程序 (#41241)
单击和折叠时收起文档 (#41214)
当保存到数据库时更新 updated_at,因为 session.merge 不会触发 on-update (#40782)
修复解析 DAF 文件时的查询计数统计信息 (#41149)
没有
__init__
的运算符中的方法解析顺序 (#41086)确保为空运算符增加 try_number (#40426)
其他¶
从
OTel
跟踪中删除实验性标志 (#40874)将 packaging 版本升级到 23.0,以修复旧版本 otel 的问题 (#40865)
简化 _auth_manager_is_authorized_map 函数 (#40803)
在调度程序作业中使用正确的未知执行器异常 (#40700)
将 D1
pydocstyle
规则添加到 pyproject.toml (#40569)在 ruff 中启用强制执行
pydocstyle
规则 D213。 (#40448, #40464)更新
Dag.test()
以在需要时使用执行器运行 (#40205)更新 jest 和 babel 次要版本 (#40203)
重构 BashOperator 和 Bash 装饰器,以实现一致性和简洁性 (#39871)
添加
AirflowInternalRuntimeError
用于引发non catchable
错误 (#38778)ruff 版本升级 0.4.5 (#39849)
将
pytest
升级到 8.0+ (#39450)删除有关 TI 索引的过时注释 (#39470)
在
DagScheduleDatasetReference.dag
和DagModel.schedule_dataset_references
之间配置back_populates
(#39392)删除 endpoints.py 中的弃用警告 (#39389)
修复 Airflow 核心中的 SQLA 弃用 (#39211)
在 SA 中直接使用类绑定属性 (#39198, #39195)
修复 TaskContextLogger 的 stacklevel (#39142)
在收集 DAG 期间捕获警告 (#39109)
在核心中解决
B028
(no-explicit-stacklevel) (#39123)将模型
ImportError
重命名为ParseImportError
,以避免与内置异常冲突 (#39116)添加选项以支持 PythonVenv/External Operator 中的 cloudpickle (#38531)
抑制
SubDagOperator
示例警告 (#39057)为运行回调添加日志 (#38892)
使用
model_dump
而不是dict
来序列化 Pydantic V2 模型 (#38933)加宽备忘单列,以避免命令换行 (#38888)
将 hatchling 更新到最新版本 (1.22.5) (#38780)
将 uv 升级到 0.1.29 (#38758)
添加在提供程序测试修复期间发现的缺失序列化 (#41252)
将 /airflow/www 中的
ws
从 7.5.5 升级到 7.5.10 (#40288)改进 TriggerDagRunOperator 中 allowed/failed_states 的类型 (#39855)
仅限文档更改¶
在“如何创建自己的提供程序”页面中添加
filesystems
和dataset-uris
(#40801)在 Airflow 存储库中将 (TM) 更正为 (R) (#40783)
在示例 airflow.cfg 中将
otel_on
设置为 True (#40712)为 _AIRFLOW_PATCH_GEVENT 添加警告 (#40677)
在 Airflow 3 讨论后更新多团队图表提案 (#40671)
添加更强烈的警告,说明 MSSQL 不受支持且不再起作用 (#40565)
修复 howto 中具有误导性的 mac 菜单结构 (#40440)
更新文档中支持的 k8s 版本 (#39878)
为侦听器添加兼容性说明 (#39544)
使用新的图形视图更新文档示例中的边缘标签图像 (#38802)
更新 UI 文档截图 (#38680)
添加“通过 REST API 操作排队的数据集事件”部分 (#41022)
添加有关 docker compose 缺乏安全保证的信息 (#41072)
在 use params 部分中添加示例 DAG 的链接 (#41031)
在
taskflow.rst
中将task_id
从send_email
更改为send_email_notification
(#41060)从反向代理文档中删除不必要的 nginx 重定向规则 (#38953)
Airflow 2.9.3 (2024-07-15)¶
重大更改¶
scheduled_duration
和 queued_duration
的时间单位已更改 (#37936)¶
scheduled_duration
和 queued_duration
指标现在以毫秒为单位发出,而不是秒。
按照惯例,所有 statsd 指标都应以毫秒为单位发出,这在例如 prometheus
statsd-exporter 中稍后会用到。
对 OpenTelemetry 指标的支持不再是“实验性” (#40286)¶
自 2.7.0 版本以来添加了对 OpenTelemetry 的实验性支持,此后添加了修复和改进,现在我们宣布该功能稳定。
错误修复¶
修复日历视图滚动 (#40458)
验证提供程序列表视图中 URL 的提供程序描述 (#40475)
修复与旧 MySQL 8.0 的兼容性 (#40314)
修复在 DAG 文件缺失的环境中 DAG 暂停/取消暂停不起作用的问题 (#40345)
传递给 SQLalchemy 的额外信息 (#40391)
当标签的值为整数 (job_id) 时,处理不支持的操作数 int + str (#40407)
修复 TriggeredDagRunOperator 触发的链接 (#40336)
将
[webserver]update_fab_perms
添加到已弃用的配置中 (#40317)将 DAG 运行链接从旧版图表切换到带有图表选项卡的网格 (#40241)
将
file_task_handler
中的httpx
更改为requests
(#39799)修复 venv jinja 模板中导入未来注释的问题 (#40208)
确保 DAG 参数顺序与后端无关 (#40156)
在 TI 批量 API 端点中使用连接来获取 TI 注释 (#40028)
改进字符串数组格式验证的触发 UI (#39993)
禁用 doc_md 的 jinja2 渲染 (#40522)
如果 taskinstance 状态为跳过,则跳过检查子 DAG 列表 (#40578)
在解析日志中的 URL 时识别引号 (#40508)
仅限文档更改¶
添加有关通过环境变量传递密钥的说明 (#40519)
修改一些令人困惑的日志消息 (#40334)
添加关于屏蔽敏感字段名称的更精确描述 (#40512)
为文档添加关于升级的更详细指导 (#40227)
指标 allow_list 的完整示例 (#40120)
向已弃用的 API 文档添加警告,指出访问控制未应用 (#40129)
更简单的命令来检查本地调度程序是否处于活动状态 (#40074)
添加注释和示例,明确 DAG 级别参数的用法 (#40541)
修复 dags.rst 中示例代码的高亮显示 (#40114)
添加关于 PostgresOperator 已被弃用的警告 (#40662)
更新 Airflow 下载链接为基于 CDN 的链接 (#40618)
修复 DatasetOrTimetable 示例的导入语句 (#40601)
进一步明确分流流程 (#40536)
修复 PythonOperator 文档字符串中的参数顺序 (#40122)
更新 serializers.rst 以提及不支持字节 (#40597)
其他¶
升级构建安装程序和依赖项 (#40177)
将 /airflow/www 中的 braces 从 3.0.2 升级到 3.0.3 (#40180)
升级到另一个版本的 trove-classifier(新的 CUDA 分类器)(#40564)
重命名与 airflow 概念无关的 “try_number” 增量 (#39317)
将 trove 分类器更新为最新版本作为构建依赖项 (#40542)
升级到最新版本的 hatchling 作为构建依赖项 (#40387)
修复
SchedulerJobRunner._process_executor_events
中的错误 (#40563)删除 “blocked” 事件的日志记录 (#40446)
Airflow 2.9.2 (2024-06-10)¶
重大更改¶
没有重大更改。
错误修复¶
修复使
AirflowSecurityManagerV2
将事务留在idle in transaction
状态的错误 (#39935)修复 alembic 自动生成并重命名不匹配的约束 (#39032)
将 existing_nullable 添加到迁移的降级端 (#39374)
修复如果用户缺少权限,则标记实例状态按钮保持禁用的问题 (#37451)。(#38732)
在迷你调度程序中使用 SKIP LOCKED 而不是 NOWAIT (#39745)
从 FAB 视图中删除 DAG 运行添加选项 (#39881)
在 API 规范中添加 max_consecutive_failed_dag_runs (#39830)
修复 example_branch_operator 在 python 3.12 中失败的问题 (#39783)
当任务尝试重试且没有远程日志可用时,也获取已提供的日志 (#39496)
将数据集 URI 验证更改为在 Airflow 2.9 中引发警告而不是错误 (#39670)
可见的 DAG 运行不指向相同的 dag 运行 ID (#38365)
重构
SafeDogStatsdLogger
以使用get_validator
来启用模式匹配 (#39370)修复安全管理器
has_access
中的自定义操作 (#39421)修复如果使用错误的参数触发 DAG,则会出现 HTTP 500 内部服务器错误的问题 (#39409)
修复 Airflow Webserver 中禁用静态文件缓存的问题。(#39345)
修复 TaskHandlerWithCustomFormatter 现在只添加一次前缀的问题 (#38502)
不要在
@apply_lineage
中提供已弃用的execution_date
(#39327)将缺少的 conn_id 添加到 ObjectStoragePath 的字符串表示 (#39313)
修复
sql_alchemy_engine_args
配置示例 (#38971)将 Cache-Control “no-store” 添加到所有动态生成的内容 (#39550)
其他¶
限制
yandex
提供程序以避免mypy
错误 (#39990)在迷你调度程序故障时发出警告而不是调试 (#39760)
更改
provider_info_cache
装饰器的类型定义 (#39750)为 BaseOperator
defer
提供更好的类型 (#39742)在 TimeSensor 和 TimeSensorAsync 中提供更多类型 (#39696)
从严格的数据集 URI 检查中重新引发异常 (#39719)
修复 _log_state 助手的 stacklevel (#39596)
解决迁移脚本中的 SA 警告 (#39418)
删除
dag_run
表中未使用的索引idx_last_scheduling_decision
(#39275)
仅文档更改¶
提供关于标记 DynamicTaskMapping 的额外提示 (#39977)
提高配置参考中链接/变量/其他配置的可见性 (#39916)
删除
CronDataIntervalTimetable
的“遗留”定义 (#39780)更新 plugins.rst 示例以使用 pyproject.toml 而不是 setup.py (#39665)
修复 pg 设置文档中的 nit (#39628)
将 Matomo 添加到跟踪用户活动文档 (#39611)
修复 Connection.get -> Connection.get_connection_from_secrets (#39560)
添加提供程序依赖项的注释 (#39512)
更新 docker-compose 命令 (#39504)
更新关于重启触发器进程的注释 (#39436)
使用无效的存储桶链接更新 S3LogLink (#39424)
更新 testing_packages.rst (#38996)
添加多团队图表 (#38861)
Airflow 2.9.1 (2024-05-03)¶
重大更改¶
Stackdriver 日志记录错误修复需要 Google 提供程序 10.17.0
或更高版本 (#38071)¶
如果您使用 Stackdriver 日志记录,则必须使用 Google 提供程序版本 10.17.0
或更高版本。Airflow 2.9.1
现在将 gcp_log_name
传递给 StackdriverTaskHandler
而不是 name
,这将在早期提供程序版本上失败。
这修复了一个错误,该错误导致当 Airflow 配置日志记录时,在 [logging] remove_base_log_folder
中配置的日志名称被覆盖,从而导致任务日志转到错误的目标位置。
错误修复¶
使任务日志消息包含 run_id (#39280)
复制导航栏的 menu_item
href
(#39282)修复触发关键字参数加密迁移 (#39246, #39361, #39374)
为
firefox
中的 datetime-local 输入添加解决方法 (#39261)将网格按钮添加到任务实例视图 (#39223)
当远程或执行程序日志对非运行任务尝试不可用时,获取已提供的日志 (#39177)
修复了菜单过滤导致菜单消失的副作用 (#39229)
对任务实例的
log_url
使用网格视图 (#39183)改进任务过滤
UX
(#39119)改进反应 DAG 页面中的 rendered_template
ux
(#39122)图表视图改进 (#38940)
在尝试渲染图表之前,检查数据集 <> 任务是否存在 (#39069)
主机名是“redacted”,而不是“redact”;当没有上下文时删除它 (#39037)
在
check_authentication
中检查是否设置了AUTH_ROLE_PUBLIC
(#39012)移动
map_index_template
的渲染,使其在失败任务中也能渲染,只要它在失败点之前定义即可 (#38902)取消弃用
BaseXCom.get_one
方法 (#38991)为
CreateTableAs
自定义 SA 子句添加inherit_cache
属性 (#38985)不要在迷你调度程序中等待 DagRun 锁 (#38914)
修复没有 DAG 运行的日历视图 (#38964)
更改了图中外部任务的背景颜色 (#38969)
修复 dag 运行选择 (#38941)
修复
SAWarning
‘强制 Subquery 对象进入 select() 以在 IN() 中使用’ (#38926)修复 AirflowSecurityManagerV2 中的隐式
cartesian
产品 (#38913)修复旧日志视图中的链接无法点击的问题 (#38882)
修复 dag 运行链接参数 (#38873)
在 WorkflowTrigger 中使用异步数据库调用 (#38689)
修复审计日志事件过滤器 (#38719)
在类方法中使用
methodtools.lru_cache
而不是functools.lru_cache
(#37757)仅当提供
-I
/--ignore-first-depends-on-past
时,才在airflow dags backfill
中引发弃用警告 (#38676)
其他¶
TriggerDagRunOperator
弃用execution_date
,转而使用logical_date
(#39285)强制在
@deprecated
装饰器上使用 Airflow 弃用警告类别 (#39205)添加关于在 Windows 下运行/导入 Airflow 的警告 (#39196)
更新身份验证管理器中的
is_authorized_custom_view
以处理自定义操作 (#39167)在 Trove 分类器中添加 Python 3.12 支持 (#39004)
对
minischeduler
跳过使用调试级别 (#38976)将
undici
从5.28.3 升级到 5.28.4
在/airflow/www
中 (#38751)从 Airflow Webserver 中删除 Scarf 分析 (#43346) (#43348)
仅文档更改¶
修复文档中支持的 k8s 版本 (#39172)
动态任务映射
PythonOperator
op_kwargs (#39242)添加指向
user
和role
命令的链接 (#39224)在文档中支持的版本中添加
k8s 1.29
(#39168)数据感知调度文档编辑 (#38687)
更新
DagBag
类文档字符串以包含所有参数 (#38814)更正 taskflow 示例 (#39015)
从渲染字段示例中删除装饰器 (#38827)
Airflow 2.9.0 (2024-04-08)¶
重大更改¶
以下监听器 API 方法被认为是稳定的,可以用于生产系统(在旧版本的 Airflow 中是实验性功能)(#36376):¶
生命周期事件
on_starting
before_stopping
DagRun 状态更改事件
on_dag_run_running
on_dag_run_success
on_dag_run_failed
TaskInstance 状态更改事件
on_task_instance_running
on_task_instance_success
on_task_instance_failed
已删除对 Airflow 元数据库的 Microsoft SQL-Server 的支持 (#36514)¶
经过讨论和投票过程,Airflow 的 PMC 成员和提交者已达成决议,不再将 MsSQL 作为受支持的数据库后端进行维护。
从 Airflow 2.9.0 开始,已删除对 Airflow 数据库后端的 MsSQL 支持。
在升级到 Airflow 2.9.0 之前,有一个迁移脚本可以帮助您迁移数据库,该脚本可在 Github 上的 airflow-mssql-migration 仓库中找到。请注意,该迁移脚本不提供支持和保证。
这不会影响现有的提供程序包(运算符和钩子),DAG 仍然可以访问和处理来自 MsSQL 的数据。
数据集 URI 现在在输入时进行验证 (#37005)¶
数据集必须使用符合 AIP-60 中规定的规则的 URI,并且该值将在解析 DAG 文件时自动规范化。有关规则的更详细描述,请参阅 关于数据集的文档。
如果您的数据集标识符看起来像 URI,但在非主流的方式中使用(例如,依赖于 URI 的 auth 部分或具有区分大小写的协议名称),您可能需要更改它们。
将 REST API 操作添加到审计日志事件 (#37734)¶
REST API 事件的审计日志 event
名称将根据其来自 Airflow UI 还是外部,以 api.
或 ui.
作为前缀。
正式支持 Python 3.12 (#38025)¶
但有一些注意事项
Pendulum2 不支持 Python 3.12。对于 Python 3.12,您需要使用 Pendulum 3
当为 Python 3.12 安装 Pandas 时,支持的最低 SQLAlchemy 版本为 2022 年 4 月发布的
1.4.36
。Airflow 2.9.0 将所有 Python 版本支持的最低 SQLAlchemy 版本提高到1.4.36
。
并非所有提供程序都支持 Python 3.12。在 Airflow 2.9.0 的初始版本中,以下提供程序在发布时不支持 Python 3.12
apache.beam
- 取决于 Apache Beam 对 3.12 的支持
papermill
- 取决于发布与 Python 3.12 兼容的 papermill 客户端版本 包括这个已合并的问题
防止将大型字符串对象存储在渲染的模板字段中 (#38094)¶
现在,可以存储在渲染的模板字段中的数据长度有一个限制。该限制设置为 4096 个字符。如果数据超过此限制,它将被截断。您可以通过在 Airflow 配置中设置 [core]max_template_field_length
配置选项来更改此限制。
将 MySQL 后端的 xcom 表列值类型更改为 longblob (#38401)¶
Xcom 表列 value
的类型已从 blob
更改为 longblob
。这将允许您在 Xcom 中存储相对较大的数据,但是如果 Xcom 中存储了大量数据,则处理可能需要大量时间。
要从修订版本降级:b4078ac230a1
,请确保您的 Xcom 值不大于 65,535 字节。否则,您需要清理这些行或运行 airflow db clean xcom
来清理 Xcom 表。
对任务流上下文变量中的键参数默认值进行更强的验证 (#38015)¶
对于结合上下文变量默认值的任务流实现,可能会生成无效的参数顺序,现在不再接受(并验证)使用除 None
以外的默认值定义任务流函数。如果您以前这样做过,您很可能会看到一个损坏的 DAG 和一个错误消息,例如 错误 消息: 上下文 键 参数 my_param 不能 有 除 None 以外的默认值
。
新功能¶
允许用户使用他们的民族字符编写 dag_id 和 task_id,为 dag/task 添加显示名称 (v2) (#38446)
防止将大型对象存储在 RTIF 中 (#38094)
当结束日期不存在时,使用当前时间计算持续时间。 (#38375)
在任务和 dagrun 持续时间图表中添加平均持续时间标记线。 (#38214, #38434)
添加手动创建数据集事件的按钮 (#38305)
将
Matomo
作为 analytics_tool 的选项添加。 (#38221)实验性:支持自定义 weight_rule 实现来计算 TI priority_weight (#38222)
添加在 DAG 连续失败 X 次后自动将其关闭的功能 (#36935)
将数据集条件添加到下一个运行数据集模态框 (#38123)
将任务日志分组添加到 UI (#38021)
将 dataset_expression 添加到网格 dag 详细信息 (#38121)
引入支持多个执行器配置的机制 (#37635)
为任务执行日志中的 ANSI 字符添加颜色格式 (#37985)
将 dataset_expression 作为 DagModel 和 DAGDetailSchema 的一部分添加 (#37826)
允许更长的 rendered_map_index (#37798)
从 DatasetTriggeredTimetable 为 DatasetOrTimeSchedule 继承 run_ordering (#37775)
实现 AIP-60 数据集 URI 格式 (#37005)
为数据集条件逻辑引入逻辑运算符 (#37101)
为数据集事件添加 post 端点 (#37570)
在 UI 中显示映射任务的自定义实例名称 (#36797)
将排除/包含的事件添加到 get_event_logs api (#37641)
将数据集添加到 dag 图中 (#37604)
在网格视图中,在任务/运行详细信息上方显示数据集事件 (#37603)
引入新的配置变量来控制 DAG 处理器是否输出到 stdout (#37439)
使数据集
hashable
(#37465)为数据集触发添加条件逻辑 (#37016)
在 react 中实现任务持续时间页面。 (#35863)
添加
queuedEvent
端点以获取/删除 DatasetDagRunQueue (#37176)在 BaseOperator 中支持多个 XCom 输出 (#37297)
AIP-58:为 xcom 添加对象存储后端 (#37058)
引入
DatasetOrTimeSchedule
(#36710)将
on_skipped_callback
添加到BaseOperator
(#36374)允许覆盖悬停导航栏颜色 (#36631)
使用标记创建新指标 (#36528)
添加对 AFS 和 common.io 的 openlineage 支持 (#36410)
引入
@task.bash
TaskFlow 装饰器 (#30176, #37875)
改进¶
为数据库清理提供更人性化的“显示表”输出 (#38654)
通过合并 alive_triggerer_ids 和 get_sorted_triggers 查询来改进触发器 assign_unassigned (#38664)
将排除/包含事件筛选器添加到审计日志 (#38506)
为除 MySQL 之外的所有方言,在单个查询中清理未使用的触发器 (#38663)
更新敏感环境(如生产环境)上配置更改的确认逻辑 (#38299)
改进数据集图 UX (#38476)
仅显示上次运行后的最新数据集事件时间戳 (#38340)
添加一个按钮,以清除 dagrun 中仅失败的任务。 (#38217)
删除所有旧的 dag 页面并重定向到网格视图 (#37988)
在使用 sentry.add_tagging() 之前检查任务属性 (#37143)
Mysql 更改 MySQL 后端的 xcom 值列类型 (#38401)
ExternalPythonOperator
使用来自sys.version_info
的版本 (#38377)将过于宽泛的异常替换为 Core 中的异常 (#38344)
添加 CLI 支持以批量暂停和恢复 DAG (#38265)
在 TaskInstancePydantic 和 DagRunPydantic 上实现方法 (#38295, #38302, #38303, #38297)
使筛选器栏可折叠,并添加全屏切换 (#38296)
加密所有触发器属性 (#38233, #38358, #38743)
升级 react-table 包。与审计日志表一起使用 (#38092)
显示 dag 页面筛选器是否处于活动状态 (#38080)
将尝试次数添加到映射实例 (#38097)
将重试添加到作业心跳 (#37541)
将 REST API 事件添加到审计日志 (#37734)
使当前工作目录成为 BashOperator 中的模板化字段 (#37968)
将日历视图添加到 react (#37909)
将
run_id
列添加到日志表 (#37731)将
tryNumber
添加到网格任务实例工具提示 (#37911)会话未在 _do_render_template_fields 中使用 (#37856)
改进 MappedOperator 属性类型 (#37870)
从 TaskInstancePydantic 方法中删除 provide_session 装饰器 (#37853)
确保用于 TaskInstancePydantic 和 TaskInstance 的 “airflow.task” 日志记录器 (#37857)
更好的内部 api 调用错误错误消息 (#37852)
增加 dag 网格视图的工具提示大小 (#37782) (#37805)
使用命名日志记录器而不是根日志记录器 (#37801)
在 React 中添加运行持续时间 (#37735)
避免不建议的日志记录用法 (#37792)
改进 DateTimeTrigger 类型 (#37694)
确保所有唯一的 run_id 都呈现任务持续时间条 (#37717)
将 Dag 审计日志添加到 React (#37682)
为自动暂停添加日志事件 (#38243)
为模板化基础运算符字段的异常提供更好的消息 (#37668)
清理添加到审计日志的 Web 服务器端点 (#37580)
按 dag_id 筛选数据集图 (#37464)
为 SIGTERM 使用继承 BaseException 的新异常类型 (#37613)
重构数据集类继承 (#37590)
简化包版本检查 (#37585)
按关联的 dag_id 筛选数据集(GET /datasets)(#37512)
启用 “airflow tasks test” 以运行可延迟运算符 (#37542)
使数据集列表/图表宽度可调整 (#37425)
加速确定
ExternalPythonOperator
中安装的 airflow 版本 (#37409)从 rest api 添加更多任务详细信息 (#37394)
为 DAG 运行操作添加确认对话框 (#35393)
将关闭颜色添加到 STATE_COLORS (#37295)
删除旧的 dag 详细信息页面并重定向到网格 (#37232)
按 API 中的映射索引对 XCom 条目排序 (#37086)
在 dagrun create API 端点中添加 data_interval_start 和 data_interval_end (#36630)
通过防止 HTML 注入,使任务日志中的链接成为超链接 (#36829)
改进 ExternalTaskSensor 异步实现 (#36916)
使数据集
Pathlike
(#36947)简化孤立任务的查询 (#36566)
在 FileSensor 中添加可延迟参数 (#36840)
运行触发器页面:可配置的最近配置数量 (#36878)
将
nowait
和 skip_locked 合并到 with_row_locks 中 (#36889)在 REST API 中获取
dag/dagRun
时返回指定的字段 (#36641)仅在 DagFileProcessorManager 启用调试时才迭代项目 (#36761)
为指标允许和阻止列表添加模糊/正则表达式模式匹配 (#36250)
允许在 cli dags list 中使用自定义列 (#35250)
使更改默认 cron 时间表成为可能 (#34851)
对 Airflow IO 代码进行了一些改进 (#36259)
改进 TaskInstance 类型提示 (#36487)
从身份验证管理器接口中删除
Connexion
的依赖 (#36209)重构 ExternalDagLink,使其不创建临时的 TaskInstances (#36135)
错误修复¶
在 gunicorn 工作进程启动时加载提供程序配置 (#38795)
修复网格标题渲染 (#38720)
为映射的依赖项添加任务实例依赖项 (#37498)
提高 remove_task_decorator 函数的稳定性 (#38649)
在 API 上将更多字段标记为仅转储 (#38616)
修复事件日志端点上的
total_entries
计数 (#38625)在日志块底部添加填充 (#38610)
正确序列化嵌套的 attrs 类 (#38591)
修复下一个运行 ID 信息中的
tz
(#38482)在网格视图中显示已放弃的任务 (#38511)
一致地应用任务实例变更钩子 (#38440)
覆盖
chakra
样式以保持筛选栏中的dropdowns
(#38456)以秒为单位存储持续时间并进行缩放,以处理序列中某个值具有比先前持续时间更大的单位的情况 (#38374)
不允许在上下文参数中使用除 None 之外的默认值,并改进错误消息 (#38015)
使 postgresql 默认引擎参数符合 SA 2.0 (#38362)
在触发器中的 while 循环中向 yield 添加返回语句 (#38389)
确保在装饰器上下文管理器中调用
__exit__
(#38383)使方法
BaseAuthManager.is_authorized_custom_view
成为抽象方法 (#37915)为计划的日历事件计算添加上限 (#38310)
修复守护程序模式下的调度程序未在指定位置创建 PID 的问题 (#38117)
正确序列化 TaskInstancePydantic 和 DagRunPydantic (#37855)
修复图表任务状态边框颜色 (#38084)
添加回安全管理器中删除的方法 (#37997)
不要将来自 worker serve-logs 的 “403” 记录为“未知错误” (#37933)
修复
/get_logs_with_metadata
端点中的执行数据验证错误 (#37756)修复任务持续时间选择 (#37630)
避免在 SQLAlchemy v2 中将
encoding
传递给 SQL 引擎 (#37545)修复最新 DAG 运行语句中“隐式将 SELECT 对象强制转换为标量子查询”的问题 (#37505)
使用 max_execution_date 查询构建器清理类型 (#36958)
优化单个 DAG 情况下的 max_execution_date 查询 (#33242)
修复 get_dagmodel 为 None 时 list dags 命令的问题 (#36739)
在数据集侦听器之前急切加载
consuming_dags
属性 (#36247)
其他¶
从 UI 中删除参数的显示 (#38660)
将 log level 从关于 scheduled_duration 指标的 warning 更新为 debug (#38180)
将
importlib_metadata
与 Python 3.10/3.12stdlib
兼容使用 (#38366)重构 BaseOperatorMeta 的
__new__
魔术方法,以避免混合经典运算符和装饰运算符时出现问题 (#37937)使用
sys.version_info
来确定 Python Major.Minor 版本 (#38372)添加缺失的已弃用的 Fab 身份验证管理器 (#38376)
从 airflow 包中删除未使用的循环变量 (#38308)
在 UI 中添加最大连续失败 DAG 运行信息 (#38229)
将
blinker
的最小版本提升并在需要的地方添加 (#38140)将 /airflow/www 中的 follow-redirects 从 1.15.4 提升到 1.15.6 (#38156)
将 Cryptography 提升到
> 39.0.0
(#38112)添加 Python 3.12 支持 (#36755, #38025, #36595)
避免在测试之外使用
assert
(#37718)更新 universal_pathlib>=v0.2.2 的 ObjectStoragePath (#37930)
解决 G004:日志语句使用 f 字符串 (#37873)
更新构建和安装依赖项 (#37910)
将 /airflow/www 中的 sanitize-html 从 2.11.0 提升到 2.12.1 (#37833)
更新到最新的安装程序版本 (#37754)
弃用 airflow settings / local_settings 中的 smtp 配置 (#37711)
将 PY* 常量弃用到 airflow 模块中 (#37575)
删除已弃用的
flask._request_ctx_stack
的用法 (#37522)删除
airflow.__init__.py
中多余的login
属性 (#37565)升级到 FAB 4.3.11 (#37233)
删除 2.0.0 以来任何地方都不再使用的 SCHEDULED_DEPS (#37140)
将
datetime.datetime.utcnow
替换为核心中的airflow.utils.timezone.utcnow
(#35448)提升 aiohttp 的最小版本,以避免 CVE-2024-23829 和 CVE-2024-23334 (#37110)
将与 FAB 身份验证管理器相关的配置移至 FAB 提供程序 (#36232)
从 Airflow 核心中删除 MSSQL 支持 (#36514)
从身份验证管理器中删除
is_authorized_cluster_activity
(#36175)创建 FAB 提供程序并将 FAB 身份验证管理器移入其中 (#35926)
仅文档更改¶
改进时间表文档 (#38505)
按字母顺序重新排序 OpenAPI 规范标签 (#38717)
更新文档中的 UI 屏幕截图 (#38680, #38403, #38438, #38435)
删除该部分,因为它在数据集表达式 PR 中不再正确 (#38370)
重构 DatasetOrTimeSchedule 时间表文档 (#37771)
将执行器文档迁移到各自的提供程序 (#37728)
添加指令以渲染 URI 方案列表 (#37700)
添加包含提供程序弃用的文档页面 (#37075)
添加对安全策略的交叉引用 (#37004)
改进 AIRFLOW__WEBSERVER__BASE_URL 文档 (#37003)
更新 faq.rst,提供(希望)更清晰的 start_date 描述 (#36846)
更新有关运算符的公共接口文档 (#36767)
将
exception
添加到模板参考列表 (#36656)将身份验证管理器接口添加为公共接口 (#36312)
在 Airflow 文档中引用 fab 提供程序文档 (#36310)
创建身份验证管理器文档 (#36211)
更新权限文档 (#36120)
Docstring 改进了 _covers_every_hour (#36081)
添加说明,指出任务实例、DAG 和生命周期侦听器不是实验性的 (#36376)
Airflow 2.8.4 (2024-03-25)¶
重大更改¶
没有重大更改。
错误修复¶
修复
FixedTimezone
的不正确序列化 (#38139)修复日志任务处理程序的权限更改过多问题 (#38164)
修复任务实例列表链接 (#38096)
修复未使用调度程序心跳参数的错误 (#37992)
添加填充以防止网格水平滚动覆盖任务 (#37942)
修复
ObjectStoragePath
中的哈希缓存 (#37769)
其他¶
限制 importlib_resources,因为它会破坏
pytest_rewrites
(#38095, #38139)将
pandas
限制为<2.2
(#37748)提升
croniter
以修复 2 月 29 日 cron 表达式的问题 (#38198)
仅文档更改¶
告知用户如果他们的扫描仪在映像中发现问题该怎么办 (#37652)
添加有关在 Docker Compose 中使用 PyCharm 进行调试的部分 (#37940)
更新可延迟文档,以阐明触发器恢复运算符时的 kwargs (#38122)
Airflow 2.8.3 (2024-03-11)¶
重大更改¶
现在,当您安装 Airflow 时,smtp 提供程序将预先安装 (#37713)¶
错误修复¶
在身份验证管理器中添加“MENU”权限 (#37881)
修复 external_executor_id 被覆盖的问题 (#37784)
使更多 MappedOperator 成员可修改 (#37828)
在 dag 测试命令中设置解析上下文 dag_id (#37606)
其他¶
从安全管理器中删除无用的方法 (#37889)
改进 TriggerRuleDep 的代码覆盖率 (#37680)
现在,安装 Airflow 时会预先安装 SMTP 提供程序 (#37713)
提升 openapi 验证器的最低版本 (#37691)
正确包含
airflow_pre_installed_providers.txt
工件 (#37679)
仅文档更改¶
阐明 worker 和调度程序之间缺少同步 (#37913)
简化一些关于 airflow_local_settings 的文档 (#37835)
添加关于本地设置配置的部分 (#37829)
修复
BranchDayOfWeekOperator
的文档 (#37813)设计上不支持写入密钥存储 (#37814)
ERD
生成文档改进 (#37808)更新不正确的配置值 (#37706)
更新安全模型以阐明连接编辑用户的能力 (#37688)
修复示例 DAG 上的 ImportError (#37571)
Airflow 2.8.2 (2024-02-26)¶
重大更改¶
allowed_deserialization_classes
标志现在遵循 glob 模式 (#36147)。¶
例如,如果想要将类 airflow.tests.custom_class
添加到 allowed_deserialization_classes
列表中,可以通过写入完整的类名 (airflow.tests.custom_class
) 或使用类似于 glob 搜索中的模式(例如,airflow.*
, airflow.tests.*
)。
如果您当前使用自定义的正则表达式路径,请确保将其重写为 glob 模式。
或者,如果您仍然希望将其作为正则表达式模式匹配,请将其添加到新的列表 allowed_deserialization_classes_regexp
下。
为了提高安全性,已更新 audit_logs 的权限 (#37501)。¶
此更改的策略是不希望 Viewer、Ops 和其他非管理员用户访问 audit_logs。此更改背后的目的是限制权限较低的用户在未被允许的情况下,查看来自 audit_logs 的诸如名字、电子邮件等用户详细信息。
此更改的影响是,现有的非管理员用户将无法从“浏览”选项卡或 DAG 运行中查看或访问 audit_logs。
AirflowTimeoutError
不再默认通过 Exception
进行 except
处理 (#35653)。¶
AirflowTimeoutError
现在继承自 BaseException
而不是 AirflowException
->``Exception``。请参阅 https://docs.pythonlang.cn/3/library/exceptions.html#exception-hierarchy
这可以防止代码捕获 Exception
时意外捕获 AirflowTimeoutError
并继续运行。AirflowTimeoutError
明确表示要取消任务,不应在尝试处理错误并返回某些默认值时捕获。
仍然可以通过显式 except``ing ``AirflowTimeoutError
或 BaseException
来捕获 AirflowTimeoutError
。但不建议这样做,因为它可能允许代码在收到此类取消请求后继续运行。之前依赖于在捕获 Exception
后在每种情况下执行严格清理的代码,建议使用 finally
块或上下文管理器。仅执行清理,然后自动重新引发异常。请参阅关于捕获 KeyboardInterrupt
的类似注意事项:https://docs.pythonlang.cn/3/library/exceptions.html#KeyboardInterrupt
Bug 修复¶
按 last_runtime 对 dag 处理统计信息进行排序 (#37302)
允许通过 URL 参数预填充触发表单值 (#37497)
获取 dag 网格视图的基本日期必须包括选定的 run_id (#34887)
检查 ImportError 的权限 (#37468)
将
IMPORT_ERROR
从 DAG 相关权限移至视图相关权限 (#37292)更改
AirflowTaskTimeout
以继承BaseException
(#35653)撤销 “修复当 max_active_runs 达到上限时,由竞争条件引起的未来 DagRun 很少被触发的问题。(#31414)” (#37596)
将 margin 更改为 padding,以便可以选择第一个任务 (#37527)
修复
namedtuple
的 Airflow 序列化 (#37168)修复点击 url 不安全标签的错误 (#37395)
为
Treeview
函数设置确定性和新的 getter (#37162)修复日志文件处理程序的父文件夹的权限 (#37310)
修复指定
access_entity
时 DAG 的权限检查 (#37290)修复
dateTimeAttrFormat
常量的值 (#37285)解决触发器关闭时的处理程序关闭竞争条件 (#37206)
修复各种视图的状态图标对齐 (#36804)
删除多余的
@Sentry.enrich_errors
(#37002)使用 execution_date= 参数作为网格视图基本日期的备份 (#37018)
处理在任务中引发的 SystemExit。 (#36986)
撤销除管理员之外的所有用户的 audit_log 权限 (#37501)
修复 allowed_deserialization_classes 的错误的正则表达式 (#36147)
修复影响 DAG 结束日期的错误 (#36144)
根据任务名称长度调整节点宽度 (#37254)
修复:如果在与 DAG 相同的源文件中定义了任何 python_callable 函数,PythonVirtualenvOperator 会崩溃 (#37165)
修复折叠的网格宽度,使选定的栏与甘特图对齐 (#37205)
调整图节点布局 (#37207)
恢复初始化配置默认值的顺序 (#37155)
在 TaskInstance 视图中显示 “实际” 尝试次数 (#34635)
Bug修复:当启用 show_trigger_form_if_no_params 时,必须使用参数触发 DAG (#37063)
密钥掩码器忽略带有特殊字符的密码 (#36692)
修复带有 UPSTREAM_FAILED 任务的 DagRuns 卡在回填中的问题。 (#36954)
禁用
dryrun
自动获取 (#36941)修复 DAG 运行配置上的复制按钮 (#36855)
修复由将空格替换为 run_id 中的 + 号引起的错误 (#36877)
修复如果用户未登录,Web 服务器始终重定向到主页的问题 (#36833)
REST API 在 POST 到
/variables
端点时设置描述 (#36820)清理 conn_id 以不允许潜在的脚本执行 (#32867)
修复任务 ID 复制按钮复制错误 ID 的问题 (#34904)
修复 fab 提供程序中的安全管理器继承 (#36538)
避免使用
pendulum.from_timestamp
(#37160)
其他¶
安装最新的 docker
CLI
而不是特定的版本 (#37651)在
/airflow/www
中将undici
从5.26.3
升级到5.28.3
(#37493)在
providers/pyproject.toml
中添加 Python3.12
的排除项 (#37404)从核心依赖项中删除
markdown
(#37396)删除未使用的
pageSize
方法。 (#37319)将 more-itertools 添加为 common-sql 的依赖项 (#37359)
替换其他
Python 3.11
和3.12
的弃用 (#37478)将
airflow_pre_installed_providers.txt
包含到sdist
发行版中 (#37388)将 Pydantic 转换为可选依赖项 (#37320)
将
universal-pathlib 限制为 < 0.2.0
(#37311)允许在内存中的 SQLite 数据库中运行 Airflow 进行测试 (#37144)
为
queue_when
添加描述 (#36997)更新了环境变量
sql_alchemy_connect_args
的config.yml
(#36526)将
Alembic
的最低版本提升到1.13.1
(#36928)将
flask-session
限制为<0.6
(#36895)
仅文档更改¶
修复升级文档以反映可用的真实
CLI
标志 (#37231)修复基本原理文档中的错误 (#37440)
为已弃用的页面添加重定向 (#37384)
修复
otel
配置描述 (#37229)使用
prereqs
部分更新Objectstore
教程 (#36983)添加关于避免通用
package/module
名称的更精确的描述 (#36927)将 Airflow 版本替换添加到 Docker Compose Howto (#37177)
向安全模型添加关于 DAG 作者功能的说明 (#37141)
将 cron 基础知识的文档移至“创作和调度”部分 (#37049)
在升级文档中链接到发行说明 (#36923)
防止在操作器的
__init__
中自动执行模板化字段逻辑检查 (#33786)
Airflow 2.8.1 (2024-01-19)¶
重大更改¶
核心依赖项 pendulum
包的目标版本设置为 3 (#36281)。¶
对 pendulum 2.1.2 的支持将保留一段时间,大概到下一个 Airflow 功能版本。建议尽快升级用户代码以使用 pendulum 3。
Pendulum 3 引入了一些细微的不兼容性,您的代码可能依赖于这些不兼容性。例如,日期默认渲染中缺少 T
,这不符合 ISO8601 标准。如果您依赖日期的默认渲染,可能需要调整代码,使用 isoformat()
方法以 ISO8601 格式渲染日期。
Airflow 的打包规范遵循现代 Python 打包标准 (#36537)。¶
我们标准化了 Airflow 的依赖配置,通过使用 pyproject.toml
来遵循 Python 打包的最新发展。Airflow 现在符合这些被接受的 PEP 标准
此外,我们还实现了来自草案的多许可证文件支持,该草案尚未被接受(但 hatchling 支持):* PEP 639 通过更好的包元数据提高许可证清晰度
如果用户使用现代 Python 打包和开发工具,这几乎不会对用户产生明显影响。一般来说,从 PyPI 安装 Airflow 时,其行为应与以前相同,并且使用 pip install -e ".[devel]"
进行开发安装应该会更容易。
用户方面的差异是
Airflow 的 extras 现在将 extras 规范化为
-
(遵循 PEP-685),而不是_
和.
(就像以前在某些 extras 中那样)。当您安装带有此类 extras 的 airflow 时(例如dbt.core
或all_dbs
),您应该使用-
而不是_
和.
。
在大多数现代工具中,这将以向后兼容的方式工作,但在某些旧版本的工具中,您可能需要将 _
和 .
替换为 -
。您也可能会收到警告,提示您正在安装的 extra 不存在,但通常此警告是无害的,并且 extra 仍会安装。但是,建议在所有 Airflow extras 的依赖规范中使用 -
。
已发布的 airflow 包不包含
devel
、devel-*
、doc
和doc-gen
extras。只有当您以--editable
模式从源代码安装 Airflow 时,这些 extras 才可用。这是因为这些 extras 仅用于开发和文档构建目的,在生产环境中使用 Airflow 时不需要。无论如何,这些依赖项对于已发布的软件包具有未指定和不同的行为,您不应该在已发布的软件包中使用它们。当使用 constraints 安装 Airflow 时,
all
和all-*
extras 并非总是正常工作,因为它们也被视为仅用于开发的依赖项。通过此更改,这些依赖项现在可以正确处理 constraints,并且在使用 constraints 时会正确安装,并在使用 constraints 时拉取正确的 providers 和依赖项集。
Graphviz 依赖项现在是一个可选依赖项,而不是必需的依赖项 (#36647)。¶
graphviz
依赖项一直是一个有问题的问题,因为 Airflow 需要依赖项 - 特别是对于基于 ARM 的安装。Graphviz 包需要二进制 graphviz 库 - 这已经是一个限制,但它们还需要安装 graphviz Python 绑定才能构建和安装。这对于较旧的 Linux 安装不起作用,但更重要的是 - 当您尝试为 ARM M1 MacBook 安装适用于 Python 3.8、3.9 的 Graphviz 库时,由于 M1 的 Python 绑定编译只能适用于 Python 3.10+,因此包安装失败。
从技术上讲,这不是一个重大更改 - 用于渲染 DAG 的 CLI 仍然存在,并且如果您已经安装了 graphviz,它将继续像以前一样工作。唯一的问题是,如果您没有安装 graphviz,它将引发错误并通知您需要它。
对于大多数用户来说,Graphviz 仍然会被安装
Airflow 镜像仍将包含 graphviz 库,因为它作为 extra 添加在那里
当之前版本的 Airflow 已经安装时,graphviz 库已经安装在那里,Airflow 将继续像以前一样工作
唯一的更改是从头开始安装新版本的 Airflow,其中需要将 graphviz 指定为 extra 或单独安装,以启用 DAG 渲染选项。
Bug 修复¶
修复 airflow-scheduler 在异常时以代码 0 退出的问题 (#36800)
修复当删除的任务是
taskinstance
列表中的最后一个任务时,回调异常的问题 (#36693)当设置
AUTH_ROLE_PUBLIC=admin
时,允许匿名用户编辑/显示资源 (#36750)当 sqlite URL 使用相对路径时,显示更好的错误消息 (#36774)
需要显式字符串转换,以强制将整数类型的 run_ids 作为字符串而不是整数传递 (#36756)
为空的
op
子类型添加日志查找异常 (#35536)删除任务实例上未使用的索引 (#36737)
修复 Python 3.10+ 中
_infer_multiple_outputs
中typing.Union
的子类检查 (#36728)确保即使在使用
TypedDict
时也能正确推断multiple_outputs
(#36652)在旧版安全管理器中添加回 FAB 常量 (#36719)
修复使用
Dagrun.update_state
时出现的 AttributeError (#36712)如果
catchup=False
,则不让EventsTimetable
计划过去的事件 (#36134)支持触发器参数的加密 (#36492)
修复
_process_executor_events
中tis_query
的类型提示 (#36655)当用户无权访问页面时,重定向到索引页面 (#36623)
避免在
call_regular_interval
中使用 dict 作为默认值 (#36608)删除在 UI 中将任务实例设置为运行状态的选项 (#36518)
修复使用动态任务映射时未显示详细信息选项卡的问题 (#36522)
在运行
dag test
时,如果DagRun
失败,则引发错误 (#36517)通过批量刷新 TIs 来重构
_manage_executor_state
(#36502)添加 Flask 配置:
MAX_CONTENT_LENGTH
(#36401)修复嵌套组中 teardown 的 get_leaves 计算 (#36456)
停止将时区感知错误的日期时间序列化为带有 UTC tz 的时区感知日期时间 (#36379)
使
kubernetes
装饰器类型注释与运算符一致 (#36405)修复 Web 服务器对来自匿名用户的
api/dag/*/dagrun
的 POST 请求返回 500 的问题 (#36275)修复 get_variable 端点所需的访问权限 (#36396)
修复
DAG.is_fixed_time_schedule
中的日期时间引用 (#36370)修复 BashOperator 引发的 AirflowSkipException 消息 (#36354)
允许 PythonVirtualenvOperator.skip_on_exit_code 为零 (#36361)
增加 trigger.html 中 execution_date 输入的宽度 (#36278)
修复暂停 DAG 的日志记录 (#36182)
当 enable_xcom_pickling 为 False 时停止反序列化 pickle (#36255)
在访问 DAG 代码之前检查 DAG 读取权限 (#36257)
始终启用将任务标记为失败/成功 (#36254)
创建最新的日志目录符号链接作为相对链接 (#36019)
修复基于 Python 的装饰器模板化 (#36103)
杂项¶
将并发标签重命名为最大活动任务数 (#36691)
恢复文件任务处理程序中函数作用域的
httpx
导入,以提高性能 (#36753)添加对 Pendulum 3 的支持 (#36281)
标准化 airflow 构建过程并切换到 Hatchling 构建后端 (#36537)
摆脱
CVE-2023-47248
的pyarrow-hotfix
(#36697)使
graphviz
依赖项成为可选的 (#36647)宣布 Airflow 2.9.0 中 MSSQL 支持的结束,添加迁移脚本提示 (#36509)
将所有 providers 和 airflow 的最小
pandas
依赖项设置为 1.2.5 (#36698)将
/airflow/www
中的 follow-redirects 从 1.15.3 升级到 1.15.4 (#36700)提供 logger_name 参数给基本 hook,以便覆盖记录器名称 (#36674)
修复运行类型图标与运行类型文本的对齐方式 (#36616)
在 FSHook 中遵循 BaseHook 连接字段方法签名 (#36444)
删除冗余的
docker
装饰器类型注释 (#36406)规范工作日时间表中的类型 (#36296)
使用
batch_is_authorized_dag
检查用户是否具有读取 DAG 的权限 (#36279)替换已弃用的 get_accessible_dag_ids,并在 get_dag_warnings 中使用 get_readable_dags (#36256)
仅文档更改¶
指标标记文档 (#36627)
在文档中使用 logical_date 代替已弃用的 execution_date (#36654)
添加有关 Airflow 实时升级的部分 (#36637)
将
numpy
示例替换为演示顶层代码的实际练习 (#35097)改进并添加架构图中的更完整描述 (#36513)
改进出现 Web 服务器错误时显示的错误消息 (#36570)
更新
dags.rst
,其中包含有关 DAG 暂停的信息 (#36540)在升级到 Debian Bookworm 后更新安装先决条件 (#36521)
添加有关用户应如何处理数据库监控的说明 (#36483)
将基于映射任务组的示例分支添加到 dynamic-task-mapping.rst (#36480)
向替换文档添加更多详细信息 (#36485)
在描述优先级加权方法时使用卡片 (#36411)
为参数
dagrun.schedule_delay
更新metrics.rst
(#36404)更新 Python 运算符文档中的警告,以反映情感 (#36340)
改进 audit_logs.rst (#36213)
从托管 Postgres 后端列表中删除 Redshift 的提及 (#36217)
Airflow 2.8.0 (2023-12-18)¶
重大变更¶
默认禁用 DAG 文档和 DAG 参数描述中的原始 HTML 代码 (#35460)¶
为了确保 DAG 描述中不会注入恶意 JavaScript,或者 DAG 作者不会通过触发 UI 表单进行攻击,添加了一个新的参数 webserver.allow_raw_html_descriptions
,默认值为 False
。如果您信任您的 DAG 作者的代码,并希望允许在 DAG 描述和参数中使用原始 HTML,您可以通过将配置值设置为 True
来恢复之前的行为。
为了确保 Airflow 默认安全,触发 UI 中的原始 HTML 支持已被通过 description_md
属性的 Markdown 支持所取代。如果您一直在使用 description_html
,请迁移到 description_md
。custom_html_form
现在已被弃用。
新功能¶
AIP-58:添加 Airflow 对象存储 (AFS) (AIP-58)
在网格视图中添加 XCom 选项卡 (#35719)
添加“literal”包装器以禁用字段模板化 (#35017)
添加任务上下文日志记录功能,允许将消息转发到任务日志 (#32646, #32693, #35857)
为数据集添加监听器钩子 (#34418, #36247)
允许覆盖导航栏文本颜色 (#35505)
为 deltalake 表添加轻量级序列化 (#35462)
添加对 iceberg 表序列化的支持 (#35456)
prev_end_date_success
方法访问 (#34528)添加任务参数以设置自定义日志记录器名称 (#34964)
添加 pyspark 装饰器 (#35247)
添加触发器作为 db clean 命令的有效选项 (#34908)
为外部和 venv python 分支运算符添加装饰器 (#35043)
允许 PythonVenvOperator 使用其他索引 URL (#33017)
添加 Python Virtualenv Operator 缓存 (#33355)
为容器化执行器日志引入通用导出 (#34903)
添加在
List Task Instances
视图中清除下游任务实例的能力 (#34529)添加属性
clear_number
以跟踪正在被清除的 DAG 运行 (#34126)添加 BranchPythonVirtualenvOperator (#33356)
允许 PythonVenvOperator 使用其他索引 URL (#33017)
向提供程序添加 CLI 通知命令 (#33116)
当日志选项卡中超过 10 次重试时,使用下拉菜单而不是按钮 (#36025)
改进¶
在网格视图中为运行状态添加
multiselect
(#35403)修复
Connection.get_hook
中出现 ImportError 时的警告消息 (#36005)向 import_error 表添加 processor_subdir 以处理多个 DAG 处理器 (#35956)
将 change_state 的调用合并到核心执行器中的 fail 或 success (#35901)
当 schedule=None 时,放宽对 start_date 的强制要求 (#35356)
使用 ExitStack 管理 dag.test 中 secrets_backend_list 的更改 (#34620)
提高
taskinstance
的 ActionModal 中任务的可见性 (#35810)基于
AIRFLOW_CONFIG
路径创建目录 (#35818)实现
JSON-string
连接表示生成器 (#35723)将
BaseOperatorLink
移动到单独的模块 (#35032)在 set_context 之后设置 mark_end_on_close (#35761)
将外部日志链接移动到 React 日志页面的顶部 (#35668)
在
execute_interactive
中将终端模式更改为cbreak
并处理SIGINT
(#35602)使原始 HTML 描述可配置 (#35460)
允许对电子邮件字段进行模板化 (#35546)
在触发 UI 表单中隐藏逻辑日期和运行 ID (#35284)
改进了在 TaskFlow 中添加依赖项的说明 (#35406)
为列表导入错误添加可选的退出代码 (#35378)
在
synchronize_log_template
函数中,限制 DB 上的查询结果,而不是客户端上的查询结果 (#35366)允许在使用变量 CLI 时传入描述 (#34791)
允许手动触发的 DAG 的必需字段中带有可选的默认值 (#31301)
允许 airflow kerberos 在不同模式下运行 (#35146)
重构命令以统一守护进程上下文处理 (#34945)
向插件端点添加额外的字段 (#34913)
向池视图添加描述 (#34862)
将 cli 的连接导出和变量导出命令打印逻辑移动到单独的函数 (#34647)
从 get_kerberos_principle 中提取并重用 get_kerberos_principle 函数 (#34936)
更改
BaseOperatorLink.operators
的类型注释 (#35003)优化并迁移到用于 TaskReschedule 的
SA2-compatible
语法 (#33720)合并 SlaMissModelView 中的权限名称 (#34949)
添加调试日志,说明正在运行什么到
EventScheduler
(#34808)将日志读取器流循环睡眠时间增加到 1 秒 (#34789)
解决 pydantic 关于
update_forward_refs
的弃用警告 (#34657)统一映射的任务组查找逻辑 (#34637)
允许按属性筛选事件日志 (#34417)
使连接登录名和密码为 TEXT (#32815)
禁止在代码库中从
airflow
包导入Dataset
(#34610)在示例和测试中使用
airflow.datasets.Dataset
(#34605)提高任务状态可见性 (#34486)
简化 DAG 触发 UI (#34567)
禁止从 airflow 导入 AirflowException (#34512)
添加对 airflow 资源配置参数的描述 (#34438)
简化触发器名称表达式 (#34356)
将 Pod*Exceptions 的定义移动到 pod_generator (#34346)
将延迟的任务添加到 cluster_activity 视图的池槽中 (#34275)
心跳失败日志消息修复 (#34160)
重命名 DAG 运行的变量 (#34049)
在 OpenAPI 规范中澄清 new_state (#34056)
从 docker compose 文件中删除顶层元素
version
(#33831)删除通用的触发器取消错误日志 (#33874)
使用
NOT EXISTS
子查询而不是tuple_not_in_condition
(#33527)允许上下文键参数不提供默认值 (#33430)
分配未分配的触发器时,按 - TI priority_weight 对触发器排序 (#32318)
添加指标
triggerer_heartbeat
(#33320)允许
airflow variables export
打印到 stdout (#33279)解决运行回填时失败的死锁 (#32991)
为批处理任务实例 API 端点添加 dag_run_ids 和 task_ids 过滤器 (#32705)
为触发器配置运行状况检查阈值 (#33089)
重做提供程序管理器,以像其他提供程序钩子一样处理 Airflow 核心钩子 (#33051)
确保在取消映射时填充 DAG 级别的引用 (#33083)
将 Web 服务器访问被拒绝警告附加为可配置的 (#33022)
在触发表单 UI 中添加对不同数据类型数组的支持 (#32734)
添加一种机制来警告执行器是否覆盖了现有的 CLI 命令 (#33423)
错误修复¶
计算下一个计划时,考虑 UTC 偏移量的变化 (#35887)
为查看者角色添加对池的读取访问权限 (#35352)
修复当延迟任务的 queued_dttm 大于 start_date 时,甘特图的排队持续时间 (#35984)
避免在 rm 时找不到目录时崩溃容器 (#36050)
更新
reset_user_sessions
以在 CLI 或 Web 中工作 (#36056)修复 DAG 已删除时的 UI 网格错误 (#36028)
将触发 UI 更改为在 Web UI 中使用 HTTP POST (#36026)
修复 airflow db shell 需要额外按键才能退出的问题 (#35982)
将 DAG 网格
overscroll
行为更改为 auto (#35717)使触发器与 DAG 测试内联运行 (#34642)
为 Firefox
scrollbar
向网格添加borderWidthRight
(#35346)修复由于 secrets_masker 导致的无限递归 (#35048)
修复 serialized_dag 表中的写入
processor_subdir
(#35661)重新加载独立 DAG 文件处理器的配置 (#35725)
长自定义运算符名称在图表视图中溢出 (#35382)
向额外链接查询添加 try_number (#35317)
防止将非 JSON 可序列化值分配给 DagRun.conf 字典 (#35096)
DAG 详细信息中的数值错误地呈现为时间戳 (#35538)
修复在启用 statsd 指标时,守护进程模式下的调度器和触发器崩溃的问题 (#35181)
停用活动用户后,出现无限 UI 重定向循环 (#35486)
修复 Partial Subset DAG 的 fetch_callback 的错误 (#35256)
修复 DeltaDataIntervalTimetable 的 DagRun 数据间隔 (#35391)
修复
get_dag_by_pickle
实用程序函数中的查询 (#35339)修复当 reset_dag_run=True 时,TriggerDagRunOperator 无法触发后续运行的问题 (#35429)
修复
mappedoperator
中的 weight_rule 属性类型 (#35257)错误修复/防止与缓存的 venv 并发 (#35258)
修复 DAG 序列化 (#34042)
通过将 request.referrer 替换为 get_redirect() 来修复 py/url 重定向 (#34237)
修复在变量导入期间更新变量的问题 (#33932)
在 Airflow 核心中使用来自 airflow.typing_compat 的 Literal (#33821)
始终使用来自
typing_extensions
的Literal
(#33794)
其他¶
将默认 MySQL 客户端更改为 MariaDB (#36243)
将 daskexecutor 提供程序标记为已删除 (#35965)
将 FAB 升级到
4.3.10
(#35991)将 daskexecutor 提供程序标记为已删除 (#35965)
将
Connection.to_json_dict
重命名为Connection.to_dict
(#35894)升级到 Pydantic v2 (#35551)
将
moto
版本升级到>= 4.2.9
(#35687)使用
pyarrow-hotfix
来缓解 CVE-2023-47248 (#35650)将
/airflow/www/
中的axios
从0.26.0 升级到 1.6.0
(#35624)使 docker 装饰器的类型注释与运算符保持一致 (#35568)
在样式中为
navbar_text_color
和rm
条件添加默认值 (#35553)避免在
dag_next_execution
中两次启动会话 (#35539)解决示例和提供程序中的类型问题 (#35494)
启用
TCH004
和TCH005
规则 (#35475)使有关检索到的 DAG 的日志输出更人性化 (#35338)
从 Black 切换到 Ruff 格式化程序 (#35287)
升级到 Flask Application Builder 4.3.9 (#35085)
支持 D401 (#34932, #34933)
使用 requires_access 检查 DAG 的读取权限,而不是显式检查 (#34940)
弃用从 airflow 延迟导入
AirflowException
(#34541)在映射内容用例上重构视图工具 (#34638)
在
/airflow/www
中将postcss
从8.4.25 升级到 8.4.31
(#34770)将 Sqlalchemy 查询重构为 2.0 风格 (#34763, #34665, #32883, #35120)
更改为 pandas 序列化器中的 I/O 延迟加载 (#34684)
在示例中使用
airflow.models.dag.DAG
(#34617)在核心中使用 airflow.exceptions.AirflowException (#34510)
检查请求中传递的 dag_ids 是否一致 (#34366)
重构代码以使其更好 (#34278, #34113, #34110, #33838, #34260, #34409, #34377, #34350)
暂停 qubole 提供程序 (#33889)
为 Google ADS 生成 Python API 文档 (#33814)
改进模块中的导入 (#33812, #33811, #33810, #33806, #33807, #33805, #33804, #33803, #33801, #33799, #33800, #33797, #33798, #34406, #33808)
将 Elasticsearch 升级到 8 (#33135)
仅文档更改¶
向文档添加对选项卡(和其他 UX 组件)的支持 (#36041)
用图表生成的图替换 Airflow 的架构图 (#36035)
添加描述 DAG 作者能力的安全模型的部分 (#36022)
增强僵尸任务的文档 (#35825)
在文档中反映数据库后端版本删除/添加支持 (#35785)
关于强制任务参数的更多详细信息 (#35740)
在 .airflowignore 文档中指示使用
re2
正则表达式引擎。 (#35663)更新
best-practices.rst
(#35692)更新
dag-run.rst
以提及 Airflow 通过 croniter 对扩展 cron 语法的支持 (#35342)更新
webserver.rst
以包含有关支持的 OAuth2 提供程序的信息 (#35237)将 dag_run 添加回文档 (#35142)
修复
rst
代码块格式 (#34708)向具体 TaskFlow 示例添加类型 (#33417)
添加从 TaskFlow 任务访问上下文变量的具体示例 (#33296)
修复安全文档中的链接 (#33329)
Airflow 2.7.3 (2023-11-06)¶
重大更改¶
没有重大更改。
错误修复¶
修复映射任务组中任务的过早评估 (#34337)
在 REST API 中添加缺失的 TriggerRule 值 (#35194)
修复 dagrun 创建失败时调度程序崩溃循环的问题 (#35135)
修复使用
codemirror
和额外参数的测试连接 (#35122)修复自 v1.3.0 中的 BC 以来的 cron-descriptor 使用 (#34836)
修复基于类的侦听器的
get_plugin_info
。 (#35022)一些 dag_run 和 task_instance 端点的改进/修复 (#34942)
修复 Web 服务器主页中的 DAG 计数过滤器 (#34944)
当 ~ 作为 dag_id 提供时,仅返回可读 DAG 的 TI (#34939)
修复守护程序模式下的触发器线程崩溃 (#34931)
修复错误的插件架构 (#34858)
在 TimeSensorAsync 中使用 DAG 时区 (#33406)
如果任何任务处于
upstream_failed
状态,则将具有all_skipped
触发规则的任务标记为skipped
(#34392)向只读字段添加只读验证 (#33413)
其他/内部¶
改进测试框架以分离数据库和非数据库测试 (#35160, #35333)
向我们的测试添加 pytest db_test 标记 (#35264)
添加 pip 缓存以加快构建速度 (#35026)
将
pendulum
要求上限为<3.0
(#35336)将
sentry_sdk
限制为1.33.0
(#35298)修复测试中模拟 processor_agent 的细微错误 (#35221)
在
/airflow/www
中将@babel/traverse
从7.16.0 升级到 7.23.2
(#34988)在
/airflow/www
中将undici
从5.19.1 升级到 5.26.3
(#34971)从
SchedulerJobRunner
中删除未使用的集 (#34810)删除有关
max_tis per query > parallelism
的警告 (#34742)通过将一些模块移动到类型检查块中,改进 Airflow 核心中的模块导入 (#33755)
修复测试以响应 Python 3.12 在 sentry-sdk 中处理 utcnow (#34946)
添加
connexion<3.0
上限 (#35218)将 Airflow 限制为
< 3.12
(#35123)更新 moto 版本 (#34938)
将 WTForms 限制为低于
3.1.0
(#34943)
仅文档更改¶
修复 Airflow 文档中的变量替换 (#34462)
在
conn.extras
中添加了默认值示例 (#35165)更新 datasets.rst,其中运行示例代码存在问题 (#35035)
从推荐的 MySQL 驱动程序中删除
mysql-connector-python
(#34287)修复任务依赖关系
set_downstream
示例中的语法错误 (#35075)更新文档以启用测试连接 (#34905)
更新 docs errors.rst - 提及 Sentry “传输” 配置选项 (#34912)
更新 dags.rst,将 SubDag 弃用说明放在 SubDag 节标题之后 (#34925)
添加有关在自定义机密后端中获取变量和配置的信息 (#34834)
更详细地记录 BaseExecutor 接口,以帮助用户编写自定义执行程序 (#34324)
修复
airflow_local_settings.py
模板的断开链接 (#34826)修复 params.rst 中 python_callable 函数赋值上下文 kwargs 示例 (#34759)
在 TaskFlow 示例中添加缺失的 multiple_outputs=True 参数 (#34812)
删除提供程序部分名称中多余的
'>'
(#34813)修复额外链接文档中的导入 (#34547)
Airflow 2.7.2 (2023-10-12)¶
重大更改¶
无重大更改
错误修复¶
检查配置端点中提供的较低值是否敏感 (#34712)
添加对 ZoneInfo 和通用 UTC 的支持,以修复日期时间序列化 (#34683, #34804)
修复在 airflow db migrate 命令期间出现 AttributeError: ‘Select’ object has no attribute ‘count’ 的问题 (#34348)
使修补任务实例的 dry run 可选 (#34568)
修复非确定性日期时间反序列化 (#34492)
使用迭代循环来查找映射的父级 (#34622)
通过检查任何父级
taskgroup
是否已映射来修复 is_parent_mapped 值 (#34587)避免顶级的 airflow 导入以避免循环依赖 (#34586)
向冗长的指标列表添加更多例外 (#34531)
修复 DAG 警告端点权限 (#34355)
修复批量端点中的任务实例访问问题 (#34315)
更正网格视图中显示的错误时间 (#34179)
修复由于
standaloneDagProcessor
模板导致 wwwcluster_activity
视图未加载的问题 (#34274)在“未同步
DAG-level
权限”中设置loglevel=DEBUG
(#34268)使 DAG 验证和触发的参数验证保持一致 (#34248)
确保在选择任何选项卡时显示详细信息面板 (#34136)
修复与
access_control={}
相关的问题 (#34114)修复 CLI 会话中未找到
ab_user
表的问题 (#34120)修复 FAB 相关的日志格式插值 (#34139)
修复
next_run_datasets_summary
端点中的查询错误 (#34143)修复重复标签的 TaskGroup 切换 (#34072)
修复从 UI 清除 TI 所需的权限 (#34123)
在映射的
render_template_fields
中重用_run_task_session
(#33309)修复调度程序逻辑,通过忽略手动运行来规划新的 DAG 运行 (#34027)
为 Flask 操作添加、编辑和删除操作添加缺失的审计日志 (#34090)
从群集活动页面隐藏不相关的 DAG 处理器 (#33611)
删除风车的无限动画,旋转 1.5 秒 (#34020)
使用
version_added
还原提供程序配置的呈现 (#34011)
仅文档更改¶
澄清审计日志权限 (#34815)
添加审计日志用户的说明 (#34814)
在 WSGI 中间件示例中从 FAB 导入
AUTH_REMOTE_USER
(#34721)添加有关将来删除对 MsSQL 作为数据库后端支持的信息 (#34375)
记录如何使用系统的时区数据库 (#34667)
澄清文档中着陆时间的含义 (#34608)
修复动态任务映射文档中的屏幕截图 (#34566)
修复公共接口文档中的类引用 (#34454)
澄清 var.value.get 和 var.json.get 的用法 (#34411)
计划默认值描述 (#34291)
triggered_dataset_event 的文档 (#34410)
添加 DagRun 事件 (#34328)
提供有关触发表单参数类型的表格概述 (#34285)
在核心文档中添加指向 Amazon Provider 配置的链接 (#34305)
在安全模型中添加“安全基础设施”段落 (#34301)
更改指向 SQLAlchemy 1.4 的链接 (#34288)
在安全文档中添加 SBOM 条目 (#34261)
为 XCom 推送和拉取添加更多示例代码 (#34016)
将状态工具添加到公共 Airflow 接口 (#34059)
将 Markdown 样式链接替换为 rst 样式链接 (#33990)
修复指向 “UPDATING.md” 文件的损坏链接 (#33583)
杂项/内部¶
更新 min-sqlalchemy 版本以适应使用的最新功能 (#34293)
修复 SesssionExemptMixin 拼写错误 (#34696)
限制
astroid
版本 < 3 (#34658)如果 DAG 在没有触发器的情况下延迟,则 DAG 测试失败 (#34619)
修复导出的连接输出 (#34640)
在创建新的 Alembic 迁移时不要运行 isort (#34636)
在 PythonVirtualEnvOperator 中弃用数字类型 Python 版本 (#34359)
将
os.path.splitext
重构为Path.*
(#34352, #33669)将类型比较中的 = 替换为 is (#33983)
重构整数除法 (#34180)
重构:简化比较 (#34181)
重构:简化字符串生成 (#34118)
将核心中不必要的字典推导式替换为 dict() (#33858)
为了易于阅读,将“not all”更改为“any” (#34259)
在代码中将 assert 替换为 if...raise (#34250, #34249)
将默认时区移动到 except 代码块 (#34245)
合并核心中类似的 if 逻辑 (#33988)
重构:整合 random 的导入和使用 (#34108)
整合 os.path.* 的导入 (#34060)
在 Airflow 核心中用解包替换序列连接 (#33934)
重构仓库中不需要的 “continue” 跳转 (#33849, #33845, #33846, #33848, #33839, #33844, #33836, #33842)
从
pyproject.toml
中删除 [project] 部分 (#34014)如果可能,将 try 移动到 Airflow 核心中的循环外部 (#33975)
在核心中查找正值时用 any 替换循环 (#33985)
不要创建我们不需要的列表 (#33519)
从核心中删除无用的字符串连接 (#33969)
向 pre-commit 添加 TCH001 和 TCH002 规则,以检测并移动类型检查模块 (#33865)
将 cancel_trigger_ids 添加到批处理中的 to_cancel 出队 (#33944)
在解析统计信息 Datadog 标签时避免创建不必要的列表 (#33943)
在核心中当键未使用时,用 dict.values 替换 dict.items (#33940)
用推导式替换 lambda (#33745)
通过将一些模块放入类型检查块来改进 Airflow 核心中的模块导入 (#33755)
重构:删除未使用的状态 - SHUTDOWN (#33746, #34063, #33893)
重构:使用原地 .sort() (#33743)
在 Airflow 核心中使用文字字典而不是调用 dict() (#33762)
删除不必要的 map 并在 Airflow 核心中使用列表重写它 (#33764)
在 Airflow 核心中用 def 方法替换 lambda (#33758)
在 fab_security 管理器中用
isinstance
替换类型函数 (#33760)在所有 Airflow 模块中用双引号替换单引号 (#33766)
将同一个对象的多个
isinstance
调用合并为单个调用 (#33767)在核心中使用具有多个上下文的单个语句,而不是嵌套语句 (#33769)
重构:使用 f-string (#33734, #33455)
重构:使用 random.choices (#33631)
使用
str.splitlines()
拆分行 (#33592)重构:删除无用的 str() 调用 (#33629)
重构:改进重复项的检测和列表排序 (#33675)
简化
len()
的条件 (#33454)
Airflow 2.7.1 (2023-09-07)¶
重大更改¶
CronTriggerTimetable 在尝试跳过运行时现在不那么激进 (#33404)¶
当设置 catchup=False
时,如果调度程序在触发上一次运行后没有立即查询时间表,CronTriggerTimetable 不再跳过运行。
这在大多数情况下不应影响调度,但如果暂停取消暂停 DAG 以手动跳过运行,则可能会更改行为。以前,时间表(使用 catchup=False
)仅在取消暂停 DAG 后才开始运行,但通过此更改,调度程序会尝试稍稍回溯以调度涵盖 DAG 暂停期间部分时段的先前运行。这意味着您需要将 DAG 保持暂停状态更长时间(即,让整个 cron 周期过去)才能真正跳过运行。
请注意,这也是各种其他基于 cron 的调度工具(如 anacron
)所表现出的行为。
conf.set()
现在不区分大小写,以匹配 conf.get()
的行为 (#33452)¶
此外,如果 conf.get()
使用非字符串参数,现在会中断。
conf.set(section, key, value)
过去区分大小写,即 conf.set("SECTION", "KEY", value)
和 conf.set("section", "key", value)
被存储为两个不同的配置。这与 conf.get(section, key)
的行为不一致,后者总是将 section 和 key 转换为小写。
因此,在 section 或 key 中使用大写字符设置的配置选项无法访问。这就是为什么我们现在也在 conf.set
中将 section 和 key 转换为小写的原因。
我们还稍微更改了 conf.get()
的行为。它过去允许 section 或 key 中存在非字符串对象。现在这样做会导致异常。例如,conf.get("section", 123)
需要替换为 conf.get("section", "123")
。
Bug 修复¶
确保任务等待正在运行的间接设置 (#33903)
遵守核心异步传感器的“soft_fail” (#33403)
区分 0 和未设置为默认参数值 (#33965)
如果未找到变量,则从 Variable PATCH API 引发 404 (#33885)
修复
MappedTaskGroup
任务不遵循上游依赖关系 (#33732)如果需要查询结果的第一个值,则添加 limit 1 (#33672)
修复 UI DAG 计数(包括已删除的 DAG) (#33778)
修复清理僵尸 RESTARTING 任务 (#33706)
SECURITY_MANAGER_CLASS
应该引用类,而不是字符串 (#33690)在安全管理器中添加回
get_url_for_login
(#33660)修复
2.7.0 db
迁移作业错误 (#33652)在模板中设置上下文 (#33645)
如果已定义,则将 DAG 定义的 access_control 视为权威 (#33632)
尝试删除存档表之前绑定引擎 (#33622)
如果没有设置名字和姓氏,则添加回退 (#33617)
在 TIS 持续时间计算中在
groupby
之前对数据进行排序 (#33535)当没有 dagrun 时,停止向渲染的模板 UI 添加值 (#33516)
在 Web 服务器视图中解析日期时将 strict 设置为 True (#33512)
在自定义 SA 类型中使用
dialect.name
(#33503)当
end_date
小于utcnow
时,不要返回正在进行的 dagrun (#33488)修复
formatDuration
方法中的错误 (#33486)使
conf.set
不区分大小写 (#33452)允许时间表稍微错过追赶截止日期 (#33404)
当调用
poke
时,遵守soft_fail
参数 (#33401)创建一个新方法用于恢复任务,以便为运算符实现特定逻辑 (#33424)
修复 DagFileProcessor 干扰其
processor_subdir
之外的 DAG 的问题 (#33357)删除 Provider 视图中不必要的
<br>
文本 (#33326)当 ExternalTaskSensor 在可延迟模式下运行时,遵守
soft_fail
参数 (#33196)修复 Param 类的默认值处理和序列化 (#33141)
在添加之前,检查动态添加的索引是否在表架构中 (#32731)
修复在使用
expand_kwargs
方法时渲染映射参数的问题 (#32272)修复 Python 3.8 的 celery 和 opentelemetry 的依赖关系 (#33579)
杂项/内部¶
恢复
Pydantic
1 兼容性 (#34081, #33998)对 PyPI 使用 README.md 的精简版本 (#33637)
升级到
Pydantic
2 (#33956)在 Airflow 的 setup.py 中重新组织
devel_only
额外内容 (#33907)将
FAB
提升到4.3.4
,以修复过滤器的问题 (#33931)将
sqlalchemy
的最低版本要求提高到1.4.24
(#33892)更新配置文件中配置的 version_added 字段 (#33509)
将
OrderedDict
替换为普通字典 (#33508)整合 itertools 的导入和使用 (#33479)
静态检查修复 (#33462)
从 datetime 导入 utc 并规范其导入 (#33450)
D401 支持 (#33352, #33339, #33337, #33336, #33335, #33333, #33338)
修复一些缺失的类型提示 (#33334)
D205 支持 - 遗留问题 (#33301, #33298, #33297)
重构:简化代码 (#33160, #33270, #33268, #33267, #33266, #33264, #33292, #33453, #33476, #33567, #33568, #33480, #33753, #33520, #33623)
修复关于
orm_mode
重命名的Pydantic
警告 (#33220)将 MySQL 8.1 添加到支持的版本中 (#33576)
删除版本低于 2 的
Pydantic
限制 (#33507)
仅文档更改¶
添加文档解释 template_ext(以及如何覆盖它)(#33735)
解释用户如何检查 Python 代码是否为顶层代码 (#34006)
阐明 DAG 作者也可以在 DAG 文件处理器中运行代码 (#33920)
修复模块管理页面中的断开链接 (#33499)
修复 secrets 后端文档 (#33471)
修复 base_log_folder 的配置描述 (#33388)
Airflow 2.7.0 (2023-08-18)¶
重大更改¶
删除对 Python 3.7 的支持 (#30963)¶
目前,Python 社区不再支持 Python 3.7。因此,要使用 Airflow 2.7.0,您必须确保您的 Python 版本为 3.8、3.9、3.10 或 3.11。
旧的图形视图已删除 (#32958)¶
旧的图形视图已删除。现在,新的图形视图是默认视图。
如果 DAG 中未定义任何参数,则在 Web UI 中跳过触发 UI 表单 (#33351)¶
如果您使用 dag_run.conf
字典和 Web UI JSON 条目来运行您的 DAG,您应该
启用新的配置
show_trigger_form_if_no_params
以恢复旧的行为
“db init”、“db upgrade”命令和“[database] load_default_connections”配置选项已弃用 (#33136)。¶
相反,您应该使用“airflow db migrate”命令来创建或升级数据库。此命令不会创建默认连接。为了创建默认连接,您需要在运行“airflow db migrate”后显式运行“airflow connections create-default-connections”。
对于 SMTP SSL 连接,上下文现在使用“default”上下文 (#33070)¶
“default”上下文是 Python 的 default_ssl_contest
,而不是之前使用的“none”。default_ssl_context
在安全性和兼容性之间提供了平衡,但在某些情况下,当证书过旧、自签名或配置错误时,它可能无法工作。这可以通过在 Airflow 的“email”配置中设置“ssl_context”来配置。
将其设置为“none”会恢复 Airflow 2.6 及更早版本中使用的“none”设置,但由于安全原因不建议这样做,因为此设置会禁用证书验证并允许 MITM 攻击。
禁用默认允许在 UI、API 和 CLI 中测试连接 (#32052)¶
出于安全原因,默认情况下在 Airflow UI、API 和 CLI 中禁用测试连接功能。可以通过 Airflow 配置 (airflow.cfg
) 的 core
部分中的 test_connection
标志来控制此功能的可用性。也可以通过环境变量 AIRFLOW__CORE__TEST_CONNECTION
来控制。
此配置参数接受以下值:1. Disabled
:禁用测试连接功能并禁用 UI 中的“测试连接”按钮。
这也是 Airflow 配置中设置的默认值。2. Enabled
:启用测试连接功能并激活 UI 中的“测试连接”按钮。
3. Hidden
:禁用测试连接功能并隐藏 UI 中的“测试连接”按钮。
有关用户功能的更多信息,请参阅文档:https://airflow.apache.org/docs/apache-airflow/stable/security/security_model.html#capabilities-of-authenticated-ui-users 强烈建议您在确保只有高度信任的 UI/API 用户具有“编辑连接”权限之前不要启用该功能。
xcomEntries
API 默认禁用对 deserialize
标志的支持 (#32176)¶
出于安全原因,/dags/*/dagRuns/*/taskInstances/*/xcomEntries/*
API 端点现在禁用 deserialize
选项,以反序列化 Web 服务器中的任意 XCom 值。为了向后兼容,服务器管理员可以将 [api] enable_xcom_deserialize_support
配置设置为 True 以启用该标志并恢复向后兼容性。
但是,强烈建议您不要启用该功能,而是在客户端执行反序列化。
更改默认 Celery 应用程序名称 (#32526)¶
Celery 应用程序的默认名称从 airflow.executors.celery_executor
更改为 airflow.providers.celery.executors.celery_executor
。
- 您应该更改您的配置和健康检查命令以使用新名称
在配置中(
celery
部分中的celery_app_name
配置),使用airflow.providers.celery.executors.celery_executor
在您的健康检查命令中使用
airflow.providers.celery.executors.celery_executor.app
scheduler.max_tis_per_query
的默认值从 512 更改为 16 (#32572)¶
此更改有望使调度程序更具响应性。
scheduler.max_tis_per_query
需要低于 core.parallelism
。如果之前两者都保留为默认值,则 scheduler.max_tis_per_query
的有效默认值为 32(因为它被限制为 core.parallelism
)。
为了使行为尽可能接近旧配置,可以将 scheduler.max_tis_per_query = 0
,在这种情况下,它将始终使用 core.parallelism
的值。
一些执行器已移至相应的提供程序 (#32767)¶
为了使用执行器,您需要安装提供程序
对于 Celery 执行器,您需要安装
apache-airflow-providers-celery
包 >= 3.3.0对于 Kubernetes 执行器,您需要安装
apache-airflow-providers-cncf-kubernetes
包 >= 7.4.0对于 Dask 执行器,您需要安装任何版本的
apache-airflow-providers-daskexecutor
包
您也可以通过安装带有 [celery]
、[cncf.kubernetes]
、[daskexecutor]
附加功能的 airflow 来实现此目的。
将其镜像基于 apache/airflow
参考镜像(非精简)的用户应该不会受到影响 - 基本参考镜像已安装所有三个提供程序。
改进更改¶
仅 PostgreSQL 的改进:在 taskinstance 表上添加索引 (#30762)¶
此索引似乎在具有数千万行此类数据的设置中具有很大的积极作用。
新功能¶
将 OpenTelemetry 添加到 Airflow (AIP-49)
触发按钮 - 实现 AIP-50 的第 2 部分 (#31583)
从核心 Airflow 中删除执行器耦合 (AIP-51)
自动设置和拆卸任务 (AIP-52)
Airflow 中的 OpenLineage (AIP-53)
实验性:在 DAG 解析时调用时,向 Variable 和 Connection 添加缓存 (#30259)
使池能够考虑延迟的任务 (#32709)
允许为 SMTP 连接选择 SSL 上下文 (#33070)
新的甘特图选项卡 (#31806)
从提供者加载插件 (#32692)
添加
BranchExternalPythonOperator
(#32787, #33360)添加在提供者中存储配置描述的选项 (#32629)
引入心跳参数以允许
Per-LocalTaskJob
配置 (#32313)添加执行器发现和文档 (#32532)
为作业状态常量添加 JobState (#32549)
添加配置以禁用 “反序列化” XCom API 标志 (#32176)
在 Web UI 中按自定义操作符名称显示任务实例 (#31852)
添加 default_deferrable 配置 (#31712)
引入
AirflowClusterPolicySkipDag
异常 (#32013)使用
reactflow
构建数据集图 (#31775)添加一个选项,从数据库加载 DAG 以运行命令任务 (#32038)
添加不需要匹配列表的
chain
版本 (#31927)在 UI 中使用 operator_name 而不是 task_type (#31662)
向
airflow db check
添加--retry
和--retry-delay
(#31836)允许跳过任务状态 task_instance_schema.py (#31421)
为 Celery result_backend 引擎选项添加新配置 (#30426)
UI 添加集群活动页面 (#31123, #32446)
为常用操作添加键盘快捷键 (#30950)
向 Kubernetes 执行器日志添加更多信息 (#29929)
添加对配置自定义 Alembic 文件的支持 (#31415)
在 UI 上为 DAG 添加运行和失败状态选项卡 (#30429)
为触发表单添加多选、建议和标签 (#31441)
使 Web 服务器配置可自定义 (#29926)
在网格视图中将 DAG 代码呈现为选项卡 (#31113)
添加 REST 端点以获取配置选项 (#31056)
在 get config REST API 中添加
section
查询参数 (#30936)创建指标以跟踪
Scheduled->Queued->Running
任务状态转换时间 (#30612)将任务组标记为成功/失败 (#30478)
添加 CLI 命令以列出提供者触发信息 (#30822)
为 DAG 添加快速失败功能 (#29406)
改进¶
改进图表嵌套逻辑 (#33421)
触发器的可配置健康检查阈值 (#33089, #33084)
为批处理任务实例 API 端点添加 dag_run_ids 和 task_ids 过滤器 (#32705)
确保在取消映射时填充 DAG 级别的引用 (#33083)
在触发表单 UI 中添加对不同数据类型数组的支持 (#32734)
始终显示甘特图和代码选项卡 (#33029)
将监听器成功钩子移动到 SQLAlchemy 提交之后 (#32988)
将
db upgrade
重命名为db migrate
并添加connections create-default-connections
(#32810, #33136)删除旧甘特图并重定向到网格视图甘特图选项卡 (#32908)
根据选定的任务调整图表缩放 (#32792)
在呈现模板后调用监听器 on_task_instance_running (#32716)
在图表视图任务实例工具提示中显示 execution_date (#32527)
允许提供者贡献配置 (#32604, #32755, #32812)
减少每次查询的最大 TIs 默认值,强制执行
<=
并行度 (#32572)在 Airflow 配置对象中存储配置描述 (#32669)
使用
isdisjoint
代替not intersection
(#32616)加快任务组的叶子和根的计算 (#32592)
Kubernetes 执行器加载时间优化 (#30727)
如果 DAG 不可调度,则保存 DAG 解析时间 (#30911)
更新健康检查端点以包含
dag_processor
状态。 (#32382)禁用默认值,允许在 UI、API 和 CLI 中测试连接 (#32052, #33342)
修复调度器部分下的配置变量类型 (#32132)
允许按字母顺序对网格视图进行排序 (#32179)
将主机名添加到触发器指标
[triggers.running]
(#32050)改进 DAG ORM 清理代码 (#30614)
TriggerDagRunOperator
:向template_fields
添加wait_for_completion
(#31122)在新标签页中打开将我们带离 Airflow UI 的链接 (#32088)
仅在未选择任务时显示代码选项卡 (#31744)
为 Celery 和 Dask 证书配置添加描述 (#31822)
PythonVirtualenvOperator
在警报中记录终止日志 (#31747)将所有 DAG 详细信息迁移到现有的网格视图 DAG 详细信息面板 (#31690)
添加图表以帮助可视化计时器指标 (#30650)
Celery 执行器加载时间优化 (#31001)
将
airflow db
命令的代码样式更新为 SQLAlchemy 2.0 样式 (#31486)在 FIPS 环境中将 md5 的使用标记为“不用于安全性” (#31171)
添加对 serde 的 Pydantic 支持 (#31565)
启用在 DagRun 和 TaskInstance 的备注列中进行搜索 (#31455)
通过为 dag_run 添加新的索引想法来节省调度器执行时间 (#30827)
通过缓存 DAG 来节省调度器执行时间 (#30704)
支持在 Web UI 中按上次运行日期对 DAG 进行排序 (#31234)
改进 Job 和 JobRunners 的类型提示 (#31240)
添加按 created_date 排序的逻辑以获取触发器 (#31151)
删除访问控制文档中的 DAG.can_create,调整测试夹具 (#30862)
将 Celery 日志拆分为 stdout/stderr (#30485)
将指标客户端和
validators
解耦到它们自己的模块中 (#30802)在
get_log
API 中添加了有关分页的描述 (#30729)优化调度映射任务的性能 (#30372)
添加哨兵传输配置选项 (#30419)
在反序列化错误时提供更好的消息 (#30588)
错误修复¶
重置密码时删除用户会话 (#33347)
甘特图:
如果与 DAG 运行的开始/结束时间不同,则使用最早/最旧的 ti 日期 (#33215)修复 Python
virtualenv
操作符的virtualenv
检测 (#33223)在尝试
chmod
airflow.cfg
时正确记录遇到的问题 (#33118)将应用程序上下文传递给 webserver_config.py (#32759)
跳过非运行任务尝试的服务日志 (#32561)
修复重新加载 gunicorn 工作程序 (#32102)
修复当
max_active_runs
达到上限时,由于竞争条件而很少触发未来 DagRun 的问题。 (#31414)修复 BaseOperator
get_task_instances
查询 (#33054)修复在日志中使用各种状态枚举值的问题 (#33065)
使用字符串连接为 log_url 前置基本 URL (#33063)
使用操作符样式属性更新图表节点 (#32822)
将 Web 服务器访问被拒绝警告附加为可配置的 (#33022)
仅在用户可以编辑时加载任务操作模式 (#32992)
OpenAPI 规范修复
$ref
旁边的可为空属性 (#32887)使
PythonOperator
子类的装饰器扩展其装饰器 (#32845)修复
PythonVirtualenvOperator
中检查是否安装了virtualenv
的问题 (#32939)在 is_container() 中检查
__iter__
之前,先解包代理 (#32850)通过使用任务处理程序的 base_log_folder 来覆盖基本日志文件夹 (#32781)
捕获 run_job 中的任意异常,以防止僵尸调度程序 (#32707)
修复动态任务的 depends_on_past 工作 (#32397)
对 extra_links 进行排序,以便在 UI 中获得可预测的顺序。 (#32762)
修复前缀组错误图表 (#32764)
修复 dagruns 的错误删除逻辑 (#32684)
修复 prune_dict 中的错误,即使在严格模式下,也会删除空字典和列表 (#32573)
添加显式浏览器列表并更正空白目标链接的 rel (#32633)
当 multiple_outputs 为 True 时,处理返回的 None (#32625)
当 ShortCircuitOperator 条件为假并且没有下游任务时,修复返回的值 (#32623)
当 ShortCircuitOperator 条件为假时,修复返回的值 (#32569)
修复
dagRunTimeout
的呈现 (#32565)修复
/blocked
端点的权限 (#32571)错误修复,防止在触发 DAG 时强制取消暂停 (#32456)
修复
cli.dags.trigger
命令输出中的数据间隔 (#32548)从 airflow 连接表单中删除
whitespaces
(#32292)为传感器的适用参数添加 timedelta 支持 (#32515)
修复 API 中
readonly
属性上的错误默认值 (#32510)将 xcom map_index 添加为 xcom 端点的过滤器 (#32453)
在使用自定义时间表时修复 CLI 命令 (#32118)
使用 WebEncoder 在 DagRun 的列表视图中对 DagRun.conf 进行编码 (#32385)
修复 skip_all_except 方法的逻辑 (#31153)
确保动态任务组内的动态任务仅标记 (#32354)
处理 webserver.expose_config 设置为非敏感而非布尔值的情况 (#32261)
为处理由数据库网络问题导致的过程终止添加重试功能 (#31998)
为 sla_miss_callback 调整通知器 (#31887)
修复 XCOM 视图 (#31807)
修复在 dags.html 初始加载时“按标签筛选 DAG”闪烁的问题 (#31578)
修复扩展
resizer
不会扩展网格视图的问题 (#31581)修复 MappedOperator-BaseOperator attr 同步检查 (#31520)
始终将命名
type_
参数传递给 drop_constraint (#31306)修复迁移中错误的
drop_constraint
调用 (#31302)解决重新设计的网格视图的问题 (#31232)
支持
requirepass
Redis 哨兵 (#30352)修复调用 get
/config
时 Web 服务器崩溃的问题 (#31057)
其他/内部¶
修改 pathspec 版本限制 (#33349)
重构:简化
dag_processing
中的代码 (#33161)目前将
Pydantic
限制为< 2.0.0
(#33235)重构:简化模型中的代码 (#33181)
将 elasticsearch 组添加到 2.7 之前的默认值 (#33166)
重构:简化 airflow/cli 中的字典操作 (#33159)
移除多余的 dict.keys() 调用 (#33158)
在 pre-commits 中将 ruff 升级到最新的 0.0.282 版本 (#33152)
将 openlineage 配置移动到 provider (#33124)
在 Airflow 执行器中将 State 替换为 TaskInstanceState (#32627)
去除 Python 2 的数字遗留代码 (#33050)
移除旧的 dag 代码 (#33058)
移除旧的任务实例模态框 (#33060)
移除旧的图形视图 (#32958)
将 CeleryExecutor 移动到 celery provider (#32526, #32628)
将所有 k8S 类移动到
cncf.kubernetes
provider (#32767, #32891)重构存在性检查 SQL 为辅助函数 (#32790)
将 Dask 执行器提取到新的 daskexecutor provider (#32772)
移除 atlas 配置定义 (#32776)
添加 Redis 任务处理器 (#31855)
将 webserver 的配置写入移动到 main (webserver limited) (#32766)
改进 Airflow API 端点中获取查询计数的方式 (#32630)
移除 click 上限 (#32634)
添加 D400
pydocstyle
检查 - 仅限核心 Airflow (#31297)D205 支持 (#31742, #32575, #32213, #32212, #32591, #32449, #32450)
将 word-wrap 从
1.2.3 升级到 1.2.4
在/airflow/www
中 (#32680)强类型化所有单状态枚举值 (#32537)
更多强类型化状态转换 (#32521)
utils/db.py 中的 SQL 查询改进 (#32518)
将 semver 从
6.3.0 升级到 6.3.1
在/airflow/www
中 (#32506)将 jsonschema 版本升级到
4.18.0
(#32445)将
stylelint
从13.13.1 升级到 15.10.1
在/airflow/www
中 (#32435)将 tough-cookie 从
4.0.0 升级到 4.1.3
在/airflow/www
中 (#32443)升级 flask-appbuilder (#32054)
支持
Pydantic
2 (#32366)限制 click,直到我们修复 mypy 问题 (#32413)
一些小的清理 (#31890)
用强类型的
enums
替换 State 的使用 (#31735)将 ruff 升级到
0.272
(#31966)当序列化没有名称的可调用对象时,提供更好的错误消息 (#31778)
稍微改进 views 模块 (#31661)
移除
asynctest
(#31664)将 sqlalchemy 查询重构为
2.0
风格 (#31569, #31772, #32350, #32339, #32474, #32645)移除 Python
3.7
支持 (#30963)为预安装的 provider 恢复 min-airflow-version (#31469)
Docstring 改进 (#31375)
改进 SchedulerJobRunner 中的类型提示 (#31285)
将 ruff 升级到
0.0.262
(#30809)升级到 MyPy
1.2.0
(#30687)
仅文档更改¶
阐明安全模型中的 UI 用户类型 (#33021)
在 templates-ref.rst 中添加指向
DAGRun / DAG / Task
的链接 (#33013)添加关于如何测试 DAG 导入错误的文档 (#32811)
清理新的安全页面 (#32951)
清理 Extras 参考页面 (#32954)
更新 Dag 触发 API 和命令文档 (#32696)
在 Airflow 模块和类文档字符串中添加弃用信息 (#32635)
格式化安装文档以提高可读性 (#32502)
修复触发器 HA 文档 (#32454)
向代码示例添加类型注解 (#32422)
记录 cron 和 delta 时间表 (#32392)
更新 index.rst 文档以更正语法 (#32315)
修复 python.py 中的一个小拼写错误 (#31474)
分离并阐明 provider 的策略 (#30657)
修复文档:在 pip install 中添加 "apache" 前缀 (#30681)
Airflow 2.6.3 (2023-07-10)¶
重大更改¶
run_id 的默认允许模式已更改为 ^[A-Za-z0-9_.~:+-]+$
(#32293)。¶
以前,run_id 字符串没有验证。现在有一个验证正则表达式,可以通过在 scheduler
部分配置 allowed_run_id_pattern
来设置。
Bug 修复¶
使用线性时间正则表达式 (#32303)
修复触发器存活检查,并为触发器心跳率添加新的配置 (#32123)
捕获触发器初始化失败的异常 (#31999)
在连接编辑表单中隐藏 extra 中的敏感值 (#32309)
清理
DagRun.run_id
并允许灵活性 (#32293)添加触发器取消日志 (#31757)
修复任务视图中显示的尝试次数 (#32361)
重试渲染字段的偶尔死锁的事务 (#32341)
修复导入失败时 LazyDictWithCache 的行为 (#32248)
从 Job 中移除
executor_class
- 修复自定义执行器的回填 (#32219)修复有问题的单例实现 (#32218)
使用
mapIndex
来显示每个映射任务的额外链接。 (#32154)确保如果异步线程失败,则主触发器线程退出 (#32092)
使用
re2
来匹配不受信任的正则表达式 (#32060)在渲染字段视图中渲染列表项 (#32042)
修复序列化 dag 中
dag_dependencies
的哈希处理 (#32037)如果 XComArg 在 multiple_outputs Task 中解析失败,则返回
None
(#32027)检查 url 中的查询参数以及 kwargs 中的 DAG ID (#32014)
当找不到映射索引时,在
rendered-templates
中显示错误消息而不是失败 (#32011)修复当当前执行日期没有任务组 TIs 时
ExternalTaskSensor
的问题 (#32009)修复触发器模板中的数字参数 html 类型 (#31980, #31946)
修复屏蔽嵌套变量字段 (#31964)
修复映射任务中
operator_extra_links
属性的序列化 (#31904)解码旧式嵌套 Xcom 值 (#31866)
在 webserver base_url 中添加对尾部斜杠的检查 (#31833)
修复当主机包含方案时的连接 URI 解析 (#31465)
修复使用
xcom_pull
和inlets
时数据库会话关闭的问题 (#31128)修复在测试 dag 期间任务失败时未调用 DAG 的
on_failure_callback
的问题。 (#30965)修复当使用
ExternalPythonOperator
和调试日志级别时 airflow 模块版本检查的问题 (#30367)
杂项/内部¶
修复类型存根中的
task.sensor
注解 (#31954)将
Pydantic
限制为< 2.0.0
,直到我们解决2.0.0
不兼容问题 (#32312)修复
Pydantic
2 对模型定义的挑剔 (#32307)
仅文档更改¶
添加有关标签创建和清理的说明 (#32406)
对文档进行小更新 (#32369, #32315, #32310, #31794)
阐明 Listener API 行为 (#32269)
为询问需求的的用户添加信息 (#32262)
在模板参考中添加指向 DAGRun / DAG / Task 的链接 (#32245)
添加注释以警告潜在的错误修复 (#32230)
添加一个注释,说明我们需要重新启动触发器以反映任何触发器更改 (#32140)
添加指向教程文档的缺失超链接 (#32105)
添加了可延期和不可延期运算符之间的差异 (#31840)
添加注释,解释特殊 “触发结束” 日志消息的必要性 (#31812)
关于插件更新的文档更新。 (#31781)
修复安全文档中的 SemVer 链接 (#32320)
更新 Airflow 的安全模型 (#32098)
更新 Airflow 核心中重组文档的引用 (#32282)
分离高级日志配置 (#32131)
在显著位置为 Airflow 添加
™
(#31977)
Airflow 2.6.2 (2023-06-17)¶
重大更改¶
没有重大更改。
Bug 修复¶
将 TaskInstance 的更新级联到 TaskMap 表 (#31445)
修复 Kubernetes 执行器检测已删除的 pod (#31274)
为 mssql 的迁移方法使用关键字参数 (#31309)
控制从 airflow.cfg 中的 extra 中驱动程序配置的允许性 (#31754)
修复 openapi/v1.yaml 中损坏的链接 (#31619)
使用不同的值测试连接时,隐藏旧的警报框 (#31606)
将 TriggererStatus 添加到 OpenAPI 规范 (#31579)
解决当 Details 折叠时 Grid 不会取消折叠的问题 (#31561)
修复标签的排序 (#31553)
当跳过下游任务时,将缺少的
map_index
添加到 xcom 密钥 (#31541)修复 airflow users delete CLI 命令 (#31539)
在 Airflow
/health
端点中包含触发器运行状况状态 (#31529)移除已为此任务注册的依赖项警告 (#31502)
使用 kube_client 而不是默认的 CoreV1Api 删除 pod (#31477)
确保基本传感器中的最小退避至少为 1 (#31412)
修复动态任务映射的
max_active_tis_per_dagrun
(#31406)修复在 DAG 中预导入模块时出错处理的问题 (#31401)
修复下拉列表默认值并调整教程以使用 42 作为默认值进行验证 (#31400)
修复当清除从普通到映射的任务运行时崩溃的问题 (#31352)
使 BaseJobRunner 成为作业类的泛型 (#31287)
修复 DAG 审计日志上的
url_for_asset
回退和 404 (#31233)不要显示未定义的执行日期 (#31196)
在日志加载时添加了微调器活动 (#31165)
将 rediss 添加到支持的 URL 方案列表中 (#31028)
通过跳过 “不可调度” 的 DAG 来优化调度程序 (#30706)
在搜索已排队的 dag_runs 时节省调度器执行时间 (#30699)
修复 ExternalTaskSensor,使其能与任务组正确工作 (#30742)
修复清除访问控制时 DAG.access_control 无法同步的问题 (#30340)
修复最新的 Python 3.8 和 3.9 中 get_safe_url 测试失败的问题 (#31766)
修复 POST 用户端点的类型提示 (#31767)
修复嵌套组默认参数的错误更新 (#31776)
修复在嵌套任务组中覆盖
default_args
的问题 (#31608)将
[secrets] backend_kwargs
标记为敏感配置 (#31788)执行器事件并非总是“已退出” (#30859)
验证连接 ID (#31140)
杂项/内部¶
添加 Python 3.11 支持 (#27264)
用标准 csv 库替换 unicodecsv (#31693)
将 unicodecsv 作为 Airflow 的依赖项重新引入 (#31814)
从 get_flat_relative_ids 中删除 found_descendents 参数 (#31559)
修复外部任务触发器中的类型提示 (#31490)
更好地措辞 DAG 的下一个和最后运行列 (#31467)
跳过带有 :meta private: 的自动文档内容 (#31380)
为 sql_alchemy_connect_args conf 添加示例 (#31332)
将 dask 的上限绑定转换为排除 (#31329)
将 FAB 升级到 4.3.1 (#31203)
在 airflow dags list-jobs CLI 中为 –state 标志添加 metavar 和 choices,以建议有效的状态参数 (#31308)
临时目录日志仅使用一行 (#31170)
重述 setup.py 中的注释 (#31312)
在日志记录中为所有者添加全名 (#30185)
使连接 ID 验证在接口中保持一致 (#31282)
为敏感配置项使用单一真相来源 (#31820)
仅文档更改¶
为 _read_remote_logs 添加文档字符串和签名 (#31623)
删除有关触发器仅限 3.7+ 的说明 (#31483)
修复版本支持信息 (#31468)
向文档示例添加缺少的 BashOperator 导入 (#31436)
修复由不正确的初始参数引起的 task.branch 错误 (#31265)
更新回调文档(错误和上下文)(#31116)
为使用非 TaskFlow 运算符的动态任务映射添加示例 (#29762)
一些文档修复 - 链接、语法和措辞 (#31719)
在更多地方添加有关将 airflow 添加到 pip install 的描述 (#31448)
修复 docker 构建文档中的表格格式 (#31472)
更新约束安装的文档 (#31882)
Airflow 2.6.1 (2023-05-16)¶
重大更改¶
错误修复¶
修复 SchedulerJob 的健康检查阈值计算 (#31277)
修复 k8s 执行器 pod 尾部的时间戳解析失败 (#31175)
确保 DAG 处理器作业行在
job_type
列中具有填充值 (#31182)修复
api_client_retry_configuration
的节名称引用 (#31174)确保 KPO 正确运行 pod 突变钩子 (#31173)
从 OpenLineage 插件中删除关于编辑的令人担忧的日志消息 (#31149)
将
interleave_timestamp_parser
配置移动到日志记录部分 (#31102)确保在未找到本地或远程日志时检查 worker 是否有服务的日志 (#31101)
修复 taskinstance 文件中的
MappedTaskGroup
导入 (#31100)格式化 DagBag.dagbag_report() 输出 (#31095)
在任务详细信息视图中屏蔽任务属性 (#31125)
修复迭代 None 值时的模板错误,并修复参数文档 (#31078)
修复
apache-hive
额外功能,使其安装正确的包 (#31068)修复在预导入 Airflow 模块时 DAG 文件夹中 zip 文件的问题 (#31061)
将 TaskInstanceKey 移动到单独的文件,以修复循环导入 (#31033, #31204)
修复删除带有注释的 DagRuns 和 TaskInstances 的问题 (#30987)
修复
airflow providers get
命令输出 (#30978)修复 OpenAPI 规范中的池模式 (#30973)
添加对包含
pandas.DataFrame
的模板字段的动态任务的支持 (#30943)如果存在,则显式使用传递给“partial”的任务组 (#30933)
修复列表 DAG rest api 中的
order_by
请求 (#30926)在中心对齐任务逻辑中包含节点的高度/宽度 (#30924)
从 dag 触发命令中删除打印 (#30921)
改进新图表中的任务组 UI (#30918)
修复网格视图中的映射状态 (#30916)
修复显示图表的问题 (#30765)
修复 try_number 不同步时回填 KeyError 的问题 (#30653)
重新启用 TaskInstance UI 中的清除和设置状态 (#30415)
防止在清除运行中的 DagRun 中的任务时重置 DagRun 的
state
和start_date
(#30125)
杂项/内部¶
上限绑定 dask,直到他们解决其测试套件中的副作用 (#31259)
在表格中显示受清除影响的任务实例 (#30633)
修复 API 文档中缺少的模型 (#31021)
仅文档更改¶
改进
dag_processing.processes
指标的描述 (#30891)改进快速入门说明 (#30820)
向 FAQ 添加有关缺少任务日志的部分 (#30717)
在 docker compose 中挂载
config
目录 (#30662)更新
might_contain_dag
和metrics_allow_list
的version_added
配置字段 (#30969)
Airflow 2.6.0 (2023-04-30)¶
重大更改¶
文件任务处理程序日志目录和文件的默认权限已更改为“所有者 + 组”可写 (#29506)。¶
默认设置处理需要模拟的情况,并且两个用户(airflow 和模拟用户)都将同一组设置为主组。以前的默认值也是其他用户可写,如果用户希望通过在 logging
部分配置 file_task_handler_new_folder_permissions
和 file_task_handler_new_file_permissions
来选择使用其他用户可写设置。
SLA 回调不再向 dag 处理器管理器的队列添加文件 (#30076)¶
这阻止了 SLA 回调使 dag 处理器管理器永久繁忙。这意味着减少了 CPU,并修复了 SLA 阻止系统看到现有 dag 文件更改的问题。添加了其他指标以帮助跟踪队列状态。
BaseTrigger 中的 cleanup()
方法现在定义为异步(遵循 async/await)模式 (#30152)。¶
对于覆盖 cleanup()
方法并使用同步代码的任何自定义触发器实现,这可能是一个重大更改,但是,在清理中使用同步操作在技术上是错误的,因为该方法是在 Triggerer 的主循环中执行的,并且引入了不必要的延迟,从而影响了其他触发器。此更改不太可能影响任何现有的触发器实现。
计量器 scheduler.tasks.running
不再存在 (#30374)¶
该计量器从未工作过,其值始终为 0。为此指标提供准确的值很复杂,因此已决定删除此计量器比修复它更合理,且无法确定其值的正确性。
将处理排队中卡住的任务的操作整合到新的 task_queued_timeout
配置下 (#30375)¶
处理卡在排队状态的任务的逻辑已整合,并且所有负责使卡住的排队任务超时的配置已弃用并合并到 [scheduler] task_queued_timeout
中。已弃用的配置为 [kubernetes] worker_pods_pending_timeout
、[celery] stalled_task_timeout
和 [celery] task_adoption_timeout
。如果设置了这些配置中的任何一个,则将遵循最长的超时。例如,如果 [celery] stalled_task_timeout
为 1200,并且 [scheduler] task_queued_timeout
为 600,则 Airflow 会将 [scheduler] task_queued_timeout
设置为 1200。
改进更改¶
在配置视图中仅显示运行的配置 (#28892)¶
配置视图现在仅显示正在运行的配置。以前,默认配置显示在顶部,但是否覆盖此默认配置并不明显。随后,未记录的端点 /configuration?raw=true
已弃用,将在 Airflow 3.0 中删除。HTTP 响应现在返回一个额外的 Deprecation
标头。REST API 上的 /config
端点是以编程方式获取 Airflow 配置的标准方法。
ExternalTaskSensor 的显式跳过状态列表 (#29933)¶
ExternalTaskSensor 现在具有显式的 skipped_states
列表
其他更改¶
处理 next_run_calculation 中指数退避时的 OverflowError (#28172)¶
默认情况下,最大重试任务延迟设置为 24 小时(86400 秒)。您可以通过 core.max_task_retry_delay
参数全局更改此设置。
将 Hive 宏移至 provider (#28538)¶
Hive 宏 (hive.max_partition
, hive.closest_ds_partition
) 仅在安装 Hive Provider 时可用。使用这些宏时,请安装 Hive Provider > 5.1.0。
更新应用程序以支持配置 FIPS v2 的缓存哈希方法 (#30675)¶
在 Python 3.9+ 中运行 Airflow 时,对 FIPS 合规性的各种更新。这包括一个新的 Web 服务器选项 caching_hash_method
,用于更改默认的 Flask 缓存方法。
新功能¶
AIP-50 带有灵活用户表单概念的触发 DAG UI 扩展 (#27063,#29376)
当 PythonVirtualenvOperator 任务返回提供的退出代码时跳过该任务 (#30690)
将 skip_exit_code 重命名为 skip_on_exit_code 并允许提供多个代码 (#30692)
将 skip_on_exit_code 也添加到 ExternalPythonOperator (#30738)
为动态任务映射添加
max_active_tis_per_dagrun
(#29094)为 pandas dataframe 添加序列化器 (#30390)
可延迟的
TriggerDagRunOperator
(#30292)添加通过 CLI 获取 DAG 详细信息的命令 (#30432)
添加 ContinuousTimetable 并支持 @continuous schedule_interval (#29909)
允许自定义规则来检查文件是否包含 DAG (#30104)
添加一个新的 Airflow 配置,以指定 Kubernetes 客户端的 SSL ca 证书 (#30048)
Bash 传感器具有显式的重试代码 (#30080)
向网格视图添加筛选任务上游/下游的功能 (#29885)
添加通过 Airflow CLI 测试连接的功能 (#29892)
支持在使用远程日志记录时删除本地日志文件 (#29772)
Blocklist
用于禁用特定的指标标签或指标名称 (#29881)在网格视图中添加一个新的图形 (#29413)
添加数据库
check_migrations
配置 (#29714)为
cli.dags.trigger
添加输出格式参数 (#29224)使 json 和 yaml 在模板中可用 (#28930)
为现有的 Statsd 指标发布事件启用带标签的指标名称 | influxdb-statsd 支持 (#29093)
为
db export-archived
命令添加参数 –yes (#29485)使策略函数可插拔 (#28558)
添加
airflow db drop-archived
命令 (#29309)启用单独的触发器日志记录 (#27758)
在图形视图中实现新的筛选选项 (#29226)
为 ExternalTask 添加触发器 (#29313)
添加将清除的记录导出到 CSV 文件的命令 (#29058)
添加
FileTrigger
(#29265)使用元数据标签发出 DataDog statsd 指标 (#28961)
为数据集添加一些 statsd 指标 (#28907)
为
connections import
CLI 命令添加 –overwrite 选项 (#28738)向 DAG 添加通用的“通知器”概念 (#28569)
添加一个新配置,用于在跳过任务之前等待 past_deps (#27710)
添加 Flink on K8s Operator (#28512)
允许用户通过配置禁用 SwaggerUI (#28354)
在图形中显示映射的任务组 (#28392)
Log FileTaskHandler 以使用 KubernetesExecutor 的 multi_namespace_mode (#28436)
添加一个新配置,用于调整屏蔽的密钥,使其更容易防止日志中的密钥泄漏 (#28239)
使用 CLI 列出特定的配置部分及其值 (#28334)
KubernetesExecutor 的 multi_namespace_mode 可以使用命名空间列表,避免需要集群角色 (#28047)
自动保存并允许恢复最近的 DAG 运行配置 (#27805)
为 cli 添加了 exclude_microseconds (#27640)
改进¶
在 KubernetesExecutor 中将大多数 pod_id 用法重命名为 pod_name (#29147)
更新仅使用 poke 的传感器的无效用法的错误消息 (#30821)
更新调度程序关键部分边缘情况下的日志级别 (#30694)
AIP-51 从核心 Airflow 中移除 Executor 耦合(AIP-51)
在 BashOperator 的跳过逻辑中添加多个退出代码处理 (#30739)
更新了应用程序以支持配置 FIPS v2 的缓存哈希方法 (#30675)
在 DAG 解析之前预加载 airflow 导入以节省时间 (#30495)
改进网格视图中的任务和运行操作
UX
(#30373)通过缓存 group_id 的属性来加快 TaskGroups 的速度 (#30284)
使用会话中提供的引擎 (#29804)
执行器的类型相关导入优化 (#30361)
向代码库添加更多类型提示 (#30503)
始终在安全管理器中使用 self.appbuilder.get_session (#30233)
将 SQLAlchemy
select()
更新为新样式 (#30515)从模型中重构出 xcom 常量 (#30180)
向 DAG 解析错误消息添加异常类名称 (#30105)
将 statsd_allow_list 和 statsd_block_list 重命名为
metrics_*_list
(#30174)改进元组和集合的序列化 (#29019)
使触发器中的清理方法成为异步方法 (#30152)
延迟加载序列化模块 (#30094)
SLA 回调不再向 dag_processing 管理器队列添加文件 (#30076)
将 task.trigger 规则添加到 grid_data (#30130)
通过避免 ORM 来加快日志模板同步速度 (#30119)
将 cli_parser.py 分为两个模块 (#29962)
ExternalTaskSensor 的显式跳过状态列表 (#29933)
向新图形添加任务状态悬停高亮显示 (#30100)
将网格选项卡存储在 url 参数中 (#29904)
使用自定义 Connexion 解析器进行延迟加载 (#29992)
延迟密钥掩码器中的 Kubernetes 导入 (#29993)
延迟 ConnectionModelView 初始化,直到访问它 (#29946)
调度程序,使过时的 DAG 失活阈值可配置,而不是使用 DAG 处理超时 (#29446)
改进网格视图高度计算 (#29563)
避免在配置验证期间导入执行器 (#29569)
使 FileTaskHandler 的权限可由组写入且可配置 (#29506)
在 Airflow CLI 命令的帮助输出中添加颜色 #28789 (#29116)
为 get_dags 端点添加一个参数,以仅列出未暂停的 DAG (#28713)
公开 dag 运行和任务实例端点的 updated_at 筛选器 (#28636)
增加用户标识符列的长度 (#29061)
更新甘特图 UI 以显示任务的排队状态 (#28686)
在 log.dttm 上添加索引 (#28944)
在配置视图中仅显示正在运行的配置 (#28892)
动态限制下拉菜单大小 (#28736)
为字段 extra 在连接编辑/添加 UI 中添加了 JSON linter。在连接编辑屏幕上,现有额外数据将以缩进形式显示 (#28583)
在 k8s exec 中使用标签而不是 pod 名称来读取 pod 日志 (#28546)
对排队和正在运行的重新检查使用时间而不是尝试次数。 (#28586)
CustomTTYColoredFormatter 应该继承 TimezoneAware 格式化程序 (#28439)
改进 Airflow CLI tasks.run 命令中过去的依赖处理 (#28113)
支持在
on_*_callback/sla_miss_callbacks
中使用回调列表 (#28469)为 db clean 提供更好的表名验证 (#28246)
在 config.yml 中为配置模板使用对象而不是数组 (#28417)
为任务注释添加 markdown 渲染。 (#28245)
在网格视图中显示映射的任务组 (#28208)
在配置部分中添加
renamed
和previous_name
(#28324)加快大多数 Users/Role CLI 命令的速度 (#28259)
加快 Airflow 角色列表命令的速度 (#28244)
重构序列化 (#28067, #30819, #30823)
允许 k8s 执行器/KPO 使用更长的 pod 名称 (#27736)
更新运行状况检查端点以包括
triggerer
状态 (#27755)
错误修复¶
修复 cli 应用程序的 static_folder (#30952)
初始化 cli appbuilder 的插件 (#30934)
修复 dag 文件处理器心跳仅在必要时运行的问题 (#30899)
修复 KubernetesExecutor 向调度程序发送状态的问题 (#30872)
仅当所有上游都完成时才计算映射的上游 (#30641)
ExternalTaskSensor:将 external_task_group_id 添加到 template_fields (#30401)
改进任务实例详细信息的 URL 检测 (#30779)
为 DAG 导入错误横幅使用 material 图标 (#30771)
修复各种网格/图形视图 UI 错误 (#30752)
添加折叠网格按钮 (#30711)
修复 d3 依赖项 (#30702)
简化逻辑以解决尽管 stalled_task_timeout 但仍卡在排队状态的任务 (#30375)
清除任务实例时,尝试从数据库获取关联的 DAG (#29065)
修复当提供 DAG 默认参数时映射任务的部分参数的问题 (#29913)
停用从 zip 文件中删除的 DAG (#30608)
通过检索最新的
resource_version
从too old resource version exception
中恢复 (#30425)修复刷新 DAG 时可能出现的竞争条件 (#30392)
为 OpenAPI 请求正文使用自定义验证器 (#30596)
修复带有可延迟参数的
TriggerDagRunOperator
(#30406)加快 DAG 运行删除速度 (#30330)
不要使用模板字面量来构建 html 元素 (#30447)
修复
example_sensor_decorator
DAG 中的弃用警告 (#30513)避免在触发器作业日志中记录敏感信息 (#30110)
为基本传感器添加一个新参数,以捕获 poke 方法中的异常 (#30293)
修复具有非 JSON 可序列化值的 DAG 运行配置编码 (#28777)
添加了在 Windows Dask-Workers 上使用 Airflow 的修复程序 (#30249)
强制 DAG 最后修改时间为 UTC (#30243)
修复示例 DAG 中的 EmptySkipOperator (#30269)
使 Web 服务器启动遵守 update_fab_perms (#30246)
更改日志文件夹权限时忽略错误 (#30123)
禁用按注释对 DagRuns 进行排序 (#30043)
修复从完成的 KubernetesExecutor 工作程序 pod 读取日志的问题 (#28817)
比较文件模式时屏蔽非访问位 (#29886)
从 UI 中删除运行任务操作 (#29706)
修复旧日志视图的日志尾部问题 (#29496)
修复 DebugExecutor 处理传感器的方式 (#28528)
确保在记录 pod 名称之前调用 pod_mutation_hook (#28534)
处理下一个运行计算中指数退避的 OverflowError (#28172)
其他/内部¶
使急切升级其他依赖项成为可选 (#30811)
升级到 pip 23.1.1 (#30808)
从急切升级中删除 protobuf 限制 (#30182)
从急切升级中删除 protobuf 限制 (#30182)
弃用
BashOperator
中的skip_exit_code
(#30734)删除指标
scheduler.tasks.running
(#30374)在
/airflow/www
中将 json5 升级到 1.0.2,将 eslint-plugin-import 升级到 2.27.5 (#30568)为 PythonOperator 添加测试 (#30362)
将 asgiref 添加为核心依赖 (#30527)
澄清发现安全模式切换注释 (#30459)
升级 moment-timezone 包以修复德黑兰时区问题 (#30455)
在
/airflow/www
中将 loader-utils 从 2.0.0 升级到 2.0.4 (#30319)在
/airflow/www
中将 babel-loader 从 8.1.0 升级到 9.1.0 (#30316)DagBag:在异常消息中使用
dag.fileloc
而不是dag.full_filepath
(#30610)更改序列化信息的日志级别 (#30239)
小的 DagRun 辅助方法清理 (#30092)
改进 stats.py 中的类型提示 (#30024)
将
importlib-metadata
的向后移植限制为 < 5.0.0 (#29924)使 cncf 提供程序文件名与 AIP-21 对齐 (#29905)
将 FAB 升级到 4.3.0 (#29766)
在测试中清除 ExecutorLoader 缓存 (#29849)
在 UI 中延迟加载任务实例日志 (#29827)
为超出 API 调用最大页面限制添加警告日志 (#29788)
积极地缓存进程中的入口点 (#29625)
不要使用
importlib.metadata
来获取版本以提高速度 (#29723)将 Mypy 升级到 1.0 (#29468)
将
db export-cleaned
重命名为db export-archived
(#29450)监听器:通过直接调用替换 SQLAlchemy 事件监听来简化 API (#29289)
Bash 环境变量不允许多行日志条目 (#28881)
切换到 ruff 以进行更快的静态检查 (#28893)
删除 TI 日志中的水平线 (#28876)
使 allowed_deserialization_classes 更直观 (#28829)
当在 k8s 执行器 pod 中时,将日志传播到 stdout (#28440, #30860)
修复代码可读性,向 json_client 添加文档字符串 (#28619)
AIP-51 - 其他兼容性检查 (#28375)
修复 LocalKubernetesExecutor 的 is_local (#28288)
将 Hive 宏移动到提供程序 (#28538)
重新运行不稳定的 PinotDB 集成测试 (#28562)
添加 pre-commit hook 以检查会话默认值 (#28007)
为 Web UI 重构 get_mapped_group_summaries (#28374)
添加对 k8s 1.26 的支持 (#28320)
将
freezegun
替换为 time-machine (#28193)完成了
airflow/kubernetes/*
的 D400 (#28212)完成了多个文件夹的 D400 (#27969)
放弃 k8s 1.21 和 1.22 支持 (#28168)
从 k8s 调度程序类中删除未使用的 task_queue 属性 (#28049)
完成了多个文件夹的 D400 (#27767, #27768)
仅文档更改¶
添加关于如何避免意外的 airflow 升级/降级的说明 (#30813)
添加关于如何编写任务日志的明确信息 (#30732)
更好地解释如何从任务中记录日志 (#30746)
为数据集使用正确的导入路径 (#30617)
创建
audit_logs.rst
(#30405)为传感器添加 taskflow API 示例 (#30344)
添加关于时区感知 DAG 的说明 (#30467)
明确 params 文档 (#30345)
修复任务持续时间指标的单位 (#30273)
更新 dag-run.rst,以修复 cli 命令的死链接 (#30254)
在“降低 DAG 复杂性”中添加“编写高效 Python 代码”部分 (#30158)
允许使用
*_lookup_pattern
参数指定在后端查找哪个连接、变量或配置 (#29580)为通知功能扩展添加文档 (#29191)
澄清执行器接口是公开的,但实例不是 (#29200)
向 Airflow 文档添加公共接口描述 (#28300)
为任务组映射添加文档 (#28001)
对指标文档的一些修复 (#30290)
Airflow 2.5.3 (2023-04-01)¶
重大变更¶
没有重大更改。
错误修复¶
修复独立 dag-processor 的 DagProcessorJob 集成 (#30278)
修复 gunicorn 挂起时正确终止的问题 (#30188)
修复 XCom.get_one 正好一个异常文本 (#30183)
将 VARCHAR 大小更正为 250。 (#30178)
当任务收到 SIGTERM 时,还原对 on_failure_callback 的修复 (#30165)
将只读属性移动到 DagState 以修复生成的文档 (#30149)
确保
dag.partial_subset
不会改变任务组属性 (#30129)修复
airflow dags next-execution
cli 命令的不一致返回值 (#30117)修复 www/utils.dag_run_link 重定向 (#30098)
修复映射任务计数为 0 时的
TriggerRuleDep
(#30084)Dag 处理器管理器,向 _fetch_callbacks 添加 retry_db_transaction (#30079)
修复 mysql 数据库的 db clean 命令 (#29999)
避免在迷你调度程序中考虑 EmptyOperator (#29979)
修复一些长期存在的图形视图 UI 问题 (#29971, #30355, #30360)
修复 DAG 文档切换图标的初始角度 (#29970)
修复 DAG UI 中的标签选择 (#29944)
在 MANIFEST.in 中包含 airflow/example_dags/sql/sample.sql (#29883)
修复 /taskinstance/list 视图中损坏的过滤器 (#29850)
允许通用参数字典 (#29782)
修复 patch variable 路由中的 update_mask (#29711)
如果 instance_name_has_markup = True,则从 app_name 中剥离标记 (#28894)
其他/内部¶
还原 “也限制 Python 3.9 上的 importlib (#30069)” (#30209)
向 @task.sensor 任务添加 custom_operator_name (#30131)
在 /airflow/www 中将 webpack 从 5.73.0 升级到 5.76.0 (#30112)
格式化的配置 (#30103)
删除 astroid 的上限限制 (#30033)
删除意外合并的供应商守护程序补丁代码 (#29895)
修复关于缺少 data_interval 的 airflow tasks test 命令中的警告 (#27106)
仅文档更改¶
添加关于顶层代码的更多信息 (#30040)
更新工作日示例 (#30026)
修复 DAG 文档中的一些错别字 (#30015)
更新 set-up-database.rst (#29991)
修复 Kubernetes 文档中的一些错别字 (#29936)
修复一些标点符号和语法 (#29342)
Airflow 2.5.2 (2023-03-15)¶
重大变更¶
作为 API 参数或参数传递的日期时间字段应符合 RFC3339 标准 (#29395)¶
在 API 调用的情况下,作为日期时间字段一部分传递的“+”可能未进行 URL 编码,并且此类日期时间字段可以通过验证。此类日期时间参数现在应进行 URL 编码(如 %2B
)。
对于参数,我们仍然允许符合 IS8601 标准的日期时间(因此,例如,有可能使用“ ”而不是 T
来分隔日期和时间,并且没有指定时区),但我们会引发弃用警告。
[webserver] expose_hostname
的默认值已更改为 False
(#29547)¶
[webserver] expose_hostname
的默认值已设置为 False
,而不是 True
。这意味着管理员必须选择加入才能向最终用户公开 Web 服务器主机名。
错误修复¶
修复 API 和参数架构中日期时间字段的验证 (#29395)
修复大型日志的网格日志 (#29390)
当任务收到 SIGTERM 时,修复 on_failure_callback (#29743)
更新 python-daemon 的最小版本以修复 containerd 文件限制 (#29916)
如果 DAG 未激活,则 POST
/dagRuns
API 应返回 404 (#29860)切换页面时,DAG 列表排序丢失 (#29756)
修复清除现在是映射任务的普通任务的先前运行时的调度程序崩溃问题 (#29645)
将带有时区的 moment 转换为 UTC,而不是引发异常 (#29606)
通过添加其他返回类型来修复清除 dag 运行
openapi
规范响应 (#29600)不要在任务实例详细信息页面中显示空的呈现属性 (#29545)
从 get-value 命令中删除部分检查 (#29541)
不要为未经身份验证的用户在 UI 回溯中显示版本/节点 (#29501)
使
prev_logical_date
变量具有偏移感知能力 (#29454)修复映射运算符中的嵌套字段渲染 (#29451)
数据集,next_run_datasets,删除不必要的时间戳过滤器 (#29441)
TaskGroup 边缘情况下的
Edgemodifier
重构(带有标签)(#29410)修复 Rest API 更新用户输出 (#29409)
确保删除序列化 DAG (#29407)
如果显式设置,则在 TaskFlow API 中持久化 DAG 和任务文档值 (#29399)
重定向到带有所有参数的原始页面 (#29212)
修复仅在手动 DAG 运行情况下的任务持续时间视图 (#22015) (#29195)
删除 poke 方法以回退到父实现 (#29146)
PR:引入了在 Windows 系统上运行任务的修复 (#29107)
修复关于旧配置的迁移警告 (#29092)
在超时时发出 dagrun 失败持续时间 (#29076)
处理集群策略本身出现的错误 (#29056)
修复 REST API 的 Kerberos 身份验证。 (#29054)
修复通过 V1EnvVar 在异常时泄漏敏感字段的问题 (#29016)
在传递之前清理 url_for 参数 (#29039)
修复带有注释的 dag 运行触发器。 (#29228)
当通过 API 触发 DAG 运行时,将操作日志写入数据库 (#28998)
解析已挑选的 XCom 迭代器中的所有变量 (#28982)
允许在
airflow connections add
中使用没有 authority 和 host 块的 URI (#28922)在使用 KubernetesExecutor 时更有选择性地采用 pod (#28899)
KubenetesExecutor 即使成功也会发送状态 (#28871)
注释我们不删除的 KubernetesExecutor pod (#28844)
限制流式日志读取 (#28818)
引入 DAG 处理器作业 (#28799)
修复 #28391,从 UI 手动触发 Kubernetes 执行器的任务失败 (#28394)
当外部 DAG 不为空且 task_id 和 task_ids 为空时,记录 poke 信息 (#28097)
修复检查 DAG 编辑权限时出现的不一致性 (#20346)
杂项/内部¶
添加对不可模板化字段的检查 (#29821)
删除不包含在中的 continue 语句 (#29791)
移动网格视图中的额外链接位置 (#29703)
将
undici
从5.9.1
升级到5.19.1
(#29583)将 expose_hostname 默认值更改为 false (#29547)
更改 Airflow 创建的 config/password 文件的权限 (#29495)
使用更新的 setuptools
v67.2.0
(#29465)增加网格视图元素的最大高度 (#29367)
阐明 worker 控制配置的描述 (#29247)
在
/airflow/www
中将ua-parser-js
从0.7.31
升级到0.7.33
(#29172)删除
pytest
的上限限制 (#29086)链接到
graph/gantt
视图时,检查run_id
url 参数 (#29066)阐明图形视图中的动态任务标签 (#29042)
修复数据集的导入错误 (#29007)
更新 PythonSensor 如何从
python_callable
返回值 (#28932)添加依赖上下文描述以获得更好的日志消息 (#28875)
在
/airflow/www
中将swagger-ui-dist
从3.52.0
升级到4.1.3
(#28824)将
importlib-metadata
向后移植限制为< 5.0.0
(#29924, #30069)
仅文档更改¶
更新 pipeline.rst - 修复
merge_data()
任务中的查询 (#29158)更正 timetable.rst 中 Workday 时间表的参数名称 (#29896)
更新 Connection how-to 文档中环境变量链接的引用锚点 (#29816)
更好地描述 api 中的 limit (#29773)
描述 dag_processing.last_duration (#29740)
更新关于 template_fields 类型和子类的文档 (#29725)
修复 TaskFlow 概念中数据集入口/出口注释的格式 (#29678)
特定用例:通过 compose 中的 requirements.txt 添加软件包 (#29598)
检测 'docker-compose' 是否存在 (#29544)
将“着陆时间”条目添加到 UI 文档 (#29511)
改进示例 docker-compose 中的健康检查并阐明用法 (#29408)
从 TriggerDagRunOperator docstring 中删除
notes
参数 (#29298)在时间表文档中使用
schedule
参数而不是timetable
(#29255)将触发过程添加到 Airflow Docker 文档 (#29203)
更新 set-up-database.rst (#29104)
对 Params 文档的几项改进 (#29062)
Email 配置文档更明确的环境变量示例 (#28845)
添加了侦听器插件示例 (#27905)
Airflow 2.5.1 (2023-01-20)¶
重大更改¶
通过环境变量触发 gevent monkeypatching
(#28283)¶
如果您的 Web 服务器部署使用了 gevent,并且使用了本地设置来 monkeypatch
gevent,您可能需要将本地设置修补替换为 Web 服务器中设置为 1 的 _AIRFLOW_PATCH_GEVENT
环境变量。这可确保尽早完成 gevent 修补。
Bug 修复¶
修复非敏感环境变量的屏蔽 (#28802)
从 connexion 中删除 swagger-ui 额外功能,并通过 npm 包安装
swagger-ui-dist
(#28788)修复当设置
AUTH_ROLE_PUBLIC
时UIAlert
的 should_show (#28781)仅在采用 pod 时修补单个标签 (#28776)
更新 CSRF 令牌以使其与会话一起过期 (#28730)
修复映射任务实例的“airflow tasks render”cli 命令 (#28698)
允许 ExternalTaskSensor 的
external_task_ids
使用 XComArgs (#28692)在映射任务扩展期间对要删除的 TI 进行行锁定 (#28689)
处理 Executor 清理中的 ConnectionReset 异常 (#28685)
修复 gunicorn 的 access_log 输出重定向的描述 (#28672)
将 #28198 中删除的 join 添加回僵尸查询 (#28544)
修复 CronTriggerTimeTable DAG 的日历视图 (#28411)
运行 DAG 后,employees 表为空。 (#28353)
修复在 DAG 解析过程中查找僵尸时出现的
DetachedInstanceError
(#28198)在
divs
中嵌套标题块,以修复 dag.html 上的dagid
复制错误 (#28643)修复 UI 插入符方向 (#28624)
在触发规则依赖项中保护尚未展开的 ti (#28592)
在 OpenAPI 中将 TI
setNote
端点移动到 TaskInstance 下 (#28566)在
CronTriggerTimetable
中考虑之前的运行 (#28532)确保文件任务处理程序中的日志目录正确 (#28477)
修复在 executor_config 中 pickle 的错误 pod (#28454)
在触发 DAG 运行 API 中添加
ensure_ascii=False
(#28451)将设置器添加到 MappedOperator 的 on_*_callbacks (#28313)
修复延迟和等待重新调度的任务的
ti._try_number
(#26993)将
callModal
从 dag.js 中分离出来 (#28410)手动运行不能看起来像计划的运行 (#28397)
当没有 start_date 时,不显示任务/运行持续时间 (#28395)
在任务日志中保持手动滚动位置 (#28386)
正确选择映射任务的“上一个”任务 (#28379)
通过环境变量触发 gevent
monkeypatching
(#28283)修复 db 清理警告 (#28243)
使参数“offset”和“length”不是必需的 (#28234)
使实时日志读取适用于“其他”k8s 执行器 (#28213)
将自定义 pickle 挂钩添加到
LazyXComAccess
(#28191)修复下一个运行数据集错误 (#28165)
确保在 DAG 文件中报告来自
@dag
装饰器的警告 (#28153)当使用 airflow dags tests 命令时不发出警告 (#28138)
确保当文件被删除时,
dagbag_size
指标会减少 (#28135)改进运行/任务网格视图操作 (#28130)
使 BaseJob.most_recent_job 倾向于“正在运行”的作业 (#28119)
当代码不调用旧密钥时不发出 FutureWarning (#28109)
将
airflow.api.auth.backend.session
添加到 compose 中的后端会话 (#28094)解决关于在移动项上调用 conf.get 的错误警告 (#28075)
返回将要更改的任务列表 (#28066)
在解析 DAG 时,能够很好地处理错误的 zip 文件。 (#28011)
防止从本地路径重复加载提供程序 (#27988)
修复链接多个空映射任务时的死锁 (#27964)
修复:TaskInstance 上的 current_state 方法不按 map_index 筛选 (#27898)
如果数据库未初始化,则不记录 CLI 操作 (#27851)
确保我们可以摆脱错误的调度程序状态 (#27834)
dagrun,
next_dagruns_to_examine
, 添加 MySQL 索引提示 (#27821)处理在 DAG 验证发生时 DAG 中途消失的情况 (#27720)
修复:继续检查 sla (#26968)
允许在没有 conn 类型时生成连接 URI (#26765)
杂项/内部¶
在 eventlet 修复后,删除
dnspython
的限制 (#29004)将
dnspython
限制为 <2.3.0
,直到解决 eventlet 不兼容问题 (#28962)在示例 DAG 索引中添加自动化版本替换 (#28090)
清理并整理插件示例 (#28537)
将
SQLAlchemy
限制为低于2.0
(#28725)在
/airflow/www
中将json5
从1.0.1
升级到1.0.2
(#28715)修复一些关于将传感器与 taskflow 一起使用的文档 (#28708)
将 Architecture 和 OperatingSystem 类更改为
Enums
(#28627)向电子邮件实用程序添加 doc-strings 和小改进 (#28634)
修复
Connection.get_extra
类型 (#28594)导航栏、限制下拉列表大小并添加滚动条 (#28561)
从正确的源位置发出
conf.get*
的警告 (#28543)将我们的 MyPY 插件移动到 dev 文件夹 (#28498)
为
purge_inactive_dag_warnings
添加重试 (#28481)重新启用 ARM 上的 Plyvel,因为它现在可以干净地构建 (#28443)
为 LocalTaskJob 和工作程序添加 SIGUSR2 处理程序以帮助调试 (#28309)
将
test_task_command
转换为 Pytest 并unquarantine
其中的测试 (#28247)使无效字符异常更具可读性 (#28181)
在
/airflow/www
中将 decode-uri-component 从0.2.0
升级到0.2.2
(#28080)对未启动的执行器使用断言而不是异常 (#28019)
简化数据集
subgraph
逻辑 (#27987)按
map_index
排序 TIs (#27904)关于
LocalTaskJob
中段错误的更多信息 (#27381)
仅文档更改¶
在集群策略文档中提及映射操作符 (#28885)
稍微改进动态 DAG 生成序言的描述 (#28650)
重构文档 (#27235)
更新关于低优先级任务的调度器文档 (#28831)
明确说明版本约束在发布时是固定的 (#28762)
阐明关于 docker compose 的内容 (#28729)
为动态任务映射添加一个示例 DAG (#28325)
使用 docker compose v2 命令 (#28605)
将 AIRFLOW_PROJ_DIR 添加到 docker-compose 示例 (#28517)
删除过时的可选 Provider 功能文档 (#28506)
添加 [core] mp_start_method 配置的文档 (#27993)
LocalTaskJob 返回代码计数器的文档 (#27972)
注明支持的 Python 版本 (#27798)
Airflow 2.5.0 (2022-12-02)¶
重大变更¶
airflow dags test
不再执行回填作业 (#26400)¶
为了使 airflow dags test
作为测试和调试工具更有用,我们不再运行回填作业,而是运行“本地任务运行器”。用户仍然可以使用 airflow dags backfill
命令回填他们的 DAG。
Airflow 配置部分 kubernetes
重命名为 kubernetes_executor
(#26873)¶
KubernetesPodOperator 不再考虑任何核心 Kubernetes 配置参数,因此此部分现在仅适用于 Kubernetes 执行器。重命名它可以减少潜在的混淆。
当 ExternalTaskSensor 的任何依赖任务失败时,现在会立即抛出 AirflowException
(#27190)¶
当设置了 failed_states
,使用了 execute_date_fn
,并且部分(但不是全部)依赖任务失败时,ExternalTaskSensor
不再无限期地挂起。相反,只要任何依赖任务失败,就会抛出一个 AirflowException
。除了超时之外,任何处理此失败的代码都应该移动到缓存 AirflowException
BaseClass
,而不仅仅是 AirflowSensorTimeout
子类。
Airflow 配置选项 scheduler.deactivate_stale_dags_interval
已重命名为 scheduler.parsing_cleanup_interval
(#27828)。¶
旧选项将继续工作,但会发出弃用警告,并且将在 Airflow 3 中完全删除。
新功能¶
TaskRunner
:通知组件的启动和完成 (#27855)将 DagRun 状态更改添加到监听器插件系统 (#27113)
原始任务返回代码的指标 (#27155)
添加 XComArg 以拉取特定映射索引的逻辑 (#27771)
清除 TaskGroup (#26658, #28003)
添加关键部分查询持续时间指标 (#27700)
添加:#23880 ::
AirflowModelViews(Variables/Connection)
的审计日志 (#24079, #27994, #27923)添加对 postgres 15 的支持 (#27444)
在运行时扩展映射组中的任务 (#27491)
重置提交,清理子模块 (#27560)
scheduler_job,为调度器循环计时器添加指标 (#27605)
允许在 taskflow 中使用数据集 (#27540)
将 expanded_ti_count 添加到 ti 上下文 (#27680)
向任务实例和 DAG 运行添加用户注释 (#26457, #27849, #27867)
启用将 DagRun JSON 复制到剪贴板 (#27639)
为 SLA 实现额外的控制 (#27557)
在 DAG 视图中添加 DAG 解析时间 (#27573)
在 BaseSensor 中为 exponential_backoff 添加 max_wait (#27597)
在解析时扩展映射组中的任务 (#27158)
在回填时添加禁用重试标志 (#23829)
添加传感器装饰器 (#22562)
Api 端点更新 ti (#26165)
按最近更新事件筛选数据集 (#26942)
支持
Is /not
Null 过滤器,用于在webui
上值为 None 的情况 (#26584)向数据集列表添加搜索功能 (#26893)
在映射操作符中分离并处理“params” (#26100)
为 TaskGroup 映射添加编写 API (#26844)
添加
one_done
触发规则 (#26146)创建一个更高效的 airflow dag test 命令,该命令还具有更好的本地日志记录功能 (#26400)
支持向角色命令添加/删除权限 (#26338)
在 Web UI 中自动跟踪文件日志 (#26169)
在 API 中向任务实例添加触发器信息 (#26249)
标记以在自定义 XCom 后端上反序列化值 (#26343)
改进¶
允许深度优先执行 (#27827)
UI:如果数据更改,则更新偏移高度 (#27865)
改进 TriggerRuleDep 的类型和可读性 (#27810)
使需要会话的视图成为仅关键字参数 (#27790)
使用显式 task_ids 和 map_indexes 优化
TI.xcom_pull()
(#27699)允许在 k8s 执行器使用的 pod id 中使用连字符 (#27737)
优化任务实例筛选 (#27102)
使用上下文管理器简化日志服务管理 (#27756)
修复格式化残留 (#27750)
改进任务死锁消息 (#27734)
改进“传感器超时”消息 (#27733)
将 urlparse 替换为
urlsplit
(#27389)使 TaskGroup 语义与 AbstractOperator 对齐 (#27723)
在 DAG 处理的每次循环中,将新文件添加到解析队列 (#27060)
使 Kubernetes 执行器和调度器在 PMH 执行期间具有错误恢复能力 (#27611)
将数据集依赖项分成单独的图表 (#27356)
使用 log.exception,它比 log.error 更经济 (#27517)
将验证
branch_task_ids
移动到SkipMixin
(#27434)当推送到 XCom 时,将 LazyXComAccess 强制转换为列表 (#27251)
更新 cluster-policies.rst 文档 (#27362)
如果连接类型已在提供程序中注册,则添加警告 (#27520)
使用 –verbose 选项在命令中激活调试日志记录 (#27447)
为 Python 操作符添加经典示例 (#27403)
将
.first()
更改为.scalar()
(#27323)改进 reset_dag_run 描述 (#26755)
添加关于传感器的示例和
howtos
(#27333)使网格视图宽度可调整 (#27273)
按类别,然后按名称对插件自定义菜单链接进行排序 (#27152)
简化 DagRun.verify_integrity (#26894)
将映射的任务组信息添加到序列化 (#27027)
更正网格视图中用于运行配置的 JSON 样式 (#27119)
UI 行为不需要
extra__conn_type__
前缀 (#26995)改进数据集更新的简介 (#26878)
将 kubernetes 配置部分重命名为 kubernetes_executor (#26873)
解码数据集搜索的参数 (#26941)
摆脱 DAGRun 详细信息页面,完全依赖网格 (#26837)
修复使用
hostname_callable
时调度器crashloopbackoff
的问题 (#24999)降低 KubernetesExecutor 中的日志详细程度。 (#26582)
不要毫无理由地迭代 tis 列表两次 (#26740)
更清晰的 PodGenerator.deserialize_model_file 代码 (#26641)
除非您有 V1Pod,否则不要导入 kubernetes (#26496)
将 updated_at 列添加到 DagRun 和 Ti 表 (#26252)
将自定义 XCom 后端的反序列化移至 2.4.0 (#26392)
当需要一个项目时,避免计算所有元素 (#26377)
通过 isort 自动添加
__future__
.annotations (#26383)在序列化 expand_kwargs 时处理列表 (#26369)
将 PEP-563(延迟评估注释)应用于核心 airflow (#26290)
添加更多工作日操作符和传感器示例 #26071 (#26098)
使 TaskGroup 语义与 AbstractOperator 对齐 (#27723)
错误修复¶
正常处理整个配置部分被重命名的情况 (#28008)
在反序列化期间为导入添加允许列表 (#27887)
软删除 DAG 计划或任务输出中不再引用的数据集 (#27828)
当 URL 中没有有效的标签时,重定向到主页视图 (#25715)
在 DAG 视图中刷新下一次运行数据集信息 (#27839)
使 MappedTaskGroup 依赖于其扩展输入 (#27876)
使暂停的 DAG 的 DagRun 状态更新更快 (#27725)
不要在任务运行命令中显式将 include_examples 设置为 False (#27813)
修复菜单边框颜色 (#27789)
修复回填排队的任务被重置为计划状态的问题。 (#23720)
修复从父 DAG 清除子 DAG 映射任务的问题 (#27501)
处理任务回调中
V1Pod
的 json 编码 (#27609)修复 ExternalTaskSensor 无法检查压缩的 DAG 的问题 (#27056)
避免在 TriggerDagRunOperator 中重新获取 DAG 运行 (#27635)
在检索元数据时继续出现异常 (#27665)
外部任务传感器失败修复 (#27190)
在弹出操作时添加默认的 None (#27537)
在触发 DAG 视图中显示来自序列化 DAG 的参数值。 (#27482, #27944)
将 TriggerDagRun conf 检查移至 execute (#27035)
解决触发器分配竞争条件 (#27072)
更新 google_analytics.html (#27226)
修复 Web UI DAG 列表页面中的一些错误(自动刷新和跳转搜索空状态)(#27141)
修复 docker-compose.yaml 的损坏 URL (#26721)
修复 xcom arg.py .zip 错误 (#26636)
修复 404
taskInstance
错误并将其拆分为两个表 (#26575)修复浏览器警告的不正确的线程使用问题 (#26551)
模板渲染问题修复 (#26390)
如果存在任何导入错误,则清除
autoregistered
DAG (#26398)修复
from airflow import version
延迟导入 (#26239)允许在触发的 DAG 运行模式中滚动 (#27965)
杂项/内部¶
删除
is_mapped
属性 (#27881)简化 FAB 表格重置 (#27869)
修复 Base Sensor 中的旧式类型 (#27871)
(返回)切换到延迟导入 (#27730)
为多个文件夹完成 D400 (#27748)
简化注释手风琴测试 (#27757)
为
airflow/callbacks/* airflow/cli/*
完成 D400 (#27721)为
airflow/api_connexion/* directory
完成 D400 (#27718)为
airflow/listener/* directory
完成 D400 (#27731)为
airflow/lineage/* directory
完成 D400 (#27732)更新 API & Python 客户端版本 (#27642)
为
airflow/api/*
目录完成 D400 和 D401 (#27716)为多个文件夹完成 D400 (#27722)
在
/airflow/www
中将minimatch
从3.0.4 升级到 3.0.8
(#27688)在
/airflow/www
中将 loader-utils 从1.4.1 升级到 1.4.2
(#27697)暂时禁用嵌套任务映射 (#27681)
提升 alembic 的最低版本 (#27629)
删除未使用的 code.html (#27585)
在所有地方启用 Python 字符串规范化 (#27588)
升级依赖以避免回溯 (#27531)
加强并阐明问题分类的重要性 (#27262)
删除重复的类型提示 (#27508)
向
BaseTrigger.run
添加存根 ‘yield’ (#27416)移除 dask 的上限限制 (#27415)
将 Dask 限制在
2022.10.1
以下 (#27383)更新旧式类型 (#26872)
为文档启用字符串规范化 (#27269)
稍微加快了升级/降级测试 (#26939)
弃用 PodManager 中核心 get_kube_client 的使用 (#26848)
将
memray
文件添加到gitignore / dockerignore
(#27001)提升 sphinx 和
sphinx-autoapi
(#26743)简化
RTIF.delete_old_records()
(#26667)将最后一个 React 文件迁移到 TypeScript (#26112)
解决
pyupgrade
的边缘情况 (#26384)
仅文档更改¶
记录 dag_file_processor_timeouts 指标为已弃用 (#27067)
放弃对 PostgreSQL 10 的支持 (#27594)
更新 index.rst (#27529)
添加关于将惰性 XCom 代理推送到 XCom 的说明 (#27250)
修复 BaseOperator 链接 (#27441)
[文档] 最佳实践添加使用带有模板示例的变量。 (#27316)
使用插件的自定义视图的文档 (#27244)
更新概述页面上的图表视图和网格视图 (#26909)
文档修复 (#26819)
在标记标题字符串级别上保持一致性 (#26696)
添加 DAG 测试函数的文档 (#26713)
修复
docker-compose.yaml
的损坏 URL (#26726)添加关于在时间表中使用顶层代码的注释 (#26649)
修复 example_datasets DAG 名称 (#26495)
更新文档:任务映射中现在可以实现类似 zip 的效果 (#26435)
将文档中从经典操作符使用更改为任务装饰器 (#25711)
Airflow 2.4.3 (2022-11-14)¶
重大更改¶
使在 DagProcessor
中使用的 RotatingFilehandler
非缓存 (#27223)¶
如果您想在 CONFIG_PROCESSOR_MANAGER_LOGGER=True
时减少缓存内存,并且您之前创建了本地设置,则可以更新 processor_manager_handler
以使用 airflow.utils.log.non_caching_file_handler.NonCachingRotatingFileHandler
处理程序,而不是 logging.RotatingFileHandler
。
Bug 修复¶
修复某些任务日志处理程序的双重日志记录问题 (#27591)
用 Airflow 的函数替换 FAB url 过滤函数 (#27576)
修复映射任务的迷你调度程序扩展 (#27506)
拉取任务实例时,
SLAMiss
是可空的,并非总是返回 (#27423)修复搜索 DAG 时
_
的行为 (#27448)修复从 BaseExecutor 获取
dag/task
id 的问题 (#27550)修复 DDRQ 上 SQLAlchemy 主键黑屏错误 (#27538)
修复 Web 服务器启动期间的 IntegrityError (#27297)
向用户名添加不区分大小写的约束 (#27266)
修复 Python 外部模板键 (#27256)
减少多余的任务日志请求 (#27233)
使
DagProcessor
中使用的RotatingFilehandler
非缓存 (#27223)Listener:在 SQLAlchemy TaskInstance 对象上设置任务 (#27167)
修复 DAG 列表页面自动刷新和跳转搜索空状态 (#27141)
将
executor.job_id
设置为回填的BackfillJob.id
(#27020)
杂项/内部¶
在
/airflow/www
中将 loader-utils 从1.4.0
升级到1.4.1
(#27552)降低 k8s
TCP_KEEPALIVE
等警告的日志级别 (#26981)
仅文档更改¶
在 Docker Compose 文档中使用正确的执行文件 (#27529)
修复 DAG 运行描述中的措辞 (#27470)
记录
KubernetesExecutor
覆盖容器参数 (#27450)修复
BaseOperator
链接 (#27441)将计时器单位从毫秒更正为秒。 (#27360)
在触发规则示例中添加遗漏的导入 (#27309)
更新 SLA 措辞以反映它是相对于
Dag Run
开始的。 (#27111)将
kerberos
环境变量添加到文档 (#27028)
Airflow 2.4.2 (2022-10-23)¶
重大更改¶
将 [webserver] expose_stacktrace
的默认值更改为 False
(#27059)¶
[webserver] expose_stacktrace
的默认值已设置为 False
,而不是 True
。这意味着管理员必须选择启用向最终用户公开回溯。
Bug 修复¶
使回溯成为可选项 (#27059)
为 FAB 表添加缺失的 AUTOINC/SERIAL (#26885)
为 405(不允许的方法)错误添加单独的错误处理程序 (#26880)
不要重新修补已由当前工作程序控制的 Pod (#26778)
处理任务持续时间图表中的映射任务 (#26722)
修复任务持续时间累积图表 (#26717)
避免 DAG 重定向上的 500 错误 (#27064)
在 Web 服务器上过滤数据集依赖项数据 (#27046)
删除
airflow dags reserialize
中重复收集的 DAG (#27030)修复图表视图的自动刷新 (#26926)
不要用无效的 JSON 覆盖连接额外信息 (#27142)
修复下一个运行数据集模态链接 (#26897)
将 DAG 审计日志按日期排序从升序更改为降序 (#26895)
提升 jinja2 的最小版本 (#26866)
向
state_color_mapping
jinja 全局添加缺失的颜色 (#26822)修复在
airflow tasks test
中运行调试器的问题 (#26806)修复使用 xcomarg 依赖项时的警告 (#26801)
在显示任务摘要时降低已删除状态的优先级 (#26789)
确保解析期间来自操作符的日志消息转到某处 (#26779)
在 REST API 中的 TaskState 枚举中添加重新启动状态 (#26776)
允许从 data.detail 中检索错误消息 (#26762)
简化来源字符串清理 (#27143)
从 StandardTaskRunner 中删除 DAG 解析 (#26750)
修复持续时间视图上的非隐藏累积图表 (#26716)
删除 TaskFail 重复项检查 (#26714)
修复当 dags_folder 与处理器不同时,airflow tasks run –local 的问题 (#26509)
修复 d3-color 的 yarn 警告 (#27139)
修复几个配置的版本 (#26491)
恢复 “针对回填 DAG 运行取消网格自动刷新 (#25042)” (#26463)
在 Airflow 调度 DAG 运行数据库死锁时重试 (#26347)
杂项/内部¶
围绕任务映射代码的清理 (#26879)
将面向用户的字符串移动到模板 (#26815)
向数据集图表添加图标图例 (#26781)
提升
sphinx
和sphinx-autoapi
(#26743)简化
RTIF.delete_old_records()
(#26667)将 FAB 升级到
4.1.4
(#26393)
仅文档更改¶
修复任务组示例中的三引号 (#26829)
文档修复 (#26819)
在标记标题字符串级别上保持一致性 (#26696)
添加关于在时间表中使用顶层代码的注释 (#26649)
修复
docker-compose.yaml
的损坏 URL (#26726)
Airflow 2.4.1 (2022-09-30)¶
重大更改¶
没有重大更改。
Bug 修复¶
在渲染模板时,取消上下文中的任务映射 (#26702)
修复 ConfirmDialog 的滚动溢出 (#26681)
解决关于
Table.exists()
的弃用警告 (#26616)修复 XComArg zip 错误 (#26636)
在排序运行时使用 COALESCE 处理 NULL 值 (#26626)
检查用户是否处于活动状态 (#26635)
公共管理员不再显示缺少用户的警告 (#26611)
允许 MapXComArg 在序列化后解析 (#26591)
解决关于 DAG 视图中 DISTINCT ON 查询的警告 (#26608)
当密钥后端 kwargs 无效时记录警告 (#26580)
修复网格视图日志的重试次数 (#26556)
将
templates_dict
传递给任务装饰器时,模板渲染问题 (#26390)修复在回填期间,可延迟任务停留在
scheduled
状态的问题 (#26205)抑制数据库初始化时 SQLALCHEMY_TRACK_MODIFICATIONS 警告 (#26617)
正确设置 Flask 应用的
json_provider_class
,使其使用我们的编码器 (#26554)修复 WSGI 根应用 (#26549)
修复当具有已删除上游的映射任务重新运行时出现死锁的问题 (#26518)
ExecutorConfigType 应该是
cacheable
(#26498)修复从 Celery 工作节点检索日志时,路径的正确连接 (#26493)
DAG 依赖扩展了
base_template
(#26439)不要从调度器更新回填运行 (#26342)
仅文档更改¶
阐明所有者链接文档 (#26515)
修复数据集概念文档中的无效 RST (#26434)
记录
expose_config
的non-sensitive-only
选项 (#26507)修复
example_datasets
DAG 名称 (#26495)现在可以在任务映射中实现类似 zip 的效果 (#26435)
在文档中使用任务装饰器而不是经典操作符 (#25711)
Airflow 2.4.0 (2022-09-19)¶
重大更改¶
Airflow 中添加了数据感知调度和 Dataset
概念¶
Airflow 的此版本新增了数据集的概念,以及一种新的调度 DAG 的方式:数据感知调度。
这允许在任务“生成”数据集后自动创建 DAG 运行。在某些方面,这可以被认为是 TriggerDagRunOperator
的反向操作,其中不是由生成 DAG 控制创建哪些 DAG,而是由消费 DAG “监听”更改。
数据集由 URI 标识
from airflow import Dataset
# The URI doesn't have to be absolute
dataset = Dataset(uri="my-dataset")
# Or you can use a scheme to show where it lives.
dataset2 = Dataset(uri="s3://bucket/prefix")
要创建一个在数据集更新时运行的 DAG,请使用新的 schedule
参数(见下文),并传递一个或多个数据集的列表
with DAG(dag_id='dataset-consumer', schedule=[dataset]):
...
要将任务标记为生成数据集,请将数据集传递给 outlets
属性
@task(outlets=[dataset])
def my_task():
...
# Or for classic operators
BashOperator(task_id="update-ds", bash_command=..., outlets=[dataset])
如果生产者和消费者在不同的文件中,则无需使用相同的 Dataset 对象,使用相同 URI 创建的两个 Dataset()
是相等的。
数据集表示数据集的抽象概念,并且(目前)没有任何直接的读取或写入能力 - 在此版本中,我们添加了将要构建的基础功能。
有关数据集的更多信息,请参阅 数据感知调度。
在上下文管理器中使用的 DAG 不再需要分配给模块变量 (#23592)¶
以前,您必须将 DAG 分配给模块级变量,Airflow 才能识别它。例如,这个
with DAG(dag_id="example") as dag:
...
@dag
def dag_maker():
...
dag2 = dag_maker()
可以变成
with DAG(dag_id="example"):
...
@dag
def dag_maker():
...
dag_maker()
如果由于任何原因要禁用该行为,请在 dag 上设置 auto_register=False
# This dag will not be picked up by Airflow as it's not assigned to a variable
with DAG(dag_id="example", auto_register=False):
...
弃用 schedule_interval
和 timetable
参数 (#25410)¶
我们添加了新的 DAG 参数 schedule
,它可以接受 cron 表达式、timedelta 对象、timetable 对象或数据集对象列表。参数 schedule_interval
和 timetable
已被弃用。
如果您之前使用了 @daily
cron 预设,则您的 DAG 可能如下所示
with DAG(
dag_id="my_example",
start_date=datetime(2021, 1, 1),
schedule_interval="@daily",
):
...
展望未来,您应该使用 schedule
参数
with DAG(
dag_id="my_example",
start_date=datetime(2021, 1, 1),
schedule="@daily",
):
...
如果您使用自定义时间表,情况也是如此。以前您会使用 timetable
参数
with DAG(
dag_id="my_example",
start_date=datetime(2021, 1, 1),
timetable=EventsTimetable(event_dates=[pendulum.datetime(2022, 4, 5)]),
):
...
现在您应该使用 schedule
参数
with DAG(
dag_id="my_example",
start_date=datetime(2021, 1, 1),
schedule=EventsTimetable(event_dates=[pendulum.datetime(2022, 4, 5)]),
):
...
删除实验性智能传感器 (#25507)¶
智能传感器在 2.0 中添加,在 2.2 中被弃用,转而使用可延迟操作符,现在已被删除。
airflow.contrib
包和已弃用的模块是动态生成的 (#26153, #26179, #26167)¶
airflow.contrib
包和 airflow.hooks
、airflow.operators
、airflow.sensors
包中 Airflow 1.10 的已弃用模块现在是动态生成的模块,虽然用户可以继续使用已弃用的 contrib 类,但它们对于静态代码检查工具不再可见,并且会被报告为缺失。建议用户迁移到非弃用的类。
DBApiHook
和 SQLSensor
已移动 (#24836)¶
DBApiHook
和 SQLSensor
已移动到 apache-airflow-providers-common-sql
提供程序。
网格视图中 DAG 运行的排序逻辑已更改 (#25090)¶
网格视图中 DAG 运行的排序已更改为更“自然”。新逻辑通常按数据间隔排序,但可以通过将 DAG 设置为使用自定义时间表来应用自定义排序。
新功能¶
添加数据感知调度 (AIP-48)
添加
@task.short_circuit
TaskFlow 装饰器 (#25752)使
tasks test
命令中的execution_date_or_run_id
可选 (#26114)自动注册在上下文管理器中使用的 DAG (#23592, #26398)
添加将 DAG 解析器日志发送到 stdout 的选项。 (#25754)
支持多个
DagProcessors
从不同位置解析文件。 (#25935)实现
ExternalPythonOperator
(#25780)使
dags test
命令的 execution_date 可选 (#26111)针对字面列表实现
expand_kwargs()
(#25925)添加触发规则工具提示 (#26043)
为 airflow dags test 的 CLI 添加 conf 参数 (#25900)
在池视图中包含计划的槽 (#26006)
向
MappedOperator
添加output
属性 (#25604)向 cli 添加角色删除命令 (#25854)
添加 Airflow 特定的警告类 (#25799)
在
ExternalTaskSensor
中添加对TaskGroup
的支持 (#24902)添加
@task.kubernetes
taskflow 装饰器 (#25663)添加一种在没有副作用的情况下导入 Airflow 的方法 (#25832)
让时间表控制生成的 run_ids。 (#25795)
允许在网格视图中按时间表覆盖排序 (#25633)
映射实例的网格日志 (#25610, #25621, #25611)
整合到一个
schedule
参数 (#25410)回填命令中的 DAG 正则表达式标志 (#23870)
在 DAG 视图 UI 中添加对所有者链接的支持 (#25280)
能够通过 REST API 清除特定 DAG 运行的任务实例 (#23516)
可以使用单独的 markdown 文件来记录 DAG (#25509)
向 DAG 解析添加解析上下文 (#25161)
实现
CronTriggerTimetable
(#23662)添加在 UI 配置页面中屏蔽敏感数据的选项 (#25346)
从 ORM 创建新数据库 (#24156)
实现
XComArg.zip(*xcom_args)
(#25176)引入
sla_miss
指标 (#23402)实现
map()
语义 (#25085)向 TaskGroupDecorator 添加覆盖方法 (#25160)
实现
expand_kwargs()
(#24989)添加关闭 SQL 查询日志记录的参数 (#24570)
添加
DagWarning
模型,并检查缺少的池 (#23317)将任务日志添加到网格详细信息面板 (#24249)
在调度程序中添加了小型运行状况检查服务器和端点 (#23905)
为
ExternalTaskMarker
操作符添加内置外部链接 (#23964)添加默认任务重试延迟配置 (#23861)
添加清除 DagRun 端点。 (#23451)
在 cron 间隔时间表中添加对字符串格式时区的支持 (#23279)
向 DAG 主页添加自动刷新 (#22900, #24770)
改进¶
添加更多工作日操作符和传感器示例 #26071 (#26098)
向 dags reserialize 命令添加 subdir 参数 (#26170)
更新僵尸消息以更具描述性 (#26141)
仅当 DAG 被计划时才发送
SlaCallbackRequest
(#26089)更多地推广
Operator.output
(#25617)将 API 文件升级到 TypeScript (#25098)
减少映射任务中
hacky
双重渲染预防 (#25924)改进审计日志 (#25856)
删除映射操作符验证代码 (#25870)
更多
DAG(schedule=...)
改进 (#25648)减少序列化 JSON 中的
operator_name
重复 (#25819)使网格视图组/映射摘要 UI 更一致 (#25723)
删除
task_group_to_grid
中无用的语句 (#25654)向
CronTriggerTimetable
添加可选的数据间隔 (#25503)移除
/grid
端点中未使用的代码 (#25481)添加并记录描述字段 (#25370)
改进 Airflow 运算符 Jinja 模板处理的日志记录 (#25452)
更新核心示例 DAG 以使用
@task.branch
装饰器 (#25242)更新 DAG
audit_log
路由 (#25415)将命令中的 stdout 和 stderr 访问模式更改为追加 (#25253)
从 Grid 视图中移除
getTasks
(#25359)使用 ParamSpec 改进 taskflow 类型提示 (#25173)
在网格详细信息窗格中使用表格 (#25258)
显式列出
@dag
参数 (#25044)在
SchedulerJob
和TaskInstance
中添加更多类型信息 (#24912)使用更具弹性的版本修补
getfqdn
(#24981)将所有
NBSP
字符替换为whitespaces
(#24797)在
airflow db upgrade
上重新序列化所有 DAG (#24518)重新设计 try_adopt_task_instances 方法的合约 (#23188)
使
expand()
错误模糊,以避免误导 (#24018)为
[webserver]analytics_tool
添加枚举验证 (#24032)在审计日志中添加
dttm
可搜索字段 (#23794)允许通过
execute_in_subprocess
传递更多参数 (#23286)使用
func.count
计数行 (#23657)移除过时的序列化 dag (#22917)
AIP45 移除 airflow run local 中的 dag 解析 (#21877)
在 DagRun 更新端点中添加对排队状态的支持。 (#23481)
向 dagrun 端点添加字段 (#23440)
当
result_backend
未设置时,为 celery 结果后端使用sql_alchemy_conn
(#24496)
Bug 修复¶
在 ORM 和迁移文件之间保持一致的类型 (#24044, #25869)
禁止任何长度超过 100 个字符的 dag 标签 (#25196)
将 dag_id 添加到
AirflowDagCycleException
消息中 (#26204)正确构建 URL 以从系统中独立检索日志 (#26337)
对于 worker 日志服务器,仅在双栈可用时绑定到 IPV6 (#26222)
修复
TaskInstance.task
在handle_failure
之前未定义的问题 (#26040)撤消秘密后端配置缓存 (#26223)
修复错误的执行器配置序列化逻辑 (#26191)
基于角色权限显示
DAGs
和Datasets
菜单链接 (#26183)允许通过函数文档字符串设置
TaskGroup
工具提示 (#26028)修复具有许多任务的 DAG 的图形视图上的 RecursionError (#26175)
修复回填偶尔死锁的问题 (#26161)
修复使用
--reset-dagruns
True 进行回填时未设置DagRun.start_date
的问题 (#26135)在图形中使用标签而不是 id 作为动态任务标签 (#26108)
当叶
mapped_task
为 SKIPPED 时,不要使 DagRun 失败 (#25995)向装饰的映射任务添加组前缀 (#26081)
修复使用重复逻辑日期触发时的 UI 闪烁 (#26094)
修复使
TaskInstance
相关端点的项目可为空,以避免 API 错误 (#26076)修复
BranchDateTimeOperator
使其timezone-awreness-insensitive
(#25944)修复旧版时间表计划间隔参数 (#25999)
修复
list-mapped-task-instance
的响应架构 (#25965)正确检查丢失的映射 TI 的存在 (#25788)
修复网格视图上损坏的自动刷新 (#25950)
在网格 UI 中使用按时间表排序 (#25880)
将解析 DAG 时的递归重写为迭代 (#25898)
在
iter_mapped_dependants
中查找跨组任务 (#25793)如果映射上游失败,则使任务失败 (#25757)
支持变量 get 端点中的
/
(#25774)为网格日志使用 cfg default_wrap 值 (#25731)
在触发运行时添加原始请求参数 (#25729)
运算符名称与类分开 (#22834)
修复由于对输入时间对齐的假设而导致的错误数据间隔对齐 (#22658)
如果
XComArg
无法解析,则返回 None (#25661)更正
airflow variables set
命令中的json
arg 帮助 (#25726)添加 MySQL 索引提示以在
find_zombies
查询中使用ti_state
(#25725)仅从渲染中排除实际扩展的字段 (#25599)
网格,修复
axios
错误的 toast (#25703)修复 UI 重定向 (#26409)
要求为 dags list-runs 提供 dag_id 参数 (#26357)
检查 dags 自动刷新的排队状态 (#25695)
修复
dag_owner_attributes
表的升级代码 (#25579)向任务日志 API 添加地图索引 (#25568)
确保清理具有错误的 dag 的僵尸任务 (#25550)
使额外的链接在 UI 中工作 (#25500)
同步插件 API 架构和定义 (#25524)
名字/姓氏可以为空 (#25476)
重构 DAG 页面以保持一致 (#25402)
在取消映射之前检查
expand_kwargs()
输入类型 (#25355)在计算地图长度时按键过滤 XCOM (#24530)
修复
ExternalTaskSensor
不适用于动态任务的问题 (#25215)添加异常捕获,以便在模板文件引发任何异常时发送默认电子邮件 (#24943)
使
MappedOperator
成员与BaseOperator
同步 (#24034)
其他/内部¶
为
MetaData
DB 添加自动生成的ERD
架构 (#26217)将序列化函数标记为内部 (#26193)
移除剩余的已弃用类并将其替换为
PEP562
(#26167)将
dag_edges
和task_group_to_dict
移动到相应的 util 模块 (#26212)延迟导入许多模块以提高导入速度 (#24486, #26239)
修复不正确的类型信息 (#26077)
向已弃用字典添加缺少的 contrib 类 (#26179)
在分叉以运行 DAG 处理器后重新配置/连接
ORM
(#26216)从世系处理中移除 cattrs。 (#26134)
移除已弃用的 contrib 文件,并将其替换为
PEP-562
getattr (#26153)使
BaseSerialization.serialize
对其他类“公开”。 (#26142)更改模板以使用人类可读的任务实例描述 (#25960)
将
/airflow/www
中的moment-timezone
从0.5.34
升级到0.5.35
(#26080)修复 Flask 弃用警告 (#25753)
向生成的运算类型添加
CamelCase
(#25887)修复迁移问题并收紧 CI 升级/降级测试 (#25869)
修复
SkipMixin
中的类型注释 (#25864)解决 setuptools 可编辑包路径问题 (#25848)
将 /airflow/www 中的
undici
从5.8.0 升级到 5.9.1
(#25801)向
_BranchPythonDecoratedOperator
添加 custom_operator_name 属性 (#25783)阐明
filename_template
弃用消息 (#25749)使用
ParamSpec
替换 Callable 中的...
(#25658)移除已弃用的模块 (#25543)
关于任务映射添加的文档 (#24489)
移除智能传感器 (#25507)
修复
elasticsearch
测试配置以避免关于已弃用模板的警告 (#25520)将 /airflow/ui 中的
terser
从4.8.0 升级到 4.8.1
(#25178)从 rest
API
文档生成typescript
类型 (#25123)将 utils 文件升级到
typescript
(#25089)将剩余的上下文文件升级到
typescript
。 (#25096)将文件迁移到
ts
(#25267)将网格表组件升级到
ts.
(#25074)如果返回 None,则跳过针对映射的
ti
进行的映射 (#25047)重构
js
文件结构 (#25003)将映射的 kwargs 自省移动到单独的类型 (#24971)
仅在进行类型检查时才断言 mypy 的内容 (#24937)
将
/airflow/www
中的moment
从2.29.3 升级到 2.29.4
(#24885)从我们的代码库中移除“坏字符” (#24841)
从
BashOperator
中移除xcom_push
标志 (#24824)将 Flask 钩子注册移动到文件末尾 (#24776)
将更多 javascript 文件升级到
typescript
(#24715)清理任务装饰器类型提示和文档字符串 (#24667)
在 UI 中保留提供程序连接额外字段的原始顺序 (#24425)
将
charts.css
重命名为chart.css
(#24531)将
grid.css
重命名为chart.css
(#24529)其他:通过
set_new_process_group
实用程序创建新的进程组 (#24371)Airflow UI 修复原型污染 (#24201)
升级
moto
版本 (#24222)从参考文档中移除未使用的
[github_enterprise]
(#24033)清理日志调用中的
f-strings
(#23597)为
JPype1
添加限制 (#23847)简化 json 响应 (#25518)
添加 min attrs 版本 (#26408)
仅文档更改¶
为
Celery
Flower 添加 URL 前缀设置 (#25986)更新示例中已弃用的配置 (#26037)
修复 taskflow 教程的错误链接 (#26007)
将教程重新组织到一个章节中 (#25890)
修复动态任务映射的概念文档 (#26002)
将代码示例从“经典”操作符更新为 taskflow (#25845, #25657)
添加手动修复
MySQL
字符集问题的说明 (#25938)在文档中首选本地快速入门 (#25888)
修复指向
Trigger Rules
的断开链接 (#25840)改进 Docker 文档 (#25735)
在文档中正确链接到 Dag 解析上下文 (#25722)
添加关于
task_instance_mutation_hook
用法的说明 (#25607)注意 TaskFlow API 会自动在任务之间传递数据 (#25577)
更新 DAG 运行以阐明 DAG 实际运行的时间 (#25290)
更新教程文档以包含操作符的定义 (#25012)
重写 Airflow 文档主页 (#24795)
修复
task-generated mapping
示例 (#23424)添加关于
2.2.0
中细微逻辑日期更改的说明 (#24413)在最佳实践代码示例中添加缺失的导入 (#25391)
Airflow 2.3.4 (2022-08-23)¶
重大更改¶
添加新的配置 [logging]log_formatter_class
,以修复 UI 上日志的时区显示问题 (#24811)¶
如果您在 [logging]logging_config_class
中使用自定义的 Formatter 子类,请从 airflow.utils.log.timezone_aware.TimezoneAware
而不是 logging.Formatter
继承。 例如,在您的 custom_config.py
中
from airflow.utils.log.timezone_aware import TimezoneAware
# before
class YourCustomFormatter(logging.Formatter):
...
# after
class YourCustomFormatter(TimezoneAware):
...
AIRFLOW_FORMATTER = LOGGING_CONFIG["formatters"]["airflow"]
AIRFLOW_FORMATTER["class"] = "somewhere.your.custom_config.YourCustomFormatter"
# or use TimezoneAware class directly. If you don't have custom Formatter.
AIRFLOW_FORMATTER["class"] = "airflow.utils.log.timezone_aware.TimezoneAware"
Bug 修复¶
在
MappedOperator
上禁用attrs
状态管理 (#24772)在 pickle
executor_config
之前将pod_override
序列化为 JSON (#24356)修复
pid
检查 (#24636)在登录期间轮换会话 ID (#25771)
修复具有重新调度模式的映射传感器 (#25594)
缓存自定义密钥后端,以便重用同一实例 (#25556)
添加右边距 (#25554)
修复在清除后运行时减少映射任务的映射长度的问题 (#25531)
修复存在悬空表时
airflow db reset
的问题 (#25441)更改
disable_verify_ssl
的行为 (#25023)在 dag.add_task 方法中设置默认任务组 (#25000)
删除索引的干扰力 (#25404)
删除无用的日志行 (#25347)
添加 mysql 索引提示,以便在关键部分查询中使用
task_instance.state
上的索引 (#25673)可配置的 umask 到所有守护进程化进程。 (#25664)
修复将 None 传递给模板过滤器时引发的错误 (#25593)
允许通配符 CORS 来源 (#25553)
修复“此会话的事务已回滚”的问题 (#25532)
修复
TaskCallbackRequest
中的序列化错误 (#25471)修复 - 通过绝对路径解析 bash (#25331)
向 ParamsDict 类添加
__repr__
(#25305)仅加载一次名称的分布 (#25296)
在调用时间将
TimeSensorAsync
target_time
转换为 UTC (#25221)在
expandGroup
之后调用updateNodeLabels
(#25217)停止 SLA 回调抢占其他回调并 DOS’ing
DagProcessorManager
队列 (#25147)修复
invalidateQueries
调用 (#25097)airflow/www/package.json
:添加名称、版本字段。 (#25065)不为回填 dag 运行自动刷新网格 (#25042)
修复 dag 详细信息页面上的标签链接 (#24918)
修复使用多个调度程序的僵尸任务处理 (#24906)
将 worker 上的日志服务器绑定到
IPv6
地址 (#24755) (#24846)为
%(asctime)s
添加%z
,以修复 UI 上日志的时区问题 (#24811)TriggerDagRunOperator.operator_extra_links
是属性 (#24676)将 DAG 超时回调发送到
prohibit_commit
之外的处理器 (#24366)不要依赖当前的 ORM 结构进行 db 清理命令 (#23574)
在清除 TIs 时清除下一个方法 (#23929)
两个类型修复 (#25690)
仅文档更改¶
更新 set-up-database.rst (#24983)
修复 mysql 设置文档中的语法 (#24893 (#24939)
注意 DAG 策略如何使用 default_args (#24804)
更新 PythonVirtualenvOperator Howto (#24782)
文档:为发行说明添加指向 Github PR 的超链接 (#24532)
杂项/内部¶
删除使用默认远程任务日志处理程序时的弃用警告 (#25764)
scheduler_job.py 中更清晰的方法名称 (#23702)
提升 cattrs 版本 (#25689)
在
sql_engine_collation_for_ids
文档中包含对external_executor_id
的缺失提及 (#25197)重构
DR.task_instance_scheduling_decisions
(#24774)对操作符额外链接进行排序 (#24992)
扩展
resolve_xcom_backend
函数级别文档 (#24965)将 FAB 升级到 4.1.3 (#24884)
在 2.2 破坏我们的测试之后,将 Flask 限制为 <2.3 (#25511)
将 astroid 版本限制为 < 2.12 (#24982)
将 javascript 编译移至主机 (#25169)
为 ParamSpec 提升 typing-extensions 和 mypy (#25088)
Airflow 2.3.3 (2022-07-09)¶
重大更改¶
我们将 Flask App Builder 升级到主要版本 4.* (#24399)¶
Flask App Builder 是 Airflow Webserver 的重要组件之一,因为它使用了许多对于运行 Webserver 并将其集成到企业环境中(尤其是身份验证)至关重要的依赖项。
FAB 4.* 将许多依赖项升级到主要版本,这使它们升级到修复了许多安全问题的版本。 进行了大量测试,以向后兼容的方式引入依赖项,但是依赖项本身在其内部实现了重大更改,因此,如果用户出于自己的目的使用这些库,则可能会影响到他们。
您可能需要在 Oauth 配置中应用的一项重要更改是添加 server_metadata_url
或 jwks_uri
,您可以在此问题中阅读更多相关信息。
这是与 FAB 4 一起提供的依赖项中的重大更改列表
Bug 修复¶
修复迷你任务调度程序中的异常 (#24865)
修复将标签附加到任务组的循环错误 (#24847)
修复
sensorinstance
的时间戳默认值 (#24638)将易错的
ti.task.dag
赋值移回try/except
块内 (#24533) (#24592)向
FSHook
添加缺失的类型 (#24470)在
airflow tasks test
的stdout
中屏蔽密钥 (#24362)DebugExecutor
使用ti.run()
而不是ti._run_raw_task
(#24357)修复
MySQL
连接的URI
构造函数中的错误 (#24320)在
openapi
中添加了缺失的scheduleinterval
可为空的 true 属性 (#24253)统一任务运行器的
return_code
接口 (#24093)处理带有重试的触发器中偶尔出现的死锁 (#24071)
删除映射
op_kwargs
的特殊序列化逻辑 (#23860)如果外部任务进入
failed_state
,则ExternalTaskSensor
遵循soft_fail
(#23647)修复
StatD
时间度量单位 (#21106)向 sqlalchemy TypeDecorators 添加
cache_ok
标志 (#24499)允许
LOGGING_LEVEL=DEBUG
(#23360)修复网格日期刻度 (#24738)
在网格视图中进行状态高亮显示去抖动 (#24710)
修复网格垂直滚动 (#24684)
不要尝试渲染已关闭组的子行 (#24637)
不要计算网格根实例 (#24528)
在过滤上游时保持网格视图选择 (#23779)
将
grid_data
端点速度提高 10 倍 (#24284)将每个运行的日志模板应用于日志处理程序 (#24153)
如果执行配置具有旧的 k8s 对象,则不要使调度程序崩溃 (#24117)
修复
TI.log_url
中的map_index
问题 (#24335)修复迁移
0080_2_0_2
- 在设置列非空之前替换空值 (#24585)如果使用旧的 Postgres 方案,则修补
sql_alchemy_conn
(#24569)播种
log_template
表 (#24511)修复已弃用的
log_id_template
值 (#24506)修复 toast 消息 (#24505)
为
task_instance
的级联删除添加索引 (#24488)如果 Pod JSON 编码失败,则返回空字典 (#24478)
通过自定义工具提示提高网格渲染性能 (#24417, #24449)
检查网格组摘要的
run_id
(#24327)优化 cron 计划 DAG 的日历视图 (#24262)
使用
get_hostname
而不是socket.getfqdn
(#24260)检查边缘节点是否实际存在 (#24166)
修复
useTasks
错误崩溃 (#24152)不要使重新排队的 TI 失败 (#23846)
减少网格视图 API 调用 (#24083)
将权限重命名为权限对 (#24065)
将
use_task_execution_date
替换为use_task_logical_date
(#23983)网格修复详细信息按钮截断和小 UI 调整 (#23934)
将任务实例状态
REMOVED
添加到已完成状态和成功状态 (#23797)修复清除后映射的任务不可变性 (#23667)
修复名称中带有点的 dag 的权限问题 (#23510)
修复关闭连接
dbapi.get_pandas_df
(#23452)检查包 DAG
schedule_interval
是否与时间表匹配 (#23113)修复添加到多个组的任务的解析错误 (#23071)
修复返回的 dag 运行的随机顺序 (#24405)
将影响运行/任务选择的
jsx
文件迁移到tsx
(#24509)修复示例的源代码链接 (#24386)
在
grid_data
端点上设置正确的Content-Type
和chartset
(#24375)
仅文档更改¶
更新模板文档以提及
extras
并格式化 AirflowVars
/Conns
(#24735)文档内置时间表 (#23099)
按字母顺序排列两个表格 (#23923)
明确说明用户不应使用 Maria DB (#24556)
向延迟代码示例添加导入 (#24544)
添加有关 2022 年 6 月图像再生的说明 (#24524)
小清理
get_current_context()
章节 (#24482)修复默认的 2.2.5
log_id_template
(#24455)更新从核心单独安装提供程序的描述 (#24454)
提及上下文变量和日志记录 (#24304)
杂项/内部¶
删除 Internet Explorer 支持 (#24495)
从
api_connexion
中删除魔术状态代码数字 (#24050)将 FAB 升级到
4.1.2
(#24619)将 Markdown 引擎切换到
markdown-it-py
(#19702)将
rich
更新到最新版本 (#24186)摆脱
TimedJSONWebSignatureSerializer
(#24519)更新 flask-appbuilder
authlib
/oauth
依赖项 (#24516)升级到
webpack
5 (#24485)添加
typescript
(#24337)检索日志请求中的 JWT 声明已标准化:我们使用
nbf
和aud
声明来表示请求的成熟度和受众。此外,“filename”有效负载字段用于保留日志名称。 (#24519)解决所有
yarn
测试警告 (#24722)升级到 react 18 和 chakra 2 (#24430)
重构
DagRun.verify_integrity
(#24114)将 FAB 升级到
4.1.1
(#24399)我们现在至少需要
Flask-WTF
0.15
(#24621)
Airflow 2.3.2 (2022-06-04)¶
没有重大更改。
错误修复¶
至少运行一次
check_migration
循环修复映射任务的网格视图 (#24059)
不同 DAG 运行类型的网格视图中的图标 (#23970)
更快的网格视图 (#23951)
禁止调用没有参数的 expand (#23463)
将缺失的
is_mapped
字段添加到任务响应中。 (#23319)DagFileProcessorManager:仅当当前进程不是会话领导者时才启动新的进程组 (#23872)
为尚未运行的 TI 屏蔽敏感值 (#23807)
将级联添加到
dag_tag
到dag
外键 (#23444)对独立的 dag 处理器使用
--subdir
参数值。 (#23864)通过悬停在图例行上来突出显示任务状态 (#23678)
修复并加速网格视图 (#23947)
如果网格任务实例为空,则防止 UI 崩溃 (#23939)
在
dag-processor
命令中删除冗余的注册退出信号 (#23886)将
__wrapped__
属性添加到_TaskDecorator
(#23830)修复 DbApiHook 中当
sql
为空列表时的 UnboundLocalError (#23816)启用点击自动完成下拉列表中的 DAG 所有者 (#23804)
简化
_airflow_moved
表的 flash 消息 (#23635)从甘特图中排除缺失的任务 (#23627)
仅文档更改¶
为 DB 迁移参考添加列名 (#23853)
杂项/内部¶
删除 xmltodict 的固定 (#23992)
Airflow 2.3.1 (2022-05-25)¶
重大更改¶
没有重大更改。
错误修复¶
在
CeleryExecutor
中自动重新调度已停止的排队任务 (#23690)修复展开/折叠所有按钮 (#23590)
网格视图状态过滤器 (#23392)
展开/折叠所有组 (#23487)
修复检索已弃用的非配置值 (#23723)
修复在未执行任务时在 UI 中渲染的机密信息。 (#22754)
修复提供程序导入错误匹配 (#23825)
修复忽略符号链接的回归 (#23535)
修复
dag-processor
获取元数据数据库配置 (#23575)修复展开非模板字段时的自动上游依赖 (#23771)
修复未捕获任务日志的问题 (#23684)
将
reschedule
添加到BaseSensorOperator
的序列化字段 (#23674)修改 db clean 以捕获 ProgrammingError 异常 (#23699)
从链接按钮中删除标题 (#23736)
修复网格详细信息标题文本重叠 (#23728)
确保
execution_timeout
为 timedelta (#23655)不要对降级运行预迁移检查 (#23634)
为日志表中的事件列添加索引 (#23625)
为
CeleryKubernetesExecutor
和LocalKubernetesExecutor
实现send_callback
方法 (#23617)修复
PythonVirtualenvOperator
templated_fields (#23559)将特定的 ID 排序规则也应用于
root_dag_id
(#23536)防止
KubernetesJobWatcher
卡在资源过旧的问题上 (#23521)修复当展开返回 none 的映射任务时调度程序崩溃的问题 (#23486)
修复同时启动多个运行时 dagrun 链接中断的问题 (#23462)
修复:解析日志时出现异常 #20966 (#23301)
处理 Web 服务器视图中的无效日期解析。 (#23161)
具有负开放槽的池不应阻止其他池 (#23143)
移动溢出、位置和填充 (#23044)
将查找错误行的方法更改为 LEFT OUTER JOIN。 (#23528)
仅当存在
moved
表时才计算错误的引用 (#23491)在视觉上区分任务组摘要 (#23488)
删除高度嵌套组的颜色变化 (#23482)
优化 2.3.0 预升级检查查询 (#23458)
为
core__sql_alchemy_conn__cmd
添加向后兼容性 (#23441)修复字面交叉乘积展开 (#23434)
修复 xcom 列表中损坏的任务实例链接 (#23367)
修复连接测试按钮 (#23345)
修复映射操作符的 CLI 命令
airflow dags show
(#23339)隐藏一些任务实例属性 (#23338)
如果服务器会因权限被拒绝而拒绝,则不显示网格操作 (#23332)
对
ti.mark_success_url
使用 run_id (#23330)修复更新用户身份验证统计信息 (#23314)
在映射实例表中使用
<Time />
(#23313)修复重复的 Kubernetes DeprecationWarnings (#23302)
将网格视图选择存储在 url 参数中 (#23290)
删除 Triggerer 中的自定义信号处理 (#23274)
当从 CLI 传递池时,覆盖 TaskInstance 的池。 (#23258)
如果在 DAG 运行 ID 中使用“/”则显示警告 (#23106)
在 try 代码块内添加标签。 (#21784)
仅限文档的更改¶
将
dag_processing.processor_timeouts
移动到计数器部分 (#23393)阐明 bundle extras 不应用于 PyPi 安装 (#23697)
同步文档中对 Postgres 和 K8S 的支持 (#23673)
替换文档中的 DummyOperator 引用 (#23502)
为
expand()
和partial()
添加仅限关键字参数的文档说明 (#23373)记录修复 2.3.0+ 升级时损坏的 Elasticsearch 日志 (#23821)
杂项/内部¶
为 airflow/configuration.py 添加类型提示 (#23716)
默认情况下从 docker-compose 禁用 Flower (#23685)
添加了 postgres 14 以支持版本(包括 breeze) (#23506)
添加 K8S 1.24 支持 (#23637)
将代码引用从树重构为网格 (#23254)
Airflow 2.3.0 (2022-04-30)¶
有关生产 Docker 镜像的相关更改,请参阅 Docker 镜像变更日志。
重大更改¶
将 execution_date
传递给 XCom.set()
、XCom.clear()
、XCom.get_one()
和 XCom.get_many()
已弃用 (#19825)¶
为了继续将 TaskInstance 绑定到 DagRun 的工作,XCom 条目现在也与 DagRun 绑定。请使用 run_id
参数指定 DagRun。
任务日志模板现在从元数据数据库读取,而不是从 airflow.cfg
读取 (#20165)¶
以前,任务的日志是在运行时从 [core] log_filename_template
和 [elasticsearch] log_id_template
配置值动态呈现的。这导致了一些不幸的特性,例如,在 Airflow 实例运行一段时间后修改配置值是不切实际的,因为所有现有的任务日志都保存在之前的格式下,并且无法使用新的配置值找到。
引入了一个新的 log_template
表来解决这个问题。此表与每次 Airflow 启动时上述配置值同步,并向每个 DAG 运行添加一个新字段 log_template_id
,以指向任务使用的格式(NULL
表示为了兼容性的第一个条目)。
最低 Kubernetes 库版本从 3.0.0
提升到 21.7.0
(#20759)¶
注意
这仅仅是关于更改 kubernetes
库,而不是 Kubernetes 集群。Airflow 对 Kubernetes 版本的支持在 安装先决条件 中进行了描述。
预计不会有行为上的改变。这是为了利用关于使用 EKS 刷新 Kubernetes API 令牌的 错误修复所必需的,这使得删除一些 解决方法代码成为可能。
XCom 现在由 run_id
定义,而不是 execution_date
(#20975)¶
作为在 Airflow 2.2 中开始的任务实例-DagRun 关系更改的延续,XCom 上的 execution_date
列已从数据库中删除,并被 ORM 级别的 关联代理字段替换。如果您直接访问 Airflow 的元数据数据库,您应该重写实现以使用 run_id
列。
请注意,数据库和 ORM 级别的 Airflow 元数据定义都被视为没有严格向后兼容性保证的实现细节。
非 JSON 可序列化参数已弃用 (#21135)。¶
以前可以使用不是 JSON 可序列化的 DAG 或任务参数默认值。
例如,这以前是可以工作的
@dag.task(params={"a": {1, 2, 3}, "b": pendulum.now()})
def datetime_param(value):
print(value)
datetime_param("{{ params.a }} | {{ params.b }}")
请注意 set
和 datetime
类型的使用,它们不是 JSON 可序列化的。此行为是有问题的,因为要在 DAG 运行配置中覆盖这些值,您必须使用 JSON,这可能会使这些参数不可覆盖。另一个问题是对参数验证的支持假设 JSON。在 Airflow 3.0 中将删除对非 JSON 可序列化参数的使用,在此之前,在解析时使用它们会产生警告。
对于 SQLAlchemy 1.4.0+,您必须在 sql_alchemy_conn
中使用 postgresql://
而不是 postgres://
(#21205)¶
当您使用 SQLAlchemy 1.4.0+ 时,您需要在 sql_alchemy_conn
中使用 postgresql://
作为方案。在以前版本的 SQLAlchemy 中,可以使用 postgres://
,但在 SQLAlchemy 1.4.0+ 中使用会导致
> raise exc.NoSuchModuleError(
"Can't load plugin: %s:%s" % (self.group, name)
)
E sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgres
如果您无法立即更改 URL 的方案,Airflow 将继续使用 SQLAlchemy 1.3,您可以降级 SQLAlchemy,但我们建议更新方案。详情请见 SQLAlchemy 变更日志。
auth_backends
替换 auth_backend
配置设置 (#21472)¶
以前,仅使用一个后端来授权使用 REST API。在 2.3 中,此项已更改为支持多个后端,以逗号分隔。将依次尝试每个后端,直到返回成功的响应。
此设置也用于已弃用的实验性 API,即使给出了多个选项,它也只使用第一个选项。
airflow.models.base.Operator
已删除 (#21505)¶
以前,有一个用于“类型提示”的空类 airflow.models.base.Operator
。这个类对于任何事情都从来没有真正有用过(它所做的一切都可以用 airflow.models.baseoperator.BaseOperator
更好地完成),并且已被删除。如果您依赖该类的存在,请使用 BaseOperator
(用于具体的操作符)、airflow.models.abstractoperator.AbstractOperator
(BaseOperator
和 AIP-42 MappedOperator
的基类)或 airflow.models.operator.Operator
(用于类型注释的联合类型 BaseOperator | MappedOperator
)。
DAGs 文件夹中的 Zip 文件不再允许使用 .py
扩展名 (#21538)¶
之前,DAGs 文件夹中的 zip 文件可以使用任何扩展名。现在,.py
文件将被加载为模块,而不会检查它是否为 zip 文件,因为这样可以减少 IO。如果 DAGs 文件夹中的 .py
文件是 zip 压缩文件,则解析时会因异常而失败。
auth_backends
包含 session (#21640)¶
为了允许 Airflow UI 使用 API,之前的默认授权后端 airflow.api.auth.backend.deny_all
已更改为 airflow.api.auth.backend.session
,如果设置了非默认值,则会自动将其添加到 API 授权后端列表中。
日志文件名和 elasticsearch log_id 的默认模板已更改 (#21734)¶
为了支持动态任务映射,每个任务实例日志的默认模板已更改。如果您的配置包含旧的默认值,它们将被就地升级。
如果您对新的配置值感到满意,则应删除 airflow.cfg
中的设置,并让其使用默认值。旧的默认值为
[core] log_filename_template
:{{ ti.dag_id }}/{{ ti.task_id }}/{{ ts }}/{{ try_number }}.log
[elasticsearch] log_id_template
:{dag_id}-{task_id}-{execution_date}-{try_number}
[core] log_filename_template
现在默认使用 “hive 分区样式” dag_id=<id>/run_id=<id>
,这可能会在某些较旧的 FAT 文件系统上引起问题。如果这影响到您,则必须更改日志模板。
如果您自定义了模板,则应确保它们包含 {{ ti.map_index }}
,如果您想使用动态映射的任务。
如果在升级后发现您的任务日志不再可访问,请尝试在 log_template
表中添加一行,其中 id=0
包含您之前的 log_id_template
和 log_filename_template
。例如,如果您在 2.2.5 中使用了默认值
INSERT INTO log_template (id, filename, elasticsearch_id, created_at) VALUES (0, '{{ ti.dag_id }}/{{ ti.task_id }}/{{ ts }}/{{ try_number }}.log', '{dag_id}-{task_id}-{execution_date}-{try_number}', NOW());
BaseOperatorLink 的 get_link
方法已更改为接受 ti_key
关键字参数 (#21798)¶
在 v2.2 中,我们“弃用”了将执行日期传递给 XCom.get 方法,但是对于运算符链接没有其他选择,因为它们只传递了一个 execution_date。
现在在 2.3 中,作为动态任务映射 (AIP-42) 的一部分,我们将需要在 XCom 行中添加 map_index 以支持 API 的“reduce”部分。
为了干净利落地支持这一点,我们更改了 BaseOperatorLink 的接口,使其接受 TaskInstanceKey 作为 ti_key
关键字参数(因为 execution_date + task 对于映射运算符不再是唯一的)。
将检测到现有签名(通过缺少 ti_key
参数),并继续工作。
ReadyToRescheduleDep
现在仅在 reschedule
为 True 时运行 (#21815)¶
当运行 ReadyToRescheduleDep
时,它现在会检查运算符上的 reschedule
属性,并且始终将其自身报告为已通过,除非将其设置为 True。如果您在自定义运算符上使用此 dep 类,则需要将此属性添加到运算符类。使用此 dep 类的内置运算符类(包括传感器和所有子类)已经具有此属性,不受影响。
运算符类上的 deps
属性应为类级别属性 (#21815)¶
为了支持运算符映射 (AIP 42),运算符类上的 deps
属性必须在类级别设置为一个集合。这意味着,如果自定义运算符将其实现为实例级变量,则它将无法用于运算符映射。这不会影响现有代码,但我们强烈建议您重组运算符的 dep 逻辑以支持新功能。
弃用:Connection.extra
必须是 JSON 编码的字典 (#21816)¶
TLDR¶
从 Airflow 3.0 开始,airflow 连接中的 extra
字段必须是 JSON 编码的 Python 字典。
是什么、为什么以及何时?¶
Airflow 的 Connection 用于存储凭据。对于不适合放入 user / password / host / schema / port 的信息存储,我们有 extra
字符串字段。它的目的始终是提供存储任意键值对,例如 SSH 钩子中的 no_host_key_check
或 GCP 中的 keyfile_dict
。
但是,由于该字段是字符串,因此从技术上来说,可以存储任何字符串值。例如,可以存储字符串值 'my-website.com'
并在钩子中使用它。但这是一种非常糟糕的做法。原因之一是可理解性:当您查看 extra
的值时,您不知道它的用途是什么。更好的做法是存储 {"api_host": "my-website.com"}
,它至少告诉您有关该值的某些信息。另一个原因是可扩展性:如果将 API 主机存储为简单的字符串值,如果您需要添加更多信息(例如 API 端点或凭据),该怎么办?然后,您将需要将字符串转换为字典,这将是一个重大更改。
因此,从 Airflow 3.0 开始,我们将要求 Connection.extra
字段存储 JSON 编码的 Python 字典。
我将如何受到影响?¶
对于 Airflow 代码库中包含的提供程序的的用户,您无需进行任何更改,因为在 Airflow 代码库中,我们不应允许钩子以这种方式滥用 Connection.extra
字段。
但是,如果您有任何存储非 JSON 字典的其他内容的自定义钩子,则必须更新它。如果这样做,您应该在检索或实例化此连接时看到警告(例如,它应该显示在任务日志中)。
要查看是否有任何连接需要更新,您可以运行以下命令
airflow connections export - 2>&1 >/dev/null | grep 'non-JSON'
这将捕获有关在 extra
字段中存储非 JSON 编码 Python 字典的其他内容的连接的任何警告。
tree
默认视图设置已重命名为 grid
(#22167)¶
如果您将 dag_default_view
配置选项或 default_view
参数设置为 DAG()
为 tree
,则需要更新您的部署。旧名称将继续工作,但会发出警告。
数据库配置已移至新部分 (#22284)¶
以下配置已从 [core]
移动到新的 [database]
部分。但是,在读取新选项时,将检查旧选项是否存在。如果存在,则将发出 DeprecationWarning,并使用旧选项。
sql_alchemy_conn
sql_engine_encoding
sql_engine_collation_for_ids
sql_alchemy_pool_enabled
sql_alchemy_pool_size
sql_alchemy_max_overflow
sql_alchemy_pool_recycle
sql_alchemy_pool_pre_ping
sql_alchemy_schema
sql_alchemy_connect_args
load_default_connections
max_db_retries
取消对自定义连接 UI 字段必须添加前缀的要求 (#22607)¶
Hook 可以通过实现 get_connection_form_widgets
方法为其连接类型定义自定义连接字段。这些自定义字段在 Web UI 中显示为额外的连接属性,但在内部它们存储在连接的 extra
字典字段中。由于技术原因,之前,当存储在 extra
字典中时,自定义字段的字典键必须采用 extra__<conn type>__<field name>
的形式。这导致在 UI 之外定义连接时更加繁琐,因为前缀 extra__<conn type>__
使其难以阅读和使用。通过 #22607,我们现在可以定义自定义字段,使其可以从 extra
中读取和存储,而无需前缀。
要启用此功能,请更新 get_connection_form_widgets
方法返回的字典,以删除键中的前缀。在内部,提供程序管理器仍将使用前缀以确保每个自定义字段都是全局唯一的,但是返回的 widget 字典中缺少前缀将向 Web UI 发出信号,以读取和存储没有前缀的自定义字段。请注意,这只是对 Web UI 行为的更改;以这种方式更新您的 hook 时,必须确保当您的hook 读取 extra
字段时,它还将检查带前缀的值以实现向后兼容性。
webserver.X_FRAME_ENABLED 配置现在按照描述工作 (#23222)。¶
在 Airflow 2.0.0 - 2.2.4 中,webserver.X_FRAME_ENABLED 参数的工作方式与其描述相反,将值设置为 “true” 会导致 “X-Frame-Options” 标头为 “DENY”(不允许在 iframe 中使用 Airflow)。当您将其设置为 “false” 时,不会添加标头,因此可以将 Airflow 嵌入到 iframe 中。默认情况下,Airflow 无法嵌入到 iframe 中。
在 Airflow 2.2.5 中引入了一个错误,导致无法禁用 Airflow 在 iframe 中工作。无论配置如何设置,都可以将 Airflow 嵌入到 iframe 中。
Airflow 2.3.0 恢复了该参数的原始含义。如果您将其设置为 “true”(默认),则可以将 Airflow 嵌入到 iframe 中(不添加标头),但是当您将其设置为 “false” 时,会添加标头,并且 Airflow 无法嵌入到 iframe 中。
新功能¶
添加动态任务映射 (AIP-42)
新的网格视图取代树视图 (#18675)
Python 运算符中的模板化
requirements.txt
(#17349)允许重用装饰的任务 (#22941)
将数据库配置移至新部分 (#22284)
添加
SmoothOperator
(#22813)使运算符的
execution_timeout
可配置 (#22389)事件时间表 (#22332)
支持使用自定义
ti_deps
规则进行 DAG 序列化 (#22698)支持在任务日志视图中下载日志 (#22804)
支持在失败时继续回填 (#22697)
添加
dag-processor
cli 命令 (#22305)添加在 LDAP 模式下创建用户的可能性 (#22619)
为计划作业添加
ignore_first_depends_on_past
(#22491)更新基本传感器运算符以支持 XCOM 返回值 (#20656)
在 UI 触发屏幕中添加运行 ID 选项 (#21851)
启用连接的 JSON 序列化 (#19857)
为 DAG 的批量更新添加 REST API 端点 (#19758)
在点击 DagRun 界面中添加队列按钮。 (#21555)
向
airflow dags
命令添加list-import-errors
(#22084)如果
standalone_dag_processor
配置为 True,则将回调存储在数据库中。 (#21731)添加 LocalKubernetesExecutor (#19729)
添加
celery.task_timeout_error
指标 (#21602)Airflow
db downgrade
cli 命令 (#21596)添加
ALL_SKIPPED
触发规则 (#21662)添加
db clean
CLI 命令以清除旧数据 (#20838)添加
celery_logging_level
(#21506)支持 DAG 文件解析的不同超时值 (#21501)
支持生成升级的 SQL 脚本 (#20962)
添加压缩序列化 DAG 数据选项 (#21332)
分支 Python 运算符装饰器 (#20860)
向 DAG 视图添加审计日志视图 (#20733)
为失败的 SLA 回调通知添加缺少的 StatsD 指标 (#20924)
为尊重下游触发规则添加
ShortCircuitOperator
可配置性 (#20044)允许在 Webserver 的页面标题中使用标记 (#20888)
添加跟踪 TaskInstance 状态更改的监听器插件 API (#20443)
添加上下文变量 hook 以注入更多环境变量 (#20361)
添加一个将所有任务设置为跳过的按钮 (#20455)
清理待处理的 pod (#20438)
添加配置以警告 UI 中的公共部署暴露 (#18557)
记录文件名模板 (#20165)
添加 Windows 扩展 (#16110)
在 Airflow 中显示直到下一个 dag_run 的近似时间 (#20273)
扩展 UI 上的配置窗口 (#20052)
向 CLI 添加显示 DAG 依赖关系功能 (#19985)
为 “airflow dags reserialize” 添加 cli 命令 (#19471)
向 Pool 模式(REST API)添加缺少的描述字段 (#19841)
引入 DagRun 操作以将状态更改为已排队。 (#19353)
添加 DAG 运行详细信息页面 (#19705)
将角色导出/导入添加到 cli 工具 (#18916)
将
dag_id_pattern
参数添加到/dags
端点 (#18924)
改进¶
在 UI 中显示 schedule_interval/timetable 描述 (#16931)
在 DAG 运行视图中添加列持续时间 (#19482)
允许使用没有前缀的自定义连接 extra 字段 (#22607)
将完成计数器初始化为零 (#23080)
改进可选提供程序功能消息的日志记录 (#23037)
resolve_template_files 中有意义的错误消息 (#23027)
更新 ImportError 项,而不是删除并重新创建它们 (#22928)
为 db reset 命令添加
--skip-init
选项 (#22989)支持从扩展名为 “.yml” 的文件导入连接 (#22872)
支持在
.airflowignore
文件中使用 glob 语法 (#21392) (#22051)当数据为单个页面时隐藏分页 (#22963)
支持在 Web UI 中对 DAG 进行排序 (#22671)
将
has_access
装饰器的速度提高约 200 毫秒 (#22858)将 XComArg 添加到 Airflow 模块的惰性导入列表中 (#22862)
向 REST API dags/dag_id/details 端点添加更多字段 (#22756)
不要在 UI 中显示不相关/重复/“内部”任务属性 (#22812)
无需在 current_state 中加载整个 ti (#22764)
Pickle dag 异常字符串修复 (#22760)
更好地验证 Localexecutor 的并行选项 (#22711)
将回填异常记录到 Sentry (#22704)
在回填期间重试 MySQL 死锁提交 (#22696)
向 REST API get DAG(dags/dag_id) 端点添加更多字段 (#22637)
使用时间表为当年生成计划的天数 (#22055)
禁用 celery worker 的连接池 (#22493)
使日期选择器标签在触发 dag 视图中可见 (#22379)
在 airflow 变量中公开
try_number
(#22297)添加通用连接类型 (#22310)
向 taskinstance 完成日志消息添加更多字段 (#22262)
如果调度程序未运行,则暂停自动刷新 (#22151)
显示 DagModel 详细信息。 (#21868)
将 pip_install_options 添加到 PythonVirtualenvOperator (#22158)
为
airflow dags list
CLI 命令显示导入错误 (#21991)当页面隐藏时暂停自动刷新 (#21904)
默认参数类型检查 (#21809)
增强 XComArg 上用于 UX 的魔术方法 (#21882)
py 文件不必在 refresh_dag 中检查
is_zipfiles
(#21926)修复 TaskDecorator 类型提示 (#21881)
为变量添加“显示记录”选项 (#21342)
尽可能使用数据库来加快
airflow dag
子命令的速度 (#21793)REST API:在任务实例中添加呈现的字段。 (#21741)
将默认身份验证后端更改为会话 (#21640)
在解析期间不要检查
py
DAG 文件是否已压缩 (#21538)将 XCom 实现切换为使用
run_id
(#20975)在浏览视图上的操作日志 (#21569)
实现多个 API 身份验证后端 (#21472)
更改
get_connection()
中连接信息的日志级别详细信息 (#21162)在 airflow db shell 中支持 mssql (#21511)
支持 celery 的配置
worker_enable_remote_control
(#21507)记录
CgroupTaskRunner
中的内存使用情况 (#21481)现代化与 DAG 相关的 URL 路由并将“树”重命名为“网格” (#20730)
将僵尸检测移至
SchedulerJob
(#21181)将运行
airflow
的速度提高 6 倍 (#21438)添加更多 SQL 模板字段渲染器 (#21237)
简化 fab has access 查找 (#19294)
仅为默认方法记录上下文 (#21244)
仅当至少有一个正在运行时才记录触发状态 (#21191)
在提供程序中添加可选功能。 (#21074)
为 @task.python 更好地推断 multiple_outputs (#20800)
改进字符串类型和非属性
template_fields
的处理 (#21054)删除不必要的依赖项/版本要求 (#20979)
为类型提示正确指定 TaskFlow API 的重载 (#20933)
将 notification_sent 引入到 SlaMiss 视图 (#20923)
将任务装饰器重写为组合 (#20868)
在浏览视图中的筛选器中添加“大于/小于或等于” (#20602) (#20798)
在任务命令中重写 DAG 运行检索 (#20737)
将大型 DAG(5k+ 任务)的 DagRun 创建速度提高 25-130% (#20722)
使原生环境像沙箱一样具有 Airflow 特性 (#20704)
当参数值具有意外类型时,提供更好的错误 (#20648)
在 DagRun REST API (List Dag Runs) 中按状态筛选 (#20485)
防止具有自定义日志记录处理程序的任务中出现指数级内存增长 (#20541)
在日志记录 Mixin 中设置默认记录器 (#20355)
减少来自 www 的弃用警告 (#20378)
在所有使用 nvd3.lineChart 的图表的 x 轴上添加小时和分钟的时间格式 (#20002)
当任务请求的槽位多于定义的池时,添加特定警告 (#20178)
UI:更新持续时间列,以提高人类可读性 (#20112)
使用 Viewer 角色作为示例公共角色 (#19215)
正确实现 DAG 参数字典复制 (#20216)
ShortCircuitOperator
通过返回 python_callable 结果推送 XCom (#20071)为因 Dagrun 超时而终止的任务添加清晰的日志记录 (#19950)
更改僵尸检测消息的日志级别 (#20204)
更好的确认提示 (#20183)
仅执行正在运行的 DagRuns 的 TI (#20182)
必要时检查并在命令中运行迁移 (#18439)
仅在存在僵尸时记录日志 (#20118)
增加电子邮件和用户名的长度 (#19932)
在 UI 中为 TI 添加更多过滤选项 (#19910)
根据连接类型动态启用“测试连接”按钮 (#19792)
避免使用 HA 调度器在 postgres 服务器日志中乱扔 “无法获取锁” 的错误信息 (#19842)
重命名
Connection.get_hook
参数,使其与SqlSensor
和SqlOperator
中的相同。 (#19849)使用 PR #18718 中的最新更改在 SqlSensor 中添加 hook_params。 (#18431)
通过延迟提供程序初始化来加快 Web 服务器的启动时间 (#19709)
在 PythonOperator 中可配置
XCOM
值的日志记录 (#19378)最小化生产 js 文件 (#19658)
在
BaseSqlOperator
中添加hook_params
(#18718)在哈希组件中添加缺失的“end_date” (#19281)
更友好的 airflow plugins 命令输出 + 添加时间表 (#19298)
添加传感器默认超时配置 (#19119)
更新
taskinstance
REST API 模式以包含 dag_run_id 字段 (#19105)在 bash operator 中添加将用户定义的环境变量附加到系统环境变量的功能 (#18944)
重复连接:添加了在创建连接之前查询连接 ID 是否存在的逻辑 (#18161)
Bug 修复¶
使用继承的 ‘trigger_tasks’ 方法 (#23016)
在 DAG 依赖项检测器中,使用类类型而不是类名称 (#21706)
修复 tasks 被 schedule_after_task_execution 错误跳过的问题 (#23181)
修复 X-Frame 启用的行为 (#23222)
允许
extra
在连接有效负载中可为空,按照模式 (REST API) 。(#23183)修复 Web UI 中 DAG 级别访问检查的
dag_id
提取 (#23015)修复 UI 上日志的时区显示 (#23075)
在图形错误中包含消息 (#23021)
更改触发器下拉列表的左侧位置 (#23013)
不要为旧的 DAG 运行添加计划任务 (#23007)
为 TaskInstance 引用添加悬空行检查 (#22924)
验证连接
CLI
命令中的输入参数 (#22688)修复触发事件有效负载未持久化到数据库中的问题 (#22944)
在命令
db reset
中删除 “airflow moved” 表 (#22990)为任务组工具提示添加最大宽度 (#22978)
为
external_task_ids
添加模板支持。 (#22809)允许
DagParam
保存虚值 (#22964)修复池指标中的回归 (#22939)
即使使用池,也要按优先级排序任务 (#22483)
从延期恢复时不要清除 XCom (#22932)
处理
get_logs_with_metadata endpoint
中的无效 JSON 元数据。 (#22898)修复针对 dag_run 的悬空行进行的升级前检查 (#22850)
修复了回填对调度器的干扰 (#22701)
支持回填运行的 conf 参数覆盖 (#22837)
正确地在
PoolSlotsAvailableDep
状态中插入池名称 (#22807)修复带有
render_template_as_native_obj
的email_on_failure
(#22770)修复
DagFileProcessorManager
上的处理器清理 (#22685)防止任务实例的元名称冲突 (#22783)
删除甘特图的 json 解析 (#22780)
对缺少 dagrun 的检查应了解版本 (#22752)
修复
ScheduleInterval
规范 (#22635)修复非运行和未提交任务的任务状态 (#22410)
即使在 DEBUG 级别也不要记录 hook 连接详细信息 (#22627)
当从 kubernetes 客户端接收到空日志时,停止崩溃 (#22566)
修复有关时区更改的错误 (#22525)
修复当一个任务有 end_date 时,整个 DAG 停止的问题 (#20920)
在任务执行期间使用 logger 打印消息。 (#22488)
确保在异常处理期间不会跳过终结器 (#22475)
更新智能传感器文档并对
is_smart_sensor_compatible()
进行小修复 (#22386)修复与 Airflow 2.1 的
run_id
k8s 和 elasticsearch 兼容性问题 (#22385)允许在
BranchPythonOperator
上except_skip
None (#20411)修复不正确的日期时间详细信息(DagRun 视图)(#21357)
删除 secrets 后端中不正确的弃用警告 (#22326)
删除用于 K8s 令牌刷新的
RefreshConfiguration
解决方法 (#20759)在 GET
/connections/<connection>
端点中屏蔽 extras (#22227)将任务直接提交到执行器时设置
queued_dttm
(#22259)解决了讨论 #22233 中提到的一些教程问题 (#22236)
将 docker 修饰符的默认 python 可执行文件更改为 python3 (#21973)
当 NOTSET 时,不要验证参数是否为 JSON (#22000)
添加每个 DAG 删除权限 (#21938)
修复在 kubernetes 23 库中处理某些 None 参数的问题。 (#21905)
修复在
bulk_write_to_db
中处理空(None)标签的问题 (#21757)修复 DAG 日期范围错误 (#20507)
从 views.py 中删除
request.referrer
(#21751)使
DbApiHook
使用 Connection 中的get_uri
(#21764)修复一些迁移 (#21670)
正确地[反]序列化任务上的资源 (#21445)
将参数
dag_id
,task_id
等添加到XCom.serialize_value
(#19505)更新测试连接功能以使用自定义表单字段 (#21330)
修复所有“高” npm 漏洞 (#21526)
修复错误地从角色中删除操作而不是权限的错误。 (#21483)
修复 FAB/SecurityManager 中 SQLA 1.4 的关系连接错误 (#21296)
在 SQLAlchemy 1.4 中对 MSSQL 使用 Identity 而不是 Sequence (#21238)
确保
on_task_instance_running
监听器可以访问任务 (#21157)触发 DAG 时返回到相同的位置 (#20955)
修复
@task_group
中的任务 ID 去重 (#20870)为一些 FAB 迁移添加降级 (#20874)
仅在触发 DAG 时验证参数 (#20802)
修复
airflow trigger
cli (#20781)修复池中的任务实例迭代以防止阻塞 (#20816)
允许依赖整个
@task_group
(#20671)如果任务在延期后继续,则使用原始任务的
start_date
(#20062)禁用任务实例列表视图页面中的编辑按钮 (#20659)
修复包名称导入错误 (#20519) (#20519)
当获取清理 pods 列表时,删除
execution_date
标签 (#20417)删除不需要的 FAB REST API 端点 (#20487)
修复包含斜杠的 Cloudwatch 日志组 arn 的解析 (#14667) (#19700)
MySQL 的 TIMESTAMP 列的健全性检查 (#19821)
允许将默认 celery 命令组与从基于 Celery 的执行器子类化的执行器一起使用。 (#18189)
将
class_permission_name
移动到 mixin,以便它适用于所有类 (#18749)调整 trimmed_pod_id 并将 ‘.’ 替换为 ‘-’ (#19036)
将 custom_headers 传递给 send_email 和 send_email_smtp (#19009)
确保在示例 dags 中使用
catchup=False
(#19396)编辑 OpenApi 描述文件中的永久链接 (#19244)
从搜索类型提前列表选择时直接导航到 DAG (#18991)
[次要] 修复主页上的填充 (#19025)
仅文档更改¶
更新 DAG 文件处理的文档 (#23209)
现在使用发布说明和
towncrier
替换 changelog/updating (#22003)修复 tracking-user-activity.rst 中的错误引用 (#22745)
从文档中删除对
rbac = True
的引用 (#22725)文档:更新执行器绑定依赖项的描述 (#22601)
更新 check-health.rst (#22372)
关于 Docker Compose 可定制性的更强的语言 (#22304)
更新 logging-tasks.rst (#22116)
添加
sql_alchemy_connect_args
的示例配置 (#22045)更新 best-practices.rst (#22053)
添加有关 DAG 暂停/停用/删除的信息 (#22025)
添加您可能想要的一些集成测试 dag 的简短示例 (#22009)
对 CHANGELOG 运行包含性语言检查 (#21980)
为 Sendgrid 添加详细的电子邮件文档 (#21958)
为
db upgrade
/db downgrade
添加文档 (#21879)更新 modules_management.rst (#21889)
修复 SqlAlchemy 1.4 方案更改上的 UPDATING 部分 (#21887)
更新 TaskFlow 教程文档,以展示如何传递“操作符级别”的参数。 (#21446)
修复文档 - 将“decreasing”替换为“increasing” (#21805)
向文档添加另一种动态生成 DAG 的方式 (#21297)
添加有关所需时间同步的额外信息 (#21685)
更新 debug.rst 文档 (#21246)
将
postgres://
的用法替换为postgresql://
(#21205)修复
CeleryExecutor
文档中的任务执行过程 (#20783)
杂项/内部¶
恢复已弃用的安全管理器函数 (#23243)
将
DummyOperator
的用法替换为EmptyOperator
(#22974)弃用
DummyOperator
,建议使用EmptyOperator
(#22832)删除不必要的 python 3.6 条件 (#20549)
将 /airflow/www 中的
moment
从 2.29.1 升级到 2.29.2 (#22873)将 /airflow/www 中的
prismjs
从 1.26.0 升级到 1.27.0 (#22823)将 /airflow/www 中的
nanoid
从 3.1.23 升级到 3.3.2 (#22803)将 /airflow/www 中的
minimist
从 1.2.5 升级到 1.2.6 (#22798)从 db init 命令中删除 DAG 解析 (#22531)
更新我们对执行器绑定依赖项的方法 (#22573)
在 FAB 模型中使用
Airflow.Base.metadata
(#22353)限制 docutils 以使我们的文档再次美观 (#22420)
添加 Python 3.10 支持 (#22050)
[FEATURE] 添加 1.22 1.23 K8S 支持 (#21902)
现在 SQLA 为 1.4+,删除 pandas 上限 (#22162)
如果使用了旧的 postgres 方案,则修补
sql_alchemy_conn
(#22333)防止意外滥用 XCom.get_value() (#22244)
对迁移的文件名进行排序 (#22168)
不要尝试为 Celery 表自动生成迁移 (#22120)
需要 SQLAlchemy 1.4 (#22114)
升级 sphinx-jinja (#22101)
为 SQLAlchemy 添加兼容性垫片以避免警告 (#21959)
将
xcom.dagrun_id
重命名为xcom.dag_run_id
(#21806)弃用非 JSON
conn.extra
(#21816)将
jsonschema
的上限版本升级到 5.0 (#21712)弃用辅助实用程序
days_ago
(#21653)现在
sphinx-autoapi
支持类型提示,删除`:type`
行 (#20951)静默测试中的弃用警告 (#20900)
在更新 TI 的状态(UI 和 REST API)时,使用
DagRun.run_id
而不是execution_date
(#18724)向 Airflow 包添加上下文存根 (#20817)
更新 Kubernetes 库版本 (#18797)
将
PodLauncher
重命名为PodManager
(#20576)删除 Python 3.6 支持 (#20467)
为不可 JSON 序列化的参数添加弃用警告 (#20174)
将 TaskMixin 重命名为 DependencyMixin (#20297)
弃用将 execution_date 传递给 XCom 方法 (#19825)
删除
get_readable_dags
和get_editable_dags
,以及get_accessible_dags
。 (#19961)删除 postgres 9.6 支持 (#19987)
删除了硬编码的连接类型。检查 hook 是否为 DbApiHook 的实例。 (#19639)
添加 kubernetes 1.21 支持 (#19557)
添加 FAB 基类并显式设置 import_name。 (#19667)
删除用于处理自动更改视图权限的未使用状态转换。 (#19153)
Chore:将枚举用于
__var
和__type
成员 (#19303)使用 fab 模型 (#19121)
整合 Airflow 安全管理器和 FAB 默认值之间的方法名称 (#18726)
删除 Python 3.10 的 distutils 用法 (#19064)
删除 SchedulerJob 上冗余的
max_tis_per_query
初始化 (#19020)从 API 中删除已弃用的
init_role()
用法 (#18820)删除 dbapi hook 上的重复代码 (#18821)
Airflow 2.2.5,(2022-04-04)¶
重大更改¶
没有重大更改。
错误修复¶
检查并禁止 sqlite 的相对路径 (#22530)
修复了 dask 执行器和测试 (#22027)
修复了指向 celery 文档的断开链接 (#22364)
修复了尝试和着陆时间图表提供的错误数据 (#21928)
修复了未分配触发器的分配 (#21770)
修复触发器
--capacity
参数 (#21753)修复页面加载时的图形自动刷新 (#21736)
修复目录的文件系统传感器 (#21729)
修复游离
order_by(TaskInstance.execution_date)
(#21705)正确处理 LocalFileSystem 秘密中的多个“=” (#21694)
在本地执行器中记录异常 (#21667)
在 Web UI 上禁用
default_pool
删除 (#21658)扩展
typing-extensions
以与 python 3.8+ 一起安装 #21566 (#21567)处理未使用的连接池 (#21565)
修复任务失败时记录 JDBC SQL 错误的问题 (#21540)
在存在覆盖时过滤掉默认配置。 (#21539)
修复资源
__eq__
检查 (#21442)修复当
min_file_process_interval
较高时,max_active_runs=1
不调度运行的问题 (#21413)减少过时 DAG 失活导致的 DB 负载 (#21399)
修复触发器和调度程序之间的竞争条件 (#21316)
修复从任务实例日志视图触发 DAG 重定向的问题 (#21239)
在触发器异常中记录回溯 (#21213)
触发器可能会使用连接;确保我们屏蔽密码 (#21207)
更新
ExternalTaskSensorLink
以处理模板化的external_dag_id
(#21192)确保
clear_task_instances
设置有效的运行状态 (#21116)修复:更新自定义连接字段处理 (#20883)
对于执行期间引发的异常,将堆栈跟踪截断为 DAG 用户代码 (#20731)
修复重复触发器创建竞争条件 (#20699)
修复任务卡在计划状态的问题 (#19747)
修复:不要渲染未定义的图形边缘 (#19684)
仅当
X_FRAME_ENABLED
设置为 true 时,才将X-Frame-Options
标头设置为 DENY。 (#19491)
仅文档更改¶
向回调文档添加
on_execute_callback
(#22362)添加有关指定数据库架构的文档。 (#22347)
修复教程中管道示例的 postgres 部分 (#21586)
扩展 DAG 和任务状态的文档并更新触发规则文档 (#21382)
更新 Airflow 时需要进行数据库升级 (#22061)
从文档中删除误导性的 MSSQL 信息 (#21998)
杂项¶
将新的 Airflow Trove 分类器添加到 setup.cfg (#22241)
在 TriggerRunner 中将
to_delete
重命名为to_cancel
(#20658)将 Flask-AppBuilder 更新到
3.4.5
(#22596)
Airflow 2.2.4,(2022-02-22)¶
重大更改¶
错误修复¶
从 Flask-Appbuilder 添加缺少的登录提供程序相关方法 (#21294)
修复因作业表缺少
dag_id
索引导致的 DAG 删除缓慢问题 (#20282)添加一个会话后端以将会话数据存储在数据库中 (#21478)
仅显示正在运行的 DAG 或最后一个已完成的 DAG 的任务状态 (#21352)
在日志处理程序中使用兼容数据间隔填充 (#21289)
修复 DAG 运行的生成 run_id 和逻辑日期不匹配的问题 (#18707)
修复 TriggerDagRunOperator 额外链接 (#19410)
添加在远程用户模式下创建用户的可能性 (#19963)
避免重新调度任务时发生死锁 (#21362)
修复 DAG 首次运行的错误调度时间 (#21011)
修复执行缺失 DAG 的任务实例时调度程序崩溃的问题 (#20349)
当 DAG 被标记为失败时,延迟任务不会取消 (#20649)
删除
Dag.get_task_instances()
中重复的 dag_run 连接 (#20591)避免删除 DAG 时意外丢失数据 (#20758)
修复
/rendered-k8s
视图中的会话使用问题 (#21006)修复两次运行
airflow dags backfill --reset-dagruns
时出现的错误 (#21062)不在
refresh_from_task
中设置TaskInstance.max_tries
(#21018)在 dagrun REST API 端点中,正文中不再需要 dag_id (#21024)
在内部安全管理器中添加来自 Azure OAUTH 响应的角色 (#20707)
如果用户具有 DAG “读取” 权限,则允许查看 DagRuns 和 TIs (#20663)
修复两次运行
airflow dags test <dag_id> <execution_dt>
时出现错误的问题 (#21031)切换到非供应商提供的最新 connexion 库 (#20910)
将 flask-appbuilder 升级到
>=3.3.4
(#20628)将 celery 升级到
5.2.3
(#19703)将 croniter 从
<1.1
提升到<1.2
(#20489)避免为
TaskInstance.get_template_context()
调用DAG.following_schedule()
(#20486)修复 (standalone):删除硬编码的 Web 服务器端口 (#20429)
删除实验性 API 中不必要的日志记录 (#20356)
取消忽略 DeprecationWarning (#20322)
Kubernetes Secret 属性的深拷贝导致问题 (#20318)
修复 (dag-dependencies):修复箭头样式 (#20303)
添加任务实例检索锁的重试 (#20030)
在使用 dogstatsd 时正确发送计时指标(修复 schedule_delay 指标)(#19973)
增强字典类型推断的
multiple_outputs
(#19608)修复 Amazon SES 电子邮件后端 (#18042)
锁定 MarkupSafe,直到我们能够升级 Flask/Jinja (#21664)
仅文档更改¶
在 DAG 运行文档中添加了解释逻辑日期的概念 (#21433)
添加关于环境变量中变量优先级的注释 (#21568)
更新错误文档以包含 before_send 选项 (#21275)
扩充 xcom 文档 (#20755)
添加关于“最新”约束的文档和发布策略 (#21093)
在 Python API 参考中添加 DAG 模型的链接 (#21060)
添加枚举参数示例 (#20841)
比较 taskgroup 和 subdag (#20700)
添加关于保留的
params
关键字的注释 (#20640)改进关于
Params
的文档 (#20567)修复 MySQL 数据库创建代码中的拼写错误(设置数据库文档)(#20102)
添加 requirements.txt 描述 (#20048)
清理文档中
default_args
的用法 (#19803)将 docker-compose 说明添加到 conn localhost (#19076)
更新教程的 CSV 摄取代码 (#18960)
添加 Pendulum 1.x -> 2.x 升级文档 (#18955)
清理文档中动态
start_date
值 (#19607)关于多个池槽位的文档 (#20257)
使用如何解决升级后警告的详细代码示例更新 upgrading.rst (#19993)
其他¶
弃用实验性 API 中的某些函数 (#19931)
弃用智能传感器 (#20151)
Airflow 2.2.3, (2021-12-21)¶
重大更改¶
没有重大更改。
错误修复¶
惰性 Jinja2 上下文 (#20217)
排除
snowflake-sqlalchemy
v1.2.5 (#20245)不再使用旧的
importlib.resources
API (#19091)将
setgid
作为 fork 任务运行器中执行的第一个命令 (#20040)修复启动
DagProcessorAgent
时出现的竞争条件 (#19935)将
httpx
限制为 <0.20.0 (#20218)将提供程序导入错误记录为调试警告 (#20172)
提升所需的最低
alembic
版本 (#20153)修复甘特视图中的日志链接 (#20121)
通过将 chown 移动到使用 sudo 来修复 #19028 (#20114)
取消
MarkupSafe
的上限 (#20113)修复修订日志时的无限递归 (#20039)
修复数据库降级 (#19994)
上下文类处理弃用 (#19886)
修复可能引用未声明变量的问题 (#19933)
验证赋值时
DagRun
状态是否有效 (#19898)解决 MSSQL 偶尔出现的死锁问题 (#19856)
启用任务运行设置以能够重新初始化 (#19845)
修复同一任务的日志端点 (#19672)
显式转换宏日期时间字符串输入 (#19592)
当缺少任务实例时,不会崩溃并显示堆栈跟踪 (#19478)
修复任务日志视图中的日志时区 (#19342) (#19401)
修复:将任务组工具提示添加到图形视图 (#19083)
在表单和表格中重命名执行日期 (#19063)
简化“无效 TI 状态”消息 (#19029)
处理准备文件路径队列时文件不存在的情况 (#18998)
不为具有导入错误的 DAG 创建 dagrun (#19367)
修复在连接类型之间切换时字段重新标记的问题 (#19411)
KubernetesExecutor
如果使用,应默认为模板镜像 (#19484)修复任务实例 API 无法列出状态为
None
的任务实例 (#19487)修复
DagFileProcessor.manage_slas
中的 IntegrityError (#19553)将数据间隔字段声明为可序列化的 (#19616)
放宽时间表类验证 (#19878)
修复用于查找已排队的
KubernetesExecutor
pod 的标签 (#19904)修复使用复制时 MySQL 的已移动数据迁移检查 (#19999)
仅文档更改¶
当 example_dags 缺少依赖项时发出警告,但不显示回溯 (#20295)
可延迟运算符文档说明 (#20150)
确保所有示例 DAG 都能正常工作 (#19355)
更新核心示例 DAG 以在适用的情况下使用 TaskFlow API (#18562)
在任务重试时添加 xcom 清除行为 (#19968)
添加一个简短的章节,重点介绍如何调整连接的秘密格式 (#19859)
添加有关 Apache Airflow 支持的操作系统的信息 (#19855)
更新文档以反映更改
base_log_folder
需要更新其他配置 (#19793)KubernetesExecutor
pod 模板文档中的免责声明 (#19686)添加关于
execution_date
->run_id
的升级说明 (#19593)在 TaskFlow 教程文档中扩展
.output
运算符属性信息 (#19214)添加示例 SLA DAG (#19563)
添加一个用于修补 DAG 的正确示例 (#19465)
将 DAG 文件处理描述添加到调度程序概念 (#18954)
更新 TaskFlow API 教程文档中的显式参数示例 (#18907)
添加回关于 Python/@task 中上下文用法的文档 (#18868)
添加端点/字段在 REST API 中添加的发布日期 (#19203)
更好的
pod_template_file
示例 (#19691)添加关于如何自定义镜像入口点的描述 (#18915)
镜像中 DAG 的 pod 模板示例不应有 DAG 挂载 (#19337)
Airflow 2.2.2 (2021-11-15)¶
重大更改¶
没有重大更改。
错误修复¶
修复检查变量是否存在时出现的错误 (#19395)
修复当
relativedelta
作为schedule_interval
传递时的序列化问题 (#19418)修复 SQL Server 中悬空 TaskInstance 行的移动问题 (#19425)
修复甘特视图中的任务实例模态 (#19258)
修复具有设置数据类型的
Params
的序列化 (#19267)在调用
.is_alive()
之前检查 job 对象是否为None
(#19380)当 pod 无法处理时,任务应立即失败 (#19359)
修复数据库迁移的降级问题 (#19390)
仅将 SchedulerJobs 标记为失败,而不是任何 job (#19375)
修复“标记为”确认页面上的消息 (#19363)
错误修复:在读取数据间隔之前检查下一次运行是否存在 (#19307)
修复具有默认编码/排序规则的 MySQL 数据库迁移 (#19268)
修复隐藏的工具提示位置 (#19261)
sqlite_default
连接已硬编码为/tmp
,请改用gettempdir
(#19255)修复 DAG 代码页面上的切换换行 (#19211)
澄清 CLI 中的“未找到 DAG”错误消息 (#19338)
在 SLA 中添加关于
schedule_interval
的注释 (#19173)使用
execution_date
检查TriggerDagRunOperator
是否存在DagRun
(#18968)在
PoolSlotsAvailableDep
中添加显式会话参数 (#18875)FAB 仍然需要
WTForms<3.0
(#19466)修复
catchup=True
时缺少 dagrun 的问题 (#19528)
仅文档更改¶
为“时间表”添加缺失的参数文档 (#19282)
改进 Kubernetes Executor 文档 (#19339)
更新 docker 文档中使用的镜像标签
Airflow 2.2.1 (2021-10-29)¶
重大更改¶
已删除 Param
的 default
的默认值¶
在 Airflow 2.2.0 中引入的 Param
,意外地将默认值设置为 None
。此默认值已被删除。如果希望 None
作为默认值,请显式地将其设置为该值。例如
Param(None, type=["null", "string"])
现在,如果你解析一个没有默认值的 Param
且没有传递任何值,你将会收到一个 TypeError
错误。例如:
Param().resolve() # raises TypeError
max_queued_runs_per_dag
配置已被移除¶
[core]
部分中的 max_queued_runs_per_dag
配置选项已被移除。之前,此选项控制调度器在 DAG 中可以创建的排队 dagrun 的数量。现在,最大数量由 DAG 的 max_active_runs
内部控制。
错误修复¶
修复 SchedulerJob 中意外的提交错误 (#19213)
添加 DagRun.logical_date 作为属性 (#19198)
在任务完成时清除
ti.next_method
和ti.next_kwargs
(#19183)更快地将 PostgreSQL 数据库迁移到 Airflow 2.2 (#19166)
移除
Swagger2Specification._set_defaults
类方法中不正确的类型注释 (#19065)向 jobs check 命令添加 TriggererJob (#19179, #19185)
当下次运行为
None
时隐藏工具提示 (#19112)使用数据间隔兼容层创建 TI 上下文 (#19148)
修复排队 dag 运行更改
catchup=False
的行为 (#19130, #19145)当 DAG 或任务完成时,向日志添加详细信息。(#19097)
警告不支持 Python 3.10 (#19060)
通过使用
max_active_runs
限制排队 dagrun 的创建来修复追赶 (catchup) 问题 (#18897)防止在缺少序列化 DAG 时调度器崩溃 (#19113)
不要为其他数据库安装 SQLAlchemy/Pendulum 适配器 (#18745)
解决
libstdcpp
TLS 错误 (#19010)将
ds
、ts
等改回使用逻辑日期 (#19088)确保在标记为失败/成功/跳过时任务状态不会改变 (#19095)
放宽打包要求 (#19087)
将触发页面标签重命名为逻辑日期 (#19061)
允许 Param 支持
None
的默认值 (#19034)从数据库反序列化时升级旧的 DAG/任务参数格式 (#18986)
不要将 ENV 和 _cmd 烘焙到非 sudo 的临时配置中 (#18772)
CLI:如果缺少参数,则在加载 DAG 之前使
backfill
命令失败 (#18994)BugFix:在插入到
task_fail
时违反 NOT NULL 的空执行日期 (#18979)尝试在数据库升级中移动“悬空”行 (#18953)
在
SchedulerJob._process_executor_events
中锁定 TI 查询的行 (#18975)发送回退之前的 Sentry (#18980)
修复 Airflow 2.2.0 中的
XCom.delete
错误 (#18956)在启动触发器之前检查 python 版本 (#18926)
仅文档更改¶
更新 TaskInstances 和 DagRuns 的访问控制文档 (#18644)
添加有关托管 Postgres 的 keepalive 的信息 (#18850)
文档:向日志记录和监控添加回调部分 (#18842)
将 PATCH DAGrun 与其他 DAGRun 端点分组在一起 (#18885)
Airflow 2.2.0 (2021-10-11)¶
重大变更¶
注意:将数据库升级到 2.2.0
或更高版本可能需要一些时间才能完成,特别是当您有一个很大的 task_instance
表时。
worker_log_server_port
配置已移至 logging
部分。¶
worker_log_server_port
配置选项已从 [celery]
部分移至 [logging]
部分,以便在不同的执行器之间重用。
pandas
现在是一个可选依赖项¶
以前,pandas
是一个核心要求,因此当您运行 pip install apache-airflow
时,它会查找 pandas
库并在它不存在时安装它。
如果您想安装与 Airflow 兼容的 pandas
,您可以在安装 Airflow 时使用 [pandas]
额外选项,例如 Python 3.8 和 Airflow 2.1.2
pip install -U "apache-airflow[pandas]==2.1.2" \
--constraint https://raw.githubusercontent.com/apache/airflow/constraints-2.1.2/constraints-3.8.txt"
none_failed_or_skipped
触发规则已弃用¶
TriggerRule.NONE_FAILED_OR_SKIPPED
被 TriggerRule.NONE_FAILED_MIN_ONE_SUCCESS
替换。这只是名称更改,没有进行功能更改。此更改是向后兼容的,但是 TriggerRule.NONE_FAILED_OR_SKIPPED
将在下一个主要版本中删除。
虚拟触发规则已弃用¶
TriggerRule.DUMMY
被 TriggerRule.ALWAYS
替换。这只是名称更改,没有进行功能更改。此更改是向后兼容的,但是 TriggerRule.DUMMY
将在下一个主要版本中删除。
DAG 并发设置已重命名¶
airflow.cfg
中的 [core] dag_concurrency
设置已重命名为 [core] max_active_tasks_per_dag
,以便更好地理解。
它是每个 DAG 中允许同时运行的最大任务实例数。要计算 DAG 同时运行的任务数,请将该 DAG 的所有 DAG 运行的正在运行的任务数相加。
这可以在 DAG 级别使用 max_active_tasks
进行配置,并且可以在 airflow.cfg
中设置为 [core] max_active_tasks_per_dag
的默认值。
之前:
[core]
dag_concurrency = 16
现在:
[core]
max_active_tasks_per_dag = 16
类似地,DAG.concurrency
已重命名为 DAG.max_active_tasks
。
之前:
dag = DAG(
dag_id="example_dag",
start_date=datetime(2021, 1, 1),
catchup=False,
concurrency=3,
)
现在:
dag = DAG(
dag_id="example_dag",
start_date=datetime(2021, 1, 1),
catchup=False,
max_active_tasks=3,
)
如果您正在使用 DAGs Details API 端点,请使用 max_active_tasks
而不是 concurrency
。
任务并发参数已重命名¶
为了更好地理解,BaseOperator.task_concurrency
已被弃用并重命名为 max_active_tis_per_dag
。
此参数控制每个任务在 dag_runs
中同时运行的任务实例数。
之前:
with DAG(dag_id="task_concurrency_example"):
BashOperator(task_id="t1", task_concurrency=2, bash_command="echo Hi")
之后:
with DAG(dag_id="task_concurrency_example"):
BashOperator(task_id="t1", max_active_tis_per_dag=2, bash_command="echo Hi")
processor_poll_interval
配置已重命名为 scheduler_idle_sleep_time
¶
为了更好地理解,airflow.cfg
中的 [scheduler] processor_poll_interval
设置已重命名为 [scheduler] scheduler_idle_sleep_time
。
它控制在 SchedulerJob
内没有调度任何内容时,调度器循环结束时的“睡眠时间”。
之前:
[scheduler]
processor_poll_interval = 16
现在:
[scheduler]
scheduler_idle_sleep_time = 16
标记成功/失败会自动清除失败的下游任务¶
在图表中标记任务成功/失败时,其处于失败/上游失败状态的下游任务将自动清除。
[core] store_dag_code
已被删除¶
虽然 DAG 序列化自 Airflow 2 以来是一项严格的要求,但我们允许用户控制 Web 服务器在显示代码视图时查找的位置。
如果 [core] store_dag_code
设置为 True
,则调度器将 DAG 文件中的代码存储在数据库中(在 dag_code
表中)作为纯字符串,并且 Web 服务器只是从同一个表中读取它。如果该值设置为 False
,则 Web 服务器会从 DAG 文件中读取它。
虽然此设置对于 Airflow < 2 来说是有意义的,但它给一些用户造成了一些困惑,他们认为此设置控制 DAG 序列化。
从 Airflow 2.2 开始,当用户单击 DAG 的代码视图时,Airflow 将仅查找数据库。
清除正在运行的任务会将其状态设置为 RESTARTING
¶
以前,清除正在运行的任务会将其状态设置为 SHUTDOWN
。任务被终止并进入 FAILED
状态。在 #16681 之后,清除正在运行的任务会将其状态设置为 RESTARTING
。任务有资格重试,而无需进入 FAILED
状态。
删除 TaskInstance.log_filepath
属性¶
此方法长期以来返回不正确的值,因为它没有考虑到不同的记录器配置和任务重试。我们还开始支持更多不使用文件的高级工具,因此在每种情况下都无法确定正确的文件路径,例如 Stackdriver 不使用文件,而是根据标签识别日志。因此,我们决定删除此属性。
如果您需要读取日志,可以使用 airflow.utils.log.log_reader.TaskLogReader
类,该类没有上述限制。
如果传感器超时,它将不会重试¶
之前,当传感器超时时,会重试,直到达到最大重试次数 retries
。因此,传感器的有效超时时间为 timeout * (retries + 1)
。 现在此行为已更改。如果达到 timeout
,传感器将立即失败,而不会重试。如果希望传感器继续运行更长时间,请设置更大的 timeout
。
可以使用 [core] default_pool_task_slot_count
设置默认任务池槽位数量。¶
默认情况下,任务在 default_pool
中运行。 default_pool
初始化时具有 128
个槽位,用户可以通过 UI/CLI/API 为现有部署更改槽位数量。
对于新的部署,您可以在 [core]
部分使用 default_pool_task_slot_count
设置。此设置在 default_pool
已存在的现有部署中不起任何作用。
以前,这是由 [core]
部分中未记录的 non_pooled_task_slot_count
控制的。
Webserver DAG 刷新按钮已删除¶
现在 DAG 解析器同步 DAG 权限,不再需要手动刷新 DAG。因此,已从 UI 中删除刷新 DAG 的按钮。
此外,/refresh
和 /refresh_all
Web 服务器端点也已被删除。
TaskInstances 现在需要 DagRun¶
在正常操作下,数据库中的每个 TaskInstance 行都有 DagRun 行,但是可以手动删除 DagRun,Airflow 仍然会调度 TaskInstances。
在 Airflow 2.2 中,我们更改了这一点,现在有一个数据库级别的外键约束,确保每个 TaskInstance 都有一个 DagRun 行。
在更新到此 2.2 版本之前,如果存在任何“悬空”的 TaskInstance 行,您必须手动解决任何不一致(添加回 DagRun 行,或删除 TaskInstances)。
作为此更改的一部分,已删除 [scheduler]
部分下的 clean_tis_without_dagrun_interval
配置选项,并且它不再起作用。
TaskInstance 和 TaskReschedule 现在定义 run_id
而不是 execution_date
¶
作为 TaskInstance-DagRun 关系更改的一部分,TaskInstance 和 TaskReschedule 上的 execution_date
列已从数据库中删除,并被 ORM 级别的 association proxy 字段替换。 如果您直接访问 Airflow 的元数据库,则应重写实现以使用 run_id
列。
请注意,数据库和 ORM 级别的 Airflow 元数据定义都被视为没有严格向后兼容性保证的实现细节。
DaskExecutor - Dask Worker 资源和队列¶
如果 Dask Worker 没有使用与指定的队列匹配的补充资源启动,现在将导致 AirflowException
,而之前它会忽略 queue
参数。
从 Web UI 触发的 DAG 运行的逻辑日期现在将其亚秒组件设置为零¶
由于手动 DAG 运行的逻辑日期 (execution_date
) 的生成方式发生了变化,手动 DAG 运行的逻辑日期可能与其触发时间不匹配,但其亚秒部分会归零。例如,在 2021-10-11T12:34:56.78901
触发的 DAG 运行的逻辑日期将设置为 2021-10-11T12:34:56.00000
。
这可能会影响一些依赖此特性来检测运行是手动触发还是自动触发的逻辑。 请注意,dag_run.run_type
是此目的的更权威的值。 此外,如果您需要在“下一次执行日期”计算中区分自动触发和手动触发的运行,请考虑使用新的数据间隔变量,它们在两种运行类型之间提供更一致的行为。
新功能¶
AIP-39:为 Airflow 添加(可自定义的)时间表类,以实现更丰富的调度行为 (#15397, #16030, #16352, #17030, #17122, #17414, #17552, #17755, #17989, #18084, #18088, #18244, #18266, #18420, #18434, #18421, #18475, #18499, #18573, #18522, #18729, #18706, #18742, #18786, #18804)
AIP-40:添加可延迟的“异步”任务 (#15389, #17564, #17565, #17601, #17745, #17747, #17748, #17875, #17876, #18129, #18210, #18214, #18552, #18728, #18414)
添加 Docker Taskflow 装饰器 (#15330, #18739)
添加 Airflow Standalone 命令 (#15826)
在仪表板上显示来自本地设置的警报消息 (#18284)
使用 json-schema 的高级参数 (#17100)
能够从 UI 或 API 测试连接 (#15795, #18750)
向 UI 添加下一次运行 (#17732)
添加默认权重规则配置选项 (#18627)
添加一个日历字段,以便在触发 DAG 时选择 DAG 的执行日期 (#16141)
允许为 BashOperator 设置特定的
cwd
(#17751)在 DAG 视图中显示导入错误 (#17818)
添加预/后执行挂钩 [实验性] (#17576)
在 Airflow UI 的管理选项卡下添加用于查看提供程序的表格 (#15385)
将 secrets 后端/日志记录/身份验证信息添加到 provider yaml (#17625)
向 Jinja 环境添加日期格式过滤器 (#17451)
引入
RESTARTING
状态 (#16681)Webserver:在手动触发时取消暂停 DAG (#16569)
创建新用户的 API 端点 (#16609)
添加
insert_args
以支持传输替换 (#15825)为文件系统传感器中的 glob 添加递归标志 (#16894)
将 conn 添加到 jinja 模板上下文 (#16686)
为
TaskGroup
添加default_args
(#16557)允许从 UI 添加重复的连接 (#15574)
允许通过 CORS 配置选项指定多个 URL (#17941)
实现用于 DAG 删除的 API 端点 (#17980)
添加 DAG 运行端点以标记 dagrun 成功或失败(#17839)
添加对
kinit
选项[-f|-F]
和[-a|-A]
的支持 (#17816)使用 Dask Worker 资源为
DaskExecutor
提供队列支持 (#16829, #18720)使自动刷新间隔可配置 (#18107)
改进¶
Airflow UI 的小改进 (#18715, #18795)
将
processor_poll_interval
重命名为scheduler_idle_sleep_time
(#18704)检查日志级别的允许值 (#18651)
修复使用
dagrun_conf
触发不存在的 dag 时出现的错误 (#18655)向
TaskInstanceModelView
添加 muldelete 操作 (#18438)避免在干净的数据库安装期间导入 DAG (#18450)
要求在 DAG 权限上具有 can_edit 才能修改 TaskInstances 和 DagRuns (#16634)
使 Kubernetes 作业描述适合一行日志 (#18377)
如果任务实例状态为 null 或未定义,则始终绘制边框 (#18033)
包容性语言 (#18349)
改进了僵尸任务的日志处理 (#18277)
添加
Variable.update
方法并改进变量键冲突的检测 (#18159)在触发 DAG 页面上添加有关参数的注释 (#18166)
将
TaskInstance
和TaskReschedule
的 PK 从execution_date
更改为run_id
(#17719)在
BaseOperator.chain()
中添加TaskGroup
支持 (#17456)允许在 REST API 中按标签过滤 DAG (#18090)
优化 Providers Manager 的导入 (#18052)
为不兼容的社区提供程序添加警告功能 (#18020)
序列化
template_ext
属性以在 UI 中显示它 (#17985)添加
robots.txt
和X-Robots-Tag
标头 (#17946)重构
BranchDayOfWeekOperator
、DayOfWeekSensor
(#17940)更新错误消息以引导用户进行自助 (#17929)
更新到 Celery 5 (#17397)
添加指向提供程序文档的链接 (#17736)
删除 Marshmallow schema 警告 (#17753)
将
none_failed_or_skipped
重命名为none_failed_min_one_success
触发规则 (#17683)删除
[core] store_dag_code
并使用数据库获取 Dag 代码 (#16342)将
task_concurrency
重命名为max_active_tis_per_dag
(#17708)在提供程序管理器中单独延迟导入 Hook (#17682)
在外部任务传感器中添加对多个任务 ID 的支持 (#17339)
在 airflow tasks run 命令中将
execution_date
替换为run_id
(#16666)使用户 cli 命令的输出更加一致 (#17642)
就地打开相对额外链接 (#17477)
将
worker_log_server_port
选项移动到日志记录部分 (#17621)使用 gunicorn 来服务 worker 生成的日志 (#17591)
改进 Group id 的验证 (#17578)
简化 404 页面 (#17501)
添加 XCom.clear,以便在自定义 XCom 后端中可以挂钩 (#17405)
为
SubDagOperator
添加弃用通知 (#17488)支持调度器和运行器上 DAGS 文件夹位于不同的位置 (#16860)
删除 /dagrun/create 并禁用 F.A.B 生成的编辑表单 (#17376)
允许在
template_fields_renderers
中指定字典路径 (#17321)如果缺少 virtualenv,则提前报错 (#15788)
处理添加到 Extra 和自定义字段的连接参数 (#17269)
修复
airflow celery stop
以接受 pid 文件。 (#17278)删除 DAG 刷新按钮 (#17263)
弃用虚拟触发规则,改用 always (#17144)
详细说明导入
airflow_local_settings
失败的原因 (#17195)当
BashOperator
失败时,在AirflowException
字符串中包含退出代码。 (#17151)为 chain() 添加 EdgeModifier 支持 (#17099)
只允许在自定义连接中使用支持的字段类型 (#17194)
密钥后端故障转移 (#16404)
当使用
SQLite
或SequentialExecutor
时,在 Web 服务器上发出警告 (#17133)扩展
pod_override
中定义的init_containers
(#17537)客户端过滤 dag 依赖项 (#16253)
改进 CLI 中的执行器验证 (#17071)
防止并行运行
airflow db init/upgrade
迁移和设置。 (#17078)更新
chain()
和cross_downstream()
以支持XComArgs
(#16732)改进图形视图刷新 (#16696)
当任务实例因异常失败时,记录该异常 (#16805)
为
serve-logs
和LocalExecutor
设置进程标题 (#16644)将
test_cycle
重命名为check_cycle
(#16617)添加 schema 作为
DbApiHook
实例属性 (#16521, #17423)提高与 MSSQL 的兼容性 (#9973)
提高对不支持的连接类型的透明度 (#16220)
调用基于资源的 fab 方法 (#16190)
使用时区格式化更多日期 (#16129)
将已弃用的
dag.sub_dag
替换为dag.partial_subset
(#16179)将
AirflowSensorTimeout
视为立即失败,而不进行重试 (#12058)标记成功/失败会自动清除失败的下游任务 (#13037)
为导入 dag 错误添加关闭/打开指示器 (#16073)
添加可折叠的导入错误 (#16072)
始终在 TI 的
action_clear
视图中返回响应 (#15980)添加 CLI 命令以按电子邮件删除用户 (#15873)
为 FAB 权限使用资源和操作名称 (#16410)
重命名 DAG 并发设置(
[core] dag_concurrency
),以便更容易理解 (#16267, #18730)日历 UI 改进 (#16226)
重构:
SKIPPED
不应再次记录为SUCCESS
(#14822)删除
dnspython
的版本限制 (#18046, #18162)在 TriggerDagRunOperator 中接受自定义运行 ID (#18788)
Bug Fixes¶
使 REST API 补丁用户端点的工作方式与 UI 相同 (#18757)
为已清除的任务正确设置
start_date
(#18708)确保在对其状态运行更新(REST API)之前存在 task_instance (#18642)
使
AirflowDateTimePickerWidget
成为必填字段 (#18602)在删除旧的渲染任务字段时重试死锁事务 (#18616)
修复当重试延迟为零时,
retry_exponential_backoff
除以零的错误 (#17003)改进 UI 处理日期时间的方式 (#18611, #18700)
错误修复:dag_bag.get_dag 应返回 None,而不是引发异常 (#18554)
仅当它是有效实例时才显示任务模态 (#18570)
修复从模板中访问渲染的
{{ task.x }}
属性 (#18516)添加缺少的电子邮件类型的连接 (#18502)
不要将 flash 用于“同一页面”UI 消息。 (#18462)
修复任务组工具提示 (#18406)
正确修复 dagrun 更新状态端点 (#18370)
正确处理执行器和调度器之间的 ti 状态差异 (#17819)
修复 KubernetesExecutor 中卡住的“已排队”任务 (#18152)
不要将 zip DAG 永久添加到
sys.path
(#18384)修复 MSSQL 数据库中的随机死锁 (#18362)
停用已从文件中删除的 DAG (#17121)
当将 dags 同步到数据库时,删除现在未使用的
dag_tag
行 (#8231)错误时正常关闭调度器 (#18092)
修复迷你调度器不遵守
wait_for_downstream
dep (#18338)将异常传递给 Debug Executor 的
run_finished_callback
(#17983)使
XCom.get_one
返回完整值,而不是缩写值 (#18274)在 task_runner 中关闭临时文件时使用 try/except (#18269)
如果下一个运行不为 None,则显示下一个运行 (#18273)
修复
XCom.set
中的数据库会话处理 (#18240)修复手动运行的作业未设置 external_executor_id 的问题 (#17207)
修复在序列化 Dag 表中删除 zip 压缩的 Dags (#18243)
针对重复的电子邮件在用户添加时返回显式错误 (#18224)
即使上次运行数据为空,也删除加载点 (#18230)
交换 dag 导入错误下拉菜单图标 (#18207)
在迁移配置时自动创建部分 (#16814)
默认情况下在读取任务日志时将编码设置为 utf-8 (#17965)
将父 dag 权限应用于子 dag (#18160)
将 MySQL 的 id 校对更改为区分大小写 (#18072)
在
StandardTaskRunner
中记录任务启动异常 (#17967)将权限应用于
self._error_file
(#15947)修复空白的 dag 依赖项视图 (#17990)
为 dag 依赖项和配置页面添加缺少的菜单访问权限 (#17450)
修复在
DateTimeSensor
中传递 Jinja 模板的问题 (#17959)修复限制 ImportError 可见性的错误 (#17924)
修复
traceback.html
中的语法 (#17942)修复
MySQLdb
驱动程序的DagRunState
枚举查询 (#17886)修复了“操作”组中的按钮大小。 (#17902)
仅显示用户可以访问的 DAG 的导入错误 (#17835)
显示来自 zip 文件的所有 import_errors (#17759)
修复 EXTRA_LOGGER_NAMES 参数和相关文档 (#17808)
为 Airflow 和 gunicorn 使用一个解释器 (#17805)
修复:Mysql 5.7 id utf8mb3 (#14535)
修复 dag_processing.last_duration 指标随机漏洞 (#17769)
自动为 MySQL 使用
utf8mb3_general_ci
校对 (#17729)修复:
TaskInstance
的过滤条件不起作用 #17535 (#17548)不要在 CeleryExecutor.trigger_tasks 中使用 TaskInstance (#16248)
删除 MSSQL 中升级的锁 (#17213)
通过 Python 调用创建 virtualenv (#17156)
确保在运行
DAG.cli()
时 DAG 是无环的 (#17105)翻译非 ASCII 字符 (#17057)
更改
model_list
模板中None
比较的逻辑 (#16893)使 UI 和 POST /task_instances_state API 端点具有相同的行为 (#16539)
确保如果缺少 sla 则跳过任务 (#16719)
修复直接使用
cached_property
模块 (#16710)修复 TI 成功确认页面 (#16650)
修改 Python virtualenv jinja 模板中的返回值检查 (#16049)
修复 dag 依赖项搜索 (#15924)
使自定义 JSON 编码器支持
Decimal
(#16383)错误修复:允许仅使用
dag_id
和空的subdir
清除任务 (#16513)在调用测试连接之前将端口值转换为数字 (#16497)
处理缺少/空的序列化 DAG 依赖项 (#16393)
在使用
@dag
装饰器时正确设置dag.fileloc
(#16384)修复 TI 成功/失败链接 (#16233)
在
airflow/www/views.py
中正确实现自动完成的提前返回 (#15940)向后移植修复,以允许将 Loggers 腌制到 Python 3.6 (#18798)
修复当有任务进入
reschedule
状态时,回填作业无法运行的错误 (#17305, #18806)
仅文档更改¶
更新
dagbag_size
文档 (#18824)更新有关捆绑包额外内容的文档 (#18828)
修复错误的 Postgres
search_path
设置说明 (#17600)从 Docker 镜像中删除
AIRFLOW_GID
(#18747)改进 BranchPythonOperator 在没有要跟踪的 task_id 时的错误消息 (#18471)
改进对用户的指导,告诉他们在导入超时时该怎么做 (#18478)
更好地解释调度器微调 (#18356)
为 airflow 池导入添加了示例 JSON (#18376)
向文档添加
sla_miss_callback
部分 (#18305)解释子进程挂钩的 sentry 默认环境变量 (#18346)
重构安装页面 (#18282)
改进快速入门 docker-compose 警告和文档 (#18164)
对 MSSQL 的生产级支持 (#18382)
更新文档中不起作用的示例 (#18067)
删除 default_args 模式 + 为 Core Airflow 示例 DAG 添加 get_current_context() 用法 (#16866)
更新 max_tis_per_query 以便在网页上更好地呈现 (#17971)
添加基于团队授权的 Github Oauth 示例 (#17896)
更新 docker.rst (#17882)
示例 xcom 更新 (#17749)
添加关于通过环境变量添加的连接的文档警告 (#17915)
修复了 upgrade-check.rst 中错误的文档 (#17903)
将 Brent 添加到提交者列表 (#17873)
改进了关于模块管理的文档 (#17757)
从 metrics.rst 中移除已弃用的指标 (#17772)
确保充分解释 docker-compose 的“生产就绪” (#17731)
文档:使用 Airflow 1.10.x EOL 日期更新升级到 v2 的文档 (#17710)
文档:从文档字符串中替换已弃用的参数 (#17709)
更仔细地描述 dag 所有者 (#17699)
更新说明,以避免误解 (#17701)
文档:使
DAG.is_active
在 API 中为只读 (#17667)更新关于 Python 3.9 支持的文档 (#17611)
修复 MySQL 数据库字符集指令 (#17603)
记录覆盖
XCom.clear
以进行数据生命周期管理 (#17589)修复 airflow core 文档中的路径 (#17567)
文档(celery):重新措辞,添加实际的多个队列示例 (#17541)
文档:添加 FAQ 以加速解析大量 dag 文件 (#17519)
改进新用户的镜像构建文档 (#17409)
文档:从 MariaDB JIRA URL 中删除不必要的参数 (#17296)
更新关于 MariaDB 和多个调度器的警告 (#17287)
文档:建议在所有 Airflow 组件上使用相同的配置 (#17146)
将关于掩码的文档移动到新页面 (#17007)
建议在最佳实践文档中使用环境变量而不是 Airflow 变量 (#16926)
文档:更好地描述
pod_template_file
(#16861)添加 Aneesh Joseph 为 Airflow 提交者 (#16835)
文档:为教程文档添加新的管道示例 (#16548)
从文档中删除 upstart (#16672)
添加新的提交者:
Jed
和TP
(#16671)文档:修复升级文档中
flask-ouathlib
为flask-oauthlib
(#16320)文档:修复创建连接的文档 (#16312)
文档:修复
Elasticsearch
的 URL (#16275)对 README.md 文件进行小的改进 (#16244)
修复
dag_concurrency
的文档 (#16177)检查代码片段的语法正确性 (#16005)
在文档中添加 wheel 包的正确链接 (#15999)
添加
default_pool
插槽的文档 (#15997)在快速入门文档中添加内存使用警告 (#15967)
更新示例
KubernetesExecutor
git-sync
pod 模板文件 (#15904)文档:修复 Taskflow API 文档 (#16574)
为教程文档添加新的管道示例 (#16084)
更新 DAG 文档字符串以包含
render_template_as_native_obj
(#16534)更新关于设置 SMTP 的文档 (#16523)
文档:修复 API 动词从
POST
到PATCH
(#16511)
杂项/内部¶
重命名变量以与代码逻辑保持一致 (#18685)
简化之前跨行拆分的字符串 (#18679)
修复
BranchPythonOperator
的异常字符串 (#18623)创建用户时添加多个角色 (#18617)
将 FAB 的基础安全管理器移至 Airflow 中。 (#16647)
删除不必要的 css 状态颜色 (#18461)
将
boto3
更新为<1.19
(#18389)提高
airflow.security.kerberos module
的覆盖率 (#18258)修复 Amazon Kinesis 测试 (#18337)
修复 provider 测试访问
importlib-resources
的问题 (#18228)在使用 SubDagOperator 的测试中消除警告 (#18275)
修复
range(len())
到enumerate
的用法 (#18174)自动完成视图的测试覆盖率 (#15943)
将“packaging”添加到核心要求 (#18122)
将 LoggingMixins 添加到 BaseTrigger (#18106)
修复
main
构建中的文档构建 (#18035)删除
tenacity
的上限 (#17593)删除冗余的
numpy
依赖项 (#17594)将
mysql-connector-python
升级到最新版本 (#17596)使
pandas
成为可选的核心依赖项 (#17575)向 airflow.utils.helpers 添加更多类型 (#15582)
Chore: 在
airflow/utils/db.py
中进行一些代码清理 (#17090)重构:从 DAG 处理中删除 processor_factory (#16659)
从 DAG 处理中删除 AbstractDagFileProcessorProcess (#16816)
更新 TaskGroup 类型 (#16811)
将
click
更新到 8.x (#16779)删除剩余的 Pylint 禁用 (#16760)
删除重复的 try,在 create_session 中已经有一个 try (#16701)
从我们的工具链中删除 pylint (#16682)
重构不必要函数调用的用法 (#16653)
将类型注释添加到 setup.py (#16658)
删除 SQLAlchemy <1.4 约束 (#16630) (注意:我们的依赖项仍然有 <1.4 的要求)
重构
dag.clear
方法 (#16086)使用
DAG_ACTIONS
常量 (#16232)使用更新的
_get_all_non_dag_permissions
方法 (#16317)为内置 FAB 方法添加更新名称的包装器 (#16077)
删除
TaskInstance.log_filepath
属性 (#15217)删除
airflow/www/app.py
中不必要的函数调用 (#15956)将
plyvel
移动到 google provider extra (#15812)更新权限迁移以使用新的命名方案 (#16400)
将资源和操作名称用于 FAB (#16380)
将对
find_permission_view_menu
的调用替换为get_permission
包装器 (#16377)修复
fab_logging_level
的已弃用默认值为WARNING
(#18783)允许在使用
CeleryKubernetesExecutor
时从 UI 运行任务 (#18441)
Airflow 2.1.4 (2021-09-18)¶
重大更改¶
没有重大更改。
Bug 修复¶
修复弃用错误消息,而不是静默它 (#18126)
限制调度程序创建的排队 dagrun 的数量 (#18065)
修复从排队到运行的
DagRun
执行顺序未正确遵循的问题 (#18061)修复
max_active_runs
不允许将排队的 dagrun 移动到运行的问题 (#17945)避免没有权限的用户的重定向循环 (#17838)
避免用户没有角色时出现的无限重定向循环 (#17613)
修复 graph TI 模态上的日志链接 (#17862)
如果用户没有权限,则隐藏变量导入表单 (#18000)
改进 dag/任务并发检查 (#17786)
修复清除任务实例端点重置所有 DAG 运行的错误 (#17961)
修复传递给视图的不正确参数 (#18083) (#18085)
修复
LocalTaskJob
中的 Sentry 处理程序导致错误的问题 (#18119)限制
colorlog
版本(6.x 不兼容)(#18099)仅在悬停时显示暂停/取消暂停工具提示 (#17957)
改进具有打开组的 dag 的图形视图加载时间 (#17821)
增加 Run 列的宽度 (#17817)
修复正在运行的 tis 的错误查询 (#17631)
将 root 添加到树刷新 URL (#17633)
不要从 UI 中删除正在运行的 DAG (#17630)
提高 Provider 包功能的发现性
不要让
create_dagrun
覆盖显式的run_id
(#17728)pid 重置的回归以允许在心跳后启动任务 (#17333)
当 pod 在运行时被 DELETED 时,将任务状态设置为失败 (#18095)
建议内核不要缓存 Airflow 生成的日志文件 (#18054)
在
_check_for_stalled_adopted_tasks
方法中对采用的任务进行排序 (#18208)
仅限文档的更改¶
更新 airflow/config_templates/config.yml 中添加的版本字段 (#18128)
改进关于如何处理动态任务生成的描述 (#17963)
改进到操作符和钩子引用的交叉链接 (#17622)
文档:修复用于 Docker 堆栈的替换 Airflow 版本 (#17711)
使提供程序的运算符/钩子引用更可用 (#17768)
更新关于新的
connection-types
提供程序元数据的描述建议当变量包含敏感数据时,使用 secrets backend (#17319)
分离从源代码安装的部分,并添加更多详细信息 (#18171)
文档:使用
closer.lua
脚本下载源代码 (#18179)文档:改进从源代码安装 (#18194)
改进所有组件的从源代码安装页面 (#18251)
Airflow 2.1.3 (2021-08-23)¶
重大变更¶
没有重大更改。
错误修复¶
修复接收到
sigkill
且有重试的任务重试,并正确处理sigterm
(#16301)修复上下文中异常的机密信息编辑。 (#17618)
修复 dagrun 回调中的竞争条件 (#16741)
将“queued”添加到 DagRunState (#16854)
将“queued”状态添加到 DagRun (#16401)
修复外部 Elasticsearch 日志链接 (#16357)
当记录的 PID 与当前 PID 不同时,添加正确的警告消息 (#17411)
修复使用
default_impersonation
配置运行任务 (#17229)如果 DagRun 的 DAG 已从数据库中删除,则进行救援 (#17544)
修复损坏的 json_client (#17529)
处理并记录任务回调期间引发的异常 (#17347)
修复在无效标签键上失败的 CLI
kubernetes cleanup-pods
(#17298)在 DAG 解析日志中显示序列化异常 (#17277)
修复:
TaskInstance
不显示queued_by_job_id
&external_executor_id
(#17179)当
SecretsMasker
未配置时,添加更多解释性消息 (#17101)允许在
BaseOperator
的子类中使用__init_subclass__
(#17027)修复 XCom 视图中的任务实例检索 (#16923)
在解析期间验证
priority_weight
的类型 (#16765)在 DAG 序列化期间正确处理自定义的
deps
和task_group
(#16734)修复 Celery 工作器采用速度较慢(已清除)的任务。 (#16718)
修复在树视图中计算持续时间 (#16695)
修复
AttributeError
:datetime.timezone
对象没有属性name
(#16599)在 Web 服务器日志中编辑连接机密信息 (#16579)
将图形焦点更改为视图顶部而不是中心 (#16484)
当执行程序报告失败时,在调度器中使任务失败 (#15929)
修复(smart_sensor):未绑定的变量错误 (#14774)
将缺失的权限添加回
UserModelView
控件。 (#17431)更好地诊断和自我修复 docker-compose (#17484)
改进用户配置错误的
secret_key
时的诊断消息 (#17410)停止在
task_instance.refresh_from_db
中检查execution_date
(#16809)
改进¶
在任务退出期间,在
LocalTaskJob
中运行微型调度器 (#16289)删除
SQLAlchemy<1.4
约束 (#16630)将 Jinja2 上限从 2.12.0 提升到 4.0.0 (#16595)
提升
dnspython
(#16698)更新到
FlaskAppBuilder
3.3.2+ (#17208)为任务和 DAG 添加状态类型 (#15285)
当使用
LocalExecutor
时,为 Worker 设置进程标题 (#16623)将
DagFileProcessor
和DagFileProcessorProcess
移出scheduler_job.py
(#16581)
仅文档更改¶
修复配置文档中的不一致之处 (#17317)
修复使用 SQLite 作为元数据数据库的文档链接 (#17308)
其他¶
在 requests 删除 LGPL 依赖项后,切换回 http 提供程序 (#16974)
Airflow 2.1.2 (2021-07-14)¶
重大变更¶
没有重大更改。
错误修复¶
仅允许 Web 服务器从工作器日志服务器请求 (#16754)
修复“无效的 JSON 配置,必须是字典”错误 (#16648)
修复
CeleryKubernetesExecutor
(#16700)如果键为
token
,则屏蔽值 (#16474)修复
LocalTaskJob
的模拟问题 (#16852)解决所有 npm 漏洞,包括将
jQuery
升级到3.5
(#16440)
其他¶
添加 Python 3.9 支持 (#15515)
Airflow 2.1.1 (2021-07-02)¶
重大变更¶
函数 clear_task_instances
的 activate_dag_runs
参数已替换为 dag_run_state
¶
为了实现 clear_task_instances
与 activate_dag_runs=True
的先前默认行为,无需更改。为了实现 activate_dag_runs=False
的先前行为,请传递 dag_run_state=False
代替。(仍然接受先前的参数,但已弃用)
错误修复¶
不要在尝试屏蔽具有非字符串键的字典中的机密信息时崩溃 (#16601)
始终从
PyPI
安装 sphinx_airflow_theme (#16594)删除 Elasticsearch 库的限制 (#16553)
为 PROD 映像的构建和运行时添加额外要求。 (#16170)
Cattrs 1.7.0 在 2021 年 5 月底发布,破坏了沿袭的使用 (#16173)
从 setup_requires 中删除不必要的包 (#16139)
将 docutils 固定到 <0.17,直到修复破坏性行为 (#16133)
改进 Docker 映像文档 (#14843)
确保
dag_run.conf
是一个字典 (#15057)修复 CLI 连接导入并将逻辑从机密信息迁移到连接模型 (#15425)
修复 DAG 详细信息开始日期错误 (#16206)
修复 DAG 暂停时 DAG 运行状态未更新的问题 (#16343)
允许任务实例架构(REST API)中运算符字段为空值 (#16516)
避免编辑日志时递归过深 (#16491)
回填:如果没有任务与任务正则表达式匹配,则不创建 DagRun (#16461)
更大 DAG 的树视图 UI 和树视图中更一致的间距 (#16522)
正确处理 Query.scalar() 返回的 None (#16345)
向 /dags 端点添加
only_active
参数 (#14306)如果已在数据库中删除陈旧的序列化 DAG,则不显示它们 (#16368)
使 REST API 列出 DAG 端点与 UI/CLI 行为保持一致 (#16318)
支持在 Elasticsearch 中使用
filebeat 7
进行远程日志记录 (#14625)首先对具有更高优先级和更早执行日期的任务进行排队。 (#15210)
使图例上的任务 ID 具有足够的宽度,并使折线图的宽度为 100%。 (#15915)
修复 normalize-url 漏洞 (#16375)
在初始化时验证重试值,以获得更好的错误 (#16415)
为树刷新添加 num_runs 查询参数 (#16437)
修复配置参考文档中模板化的默认/示例值 (#16442)
将
passphrase
和private_key
添加到默认的敏感字段名称 (#16392)修复无限槽池中的任务永远不会被调度 (#15247)
修复 CeleryExecutor 中孤立任务卡在运行中的问题 (#16550)
如果我们无法编辑某些内容,则不要使日志记录失败 (#16118)
将最大树宽度设置为 1200 像素 (#16067)
在没有
--local
/--raw
的情况下为 KubeExecutor 的airflow task run
填充“job_id”字段 (#16108)修复初始化之前使用 conf 变量的问题 (#16088)
修复任务装饰器的应用默认值 (#16085)
即使刚刚解析过,也解析最近修改的文件 (#16075)
确保我们不会尝试在日志中屏蔽空字符串 (#16057)
当没有异常时,不要在屏蔽
log.exception
时崩溃 (#16047)恢复 base_sensor_operator 中的 apply_defaults 导入 (#16040)
修复 Web 服务器 UI 不在
/
中时的树视图自动刷新 (#16018)修复 dag.clear() 在必要时将多个 dag 设置为运行状态 (#15382)
修复 Celery 执行程序因多处理中的 reset_signals 而随机卡住的问题 (#15989)
Airflow 2.1.0 (2021-05-21)¶
重大变更¶
新的“deprecated_api”额外功能¶
我们新增了一个 ‘[deprecated_api]’ 额外选项,当安装 Airflow 时需要使用已弃用的 API 时,应使用此选项。现在,这是 Airflow 的一个可选功能,因为它会引入 requests
,而 requests
(截至 2021 年 5 月 14 日)会引入 LGPL 的 chardet
依赖项。
默认情况下不安装 http
提供程序¶
现在,http
提供程序是可选的,并且默认情况下不安装,直到 chardet
成为 requests
的可选依赖项。请参阅将 chardet 替换为 charset-normalizer 的 PR
@apply_default
装饰器不再必要¶
现在,此装饰器通过 BaseOperator 上的元类自动添加到所有运算符。
更改字段掩码的配置选项¶
我们改进了 Web UI 和日志中敏感数据的掩码处理。作为其中的一部分,以下配置已更改:
admin
部分中的hide_sensitive_variable_fields
选项已替换为core
部分中的hide_sensitive_var_conn_fields
部分。admin
部分中的sensitive_variable_fields
选项已替换为core
部分中的sensitive_var_conn_names
部分。
弃用 airflow.kubernetes.pod_generator 中的 PodDefaults 和 add_xcom_sidecar¶
我们已将 PodDefaults 从 airflow.kubernetes.pod_generator.PodDefaults
移动到 airflow.providers.cncf.kubernetes.utils.xcom_sidecar.PodDefaults
,并将 add_xcom_sidecar 从 airflow.kubernetes.pod_generator.PodGenerator.add_xcom_sidecar
移动到 airflow.providers.cncf.kubernetes.utils.xcom_sidecar.add_xcom_sidecar
。此更改将允许我们修改 KubernetesPodOperator 的 XCom 功能,而无需升级 Airflow。
从核心 Airflow 中删除了 pod_launcher¶
已将 pod 启动器从 airflow.kubernetes.pod_launcher
移动到 airflow.providers.cncf.kubernetes.utils.pod_launcher
这将允许用户更新 KubernetesPodOperator 的 pod_launcher,而无需升级 Airflow。
默认的 [webserver] worker_refresh_interval
已更改为 6000
秒¶
对于 Airflow <=2.0.1,[webserver] worker_refresh_interval
的默认值为 30
秒。但是,由于 Airflow 2.0 DAG 序列化是硬性要求,并且 Web 服务器使用了序列化的 DAG,因此没有必要像 30
秒那样频繁地终止现有工作进程并创建新的工作进程。
此设置可以提高到更高的值,目前设置为 6000
秒(100 分钟),以用作 DagBag 缓存突发时间。
default_queue
配置已移至 operators
部分。¶
default_queue
配置选项已从 [celery]
部分移至 [operators]
部分,以便在不同的执行器之间重用。
新功能¶
将
PythonVirtualenvDecorator
添加到 Taskflow API (#14761)添加
Taskgroup
装饰器 (#15034)创建 DAG 日历视图 (#15423)
创建跨 DAG 依赖关系视图 (#13199)
添加用于查询提供程序的 REST API (#13394)
在任务日志和 UI 中屏蔽密码和敏感信息 (#15599)
添加
SubprocessHook
以从操作符运行命令 (#13423)在 UI 页面 “DAG 详细信息” 中添加 DAG 超时 (#14165)
添加
WeekDayBranchOperator
(#13997)将 JSON linter 添加到 DAG 触发 UI (#13551)
将 DAG 描述文档添加到触发 UI 页面 (#13365)
将 Airflow Web 服务器 URL 添加到 SLA 错过电子邮件中。 (#13249)
为用户添加只读 REST API 端点 (#14735)
添加生成 Airflow Python SDK 的文件 (#14739)
将动态字段添加到 snowflake 连接 (#14724)
为角色和权限添加只读 REST API 端点 (#14664)
添加新的日期时间分支操作符 (#11964)
添加 Google leveldb hook 和操作符 (#13109) (#14105)
将插件端点添加到 REST API (#14280)
添加
worker_pod_pending_timeout
支持 (#15263)添加对标记 DAG 边缘的支持 (#15142)
为角色添加 CUD REST API 端点 (#14840)
从文件导入连接 (#15177)
一大堆
template_fields_renderers
添加 (#15130)为某些端点添加 REST API 查询排序和顺序 (#14895)
在新 UI 中添加时区上下文 (#15096)
将查询突变添加到新 UI (#15068)
添加不同的模式来排序用于解析的 DAG 文件 (#15046)
树状视图上的自动刷新 (#15474)
BashOperator 在退出代码 99 时(默认情况下,可配置)引发
AirflowSkipException
(#13421) (#14963)通过 REST API 中的任务 ID 清除任务 (#14500)
支持 jinja2 原生 Python 类型 (#14603)
允许没有 gossip 或 mingle 模式的 celery 工作进程 (#13880)
添加
airflow jobs check
CLI 命令来检查作业的运行状况(计划程序等)(#14519)将
DateTimeBranchOperator
重命名为BranchDateTimeOperator
(#14720)
改进¶
将可选的结果处理程序回调添加到
DbApiHook
(#15581)将 Flask App Builder 限制更新到最近发布的 3.3 (#15792)
防止在 REST API 请求上创建 flask 会话 (#15295)
解析时同步 DAG 特定权限 (#15311)
将任务池名称的最大长度增加到 256 个字符 (#15203)
在使用 mysql 时强制执行 READ COMMITTED 隔离 (#15714)
自动将
apply_default
应用于BaseOperator
的子类 (#15667)在重复的 DAG ID 上发出错误 (#15302)
更新
KubernetesExecutor
pod 模板以允许访问 IAM 权限 (#15669)运行
airflow db check-migrations
时提供更详细的日志 (#15662)如果 one_success 没有成功,则将任务标记为失败 (#15467)
添加一个在不更改配置的情况下触发 DAG 的选项 (#15591)
添加 Airflow UI instance_name 配置选项 (#10162)
添加一个使用 DB 事务重试函数的装饰器 (#14109)
将返回添加到 PythonVirtualenvOperator 的执行方法 (#14061)
为 Kubernetes 添加 verify_ssl 配置 (#13516)
当 Web 服务器 > 1 时,添加有关
secret_key
的描述 (#15546)在
JSONFormatter
中的 LogRecord 中添加回溯 (#15414)添加对连接 URI 格式中任意 json 的支持 (#15100)
在变量中添加描述字段 (#12413) (#15194)
添加日志以显示 SFTP、FTP 和文件系统传感器中的上次修改时间 (#15134)
在收到 SIGTERM 时执行
on_failure_callback
(#15172)允许在突出显示状态时隐藏所有边缘 (#15281)
在 UID 没有实际用户名的情况下显示明确的错误 (#15212)
在使用本地或顺序执行器时使用计划程序提供日志 (#15557)
禁用 dag 详细信息视图上的触发、刷新和删除控件。 (#14144)
关闭连接表单的自动完成功能 (#15073)
将默认的
worker_refresh_interval
增加到6000
秒 (#14970)仅当用户本地时区不是 UTC 时才显示 (#13904)
抑制一些任务 CLI 的 LOG/WARNING,以获得更好的 CLI 体验 (#14567)
可配置的 API 响应 (CORS) 标头 (#13620)
允许查看者查看所有文档链接 (#14197)
更新树状视图日期刻度 (#14141)
使暂停/取消暂停 DAG 的工具提示更清晰 (#13642)
在获取变量时警告环境变量的优先级 (#13501)
将
[celery] default_queue
配置移至[operators] default_queue
以便在执行器之间重用 (#14699)
错误修复¶
修复当未传递
dry_run
时,updateTaskInstancesState
API 端点返回 500 错误的问题 (#15889)确保 PythonVirtualenvOperator 前面的任务不会失败 (#15822)
防止大小写混合的环境变量导致工作进程等进程崩溃 (#14380)
修复了 DAG 装饰器中的类型注释 (#15778)
修复任务接收 SIGKILL 时 on_failure_callback 的问题 (#15537)
修复 DAG 表溢出 (#15660)
修复子 DAG 清除时更改父 DAG 状态的问题 (#15562)
修复从 zip 包读取时默认为文本的问题 (#13962)
修复 dags.html 中
drawDagStatsForDag
的错误参数 (#13884)修复 QueuedLocalWorker 因 EOFError 崩溃的问题 (#13215)
修复
NotPreviouslySkippedDep
中的错别字 (#13933)修复 KubeExecutor pod 采用后的并行性问题 (#15555)
修复启用保持活动状态的 mac 上的 kube 客户端问题 (#15551)
修复了 python>3.7 的 dask 的错误限制(应为 <3.7)(#15545)
修复
KubernetesExecutor
中的任务采用 (#14795)修复使用带有
KubernetesPodOperator
的 XCom 时的超时问题 (#15388)修复 “extras” 中已弃用的提供程序别名不起作用的问题 (#15465)
修复了默认 XCom 反序列化。 (#14827)
进一步修复了
dag.partial_subset
中的 used_group_ids 问题 (#13700) (#15308)进一步修复了
KubernetesPodOperator
的修剪后的pod_id
(#15445)错误修复:当修剪后的
pod_id
在KubernetesPodOperator
中以连字符结尾时,名称无效 (#15443)修复当 TI
pool_slots > 1
时不正确的槽统计信息 (#15426)修复 DAG 上次运行链接 (#15327)
修复当 update_fab_perms = False 时,
sync-perm
无法正常工作的问题 (#14847)修复了 plexus 测试中 Arrow 的限制 (#14781)
修复了树状视图中的 UI Bug (#14566)
修复了 AzureDataFactoryHook 无法实例化其连接的问题 (#14565)
修复了非 POSIX 文件系统上的权限错误 (#13121)
修复了 “ignorable” 中的拼写错误 (#14348)
修复了 get_context_data 文档测试导入问题 (#14288)
更正了
GCSObjectsWtihPrefixExistenceSensor
中的拼写错误 (#14179)修复了失败依赖项的顺序 (#14036)
修复了
CeleryKubernetesExecutor
的严重 Bug (#13247)修复了
StackdriverTaskHandler
中的四个 Bug (#13784)func.sum
可能会返回破坏 rest API 的Decimal
(#15585)在分页中持久化标签参数 (#15411)
API:当
execution_date
相同时,引发AlreadyExists
异常 (#15174)删除
DagFileProcessorManager
内对sync_metadata
的重复调用 (#15121)额外更新
docker-py
以解决 docker 操作问题 (#15731)确保调用执行器的 end 方法 (#14085)
从 API 模式中删除
user_id
(#15117)防止在禁用分页时点击错误的链接 (#15074)
在迁移期间获取数据库锁 (#10151)
仅当 SLA 为 None 时才跳过 SLA 检查 (#14064)
在 airflow info 命令中打印正确的版本 (#14560)
使
airflow info
可以与管道一起使用 (#14528)重构连接表单的客户端脚本 (#14052)
API:在所有具有
total_entries
的集合中添加CollectionInfo
(#14366)修复导入 airflow.models.dagrun 时
task_instance_mutation_hook
的问题 (#15851)
仅文档更改¶
修复 SqlSensor 的文档字符串 (#15466)
“DAGs and Tasks 文档” 的小改动 (#14853)
添加关于配置选项更改的注释 (#15696)
将文档添加到
markdownlint
和yamllint
配置文件 (#15682)在文档中将旧的 “Experimental” API 重命名为已弃用 (#15653)
修复
git_sync_template.yaml
中的文档错误 (#13197)修复文档链接权限名称 (#14972)
修复 Helm chart 文档的链接 (#14652)
修复 Kubernetes 代码的文档字符串 (#14605)
文档:大写和小的修复 (#14283) (#14534)
修复了从 zip 包读取时默认使用文本的问题 (#13984)
对 “Concepts” 文档的初步重构 (#15444)
改进了各种模块的文档字符串 (#15047)
添加关于数据库连接 URI 的文档 (#14124)
将 Helm Chart 徽标添加到文档索引 (#14762)
为 Helm Chart 创建新的文档包 (#14643)
添加关于支持的日志记录级别的文档 (#14507)
更新关于 tableau 和 salesforce 提供程序的文档 (#14495)
将已弃用的文档链接替换为正确的链接 (#14429)
重构冗余的文档 url 逻辑以使用实用程序 (#14080)
文档:注意:将 2016-2019 更新为 2016-至今 (#14248)
如果可能,在解析期间跳过 DAG 权限同步 (#15464)
为边缘标签添加图片和示例 (#15310)
为 sqlite 添加示例 DAG 和操作指南 (#13196)
为已弃用的模块添加指向新模块的链接 (#15316)
在 Updating.md 中添加关于 FAB 数据模型更改的说明 (#14478)
杂项/内部¶
修复
logging.exception
冗余问题 (#14823)升级
stylelint
以删除易受攻击的子依赖项 (#15784)添加解决方案以强制依赖项使用 lodash 的修补版本 (#15777)
将 croniter 更新到 1.0.x 系列 (#15769)
在 Breeze 中删除 Airflow 1.10 (#15712)
并行运行 helm chart 测试 (#15706)
将 /airflow/www 中的
ssri
从 6.0.1 升级到 6.0.2 (#15437)删除 Gunicorn 依赖项的限制 (#15611)
改进任务“依赖项已注册”的警告消息 #14613 (#14860)
将 pandas-gbq 固定到 <0.15.0 (#15114)
使用 Pip 21.* 正式安装 airflow (#15513)
升级 mysqlclient 以支持 1.4.x 和 2.x 系列 (#14978)
完成 DAG 资源名称助手的重构 (#15511)
重构/清理图形任务和路径突出显示的展示 (#15257)
标准化默认的 fab 权限 (#14946)
从任务实例详细视图中删除
datepicker
(#15284)将提供程序的导入警告转换为调试日志 (#14903)
从 provider_info 模式的 required 中删除遗留字段 (#14119)
弃用
tableau
额外功能 (#13595)在 Python 3.8 中尽可能使用内置的
cached_property
(#14606)清理 UI 模板中的 JS 代码 (#14019)
将 /airflow/www 中的 elliptic 从 6.5.3 升级到 6.5.4 (#14668)
使用
flynt
切换到 f 字符串 (#13732)使用
jquery
ready 而不是原始 js (#15258)迁移任务实例日志 (ti_log) js (#15309)
迁移 graph js (#15307)
迁移 dags.html javascript (#14692)
删除不必要的 AzureContainerInstance 连接类型 (#15514)
将 Kubernetes pod_launcher 与核心 airflow 分离 (#15165)
更新操作符的剩余旧导入路径 (#15127)
删除损坏且未记录的“演示模式”功能 (#14601)
简化
Webpack
条目的配置/可读性 (#14551)删除内联树 js (#14552)
Js 代码检查和简单脚本的内联迁移 (#14215)
删除 AirflowConfigParser 中重复使用的常量 (#14023)
弃用来自环境变量的电子邮件凭据 (#13601)
删除 task_instance.py 中未使用的“context”变量 (#14049)
在调试时禁用 cli 中的 suppress_logs_and_warning (#13180)
Airflow 2.0.2 (2021-04-19)¶
重大更改¶
默认的 [kubernetes] enable_tcp_keepalive
已更改为 True
¶
这允许 Airflow 默认情况下在某些环境(如 Azure)中更可靠地工作。
sync-perm
CLI 默认不再同步 DAG 特定权限¶
默认情况下,sync-perm
CLI 命令不再同步 DAG 特定权限,因为它们现在在 DAG 解析期间进行处理。如果您需要或想要旧的行为,您可以传递 --include-dags
以使 sync-perm
也同步 DAG 特定权限。
Bug 修复¶
Bugfix:序列化和排序 DAG 的可迭代属性时出现
TypeError
(#15395)修复基于文件夹的插件缺少
on_load
触发器的问题 (#15208)kubernetes cleanup-pods
子命令将仅清理 Airflow 创建的 Pod (#15204)修复 CLI action_logging 中的密码屏蔽 (#15143)
修复 TriggerDagRunOperatorLink 的 URL 生成 (#14990)
恢复基本血统后端 (#14146)
无法使用 Kubernetes 执行器触发回填或手动作业 (#14160)
Bugfix:任务文档未在任务实例详细视图中显示 (#15191)
Bugfix:修复 KubernetesExecutor 中覆盖
pod_template_file
的问题 (#15197)Bugfix:
executor_config
中的资源破坏了 UI 中的图形视图 (#15199)修复 celery 执行器尝试在 map 上调用 len 的 Bug (#14883)
修复 airflow.stats 计时中破坏 dogstatsd 模式的 Bug (#15132)
通过使用非阻塞 IO 避免调度器/解析器管理器死锁 (#15112)
重新引入
dagrun.schedule_delay
指标 (#15105)比较字符串值,而不是 Kubernetes 执行器中的字符串是否是同一对象 (#14942)
像在 airflow 1.10 中一样,将队列传递给 BaseExecutor.execute_async (#14861)
调度器:从关键路径中删除饥饿池中的 TI (#14476)
删除 airflow.contrib 模块中多余/不必要的弃用警告 (#15065)
修复 KubernetesExecutor 中对长 dag_id 和 task_id 的支持 (#14703)
对序列化 DAG 中的列表、集合和元组进行排序 (#14909)
简化传递给 origin 参数的字符串的清理 (#14738) (#14905)
修复启用 Sentry 集成时运行任务时发生的错误 (#13929)
Webserver:清理传递给 origin 参数的字符串 (#14738)
修复树状图中丢失的持续时间 < 1 秒的问题 (#13537)
由于 sqlalchemy-utils 的损坏,将 SQLAlchemy 固定到 <1.4 (#14812)
修复 KubernetesExecutor 中已删除的挂起 Pod 的问题 (#14810)
当后端模型不存在时,默认为 Celery 任务模型 (#14612)
Bugfix:插件端点未经身份验证 (#14570)
BugFix:修复 DAG 文档显示(特别是对于 TaskFlow DAG)(#14564)
BugFix:airflow.kubernetes.pod_launcher 的 monitor_pod 中的 TypeError (#14513)
Bugfix:修复 dag 详细 API 端点中标签和所有者的错误输出 (#14490)
修复启用 JSON 日志记录时任务错误导致的日志记录错误 (#14456)
修复使用守护程序模式时不发送 StatsD 指标的问题 (#14454)
优雅地处理 DagRun 缺少 start_date 和 end_date 的情况 (#14452)
BugFix:将 max_retry_delay 序列化为 timedelta (#14436)
修复用户点击“任务实例详细信息”时因 start_date 为 None 而导致的崩溃 (#14416)
BugFix:修复如果从正在运行的 DAG 中删除任务,则任务实例 API 调用失败的问题 (#14381)
当传递无效的
executor_config
时,调度器不应失败 (#14323)修复当超出 dagrun_timeout 时,允许任务实例继续存在的 Bug (#14321)
修复 DAG 时区在 UI 工具提示中并非始终正确显示的 Bug (#14204)
当传递空字符串时,对
cookie_samesite
使用Lax
(#14183)[AIRFLOW-6076] 修复
dag.cli()
KeyError (#13647)修复清除成功的子 DAG 后在子 DAG 中运行子任务的问题 (#14776)
改进¶
删除导致错误安全警报的未使用 JS 包 (#15383)
将新安装的
[kubernetes] enable_tcp_keepalive
的默认值更改为True
(#15338)修复了 #14270:在 OOM 情况中添加错误消息 (#15207)
更好地兼容/诊断 Docker 镜像中的任意 UID (#15162)
更新一些库的最新版本的 3.6 限制 (#15209)
添加最近更改后缺少的 Blinker 依赖 (#15182)
从 DagRun 视图中的 search_columns 中删除 'conf' (#15099)
K8S cleanup-pods CLI 中命名空间的更合适的默认值 (#15060)
在 Web 服务器启动期间更快的默认角色同步 (#15017)
当存在许多 DAG 时,加快 Web 服务器启动速度 (#14993)
更易于使用且文档更完善的 Docker 镜像 (#14911)
在可用时使用
libyaml
C 库。 (#14577)不在单元测试模式下运行时不创建 unittest.cfg (#14420)
Web 服务器:允许按 queued_dttm 筛选 TaskInstances (#14708)
更新 Flask-AppBuilder 依赖以允许 3.2(和所有 3.x 系列) (#14665)
记住浏览器本地存储中展开的任务组 (#14661)
为 cli 表添加纯文本格式输出 (#14546)
使
airflow dags show
命令显示 TaskGroups (#14269)增加
extra
连接字段的最大大小。 (#12944)通过对 TaskReschedule 进行单次 sql 删除来加快 clear_task_instances 的速度 (#14048)
为 FAB 菜单链接添加更多灵活性 (#13903)
在 sqlite 版本不匹配的情况下添加更好的描述和指导 (#14209)
仅限文档更改¶
添加文档创建/更新社区提供程序 (#15061)
修复 airflow.utils.timezone 文档字符串中的错误和拼写错误 (#15180)
替换稳定 Airflow 文档的新 URL (#15169)
文档:澄清 delete_worker_pods_on_failure 的行为 (#14958)
为 Docker 镜像创建一个文档包 (#14846)
多个次要文档 (OpenAPI) 修复 (#14917)
替换图形视图屏幕截图以显示自动刷新 (#14571)
杂项/内部¶
在钩子中懒惰地导入连接以避免循环 (#15361)
将 last_scheduler_run 重命名为 last_parsed_time,并确保它在数据库中更新 (#14581)
使 TaskInstance.pool_slots 不可为空,默认值为 1 (#14406)
以一致的方式记录迁移信息 (#14158)
Airflow 2.0.1 (2021-02-08)¶
重大更改¶
从 User
和 Viewer
角色中删除了查看 Airflow 配置的权限¶
以前,具有 User
或 Viewer
角色的用户可以使用 REST API 或在 Web 服务器中获取/查看配置。 从 Airflow 2.0.1 开始,只有具有 Admin
或 Op
角色的用户才能获取/查看配置。
要允许具有其他角色的用户查看配置,请将 can read on Configurations
权限添加到该角色。
请注意,如果 [webserver] expose_config
设置为 False
,即使用户具有带有 can read on Configurations
权限的角色,API 也会抛出 403
响应。
默认 [celery] worker_concurrency
更改为 16
¶
对于 Airflow <2.0.0,[celery] worker_concurrency
的默认值为 16
。 但是,在 2.0.0 中,它被意外地更改为 8
。
从 Airflow 2.0.1 开始,我们恢复到旧的默认值 16
。
默认 [scheduler] min_file_process_interval
更改为 30
¶
由于 DAG 文件被不断解析,[scheduler] min_file_process_interval
的默认值为 0
,因此 CPU 使用率大部分保持在 100% 左右。
从 Airflow 2.0.0 开始,调度决策已从 DagFileProcessor 移至 Scheduler,因此我们可以将默认值保持稍高一些:30
。
错误修复¶
错误修复:在 XCom 端点 API 中返回 XCom 值 (#13684)
错误修复:当使用自定义后端和
sql_alchemy_conn_secret
时出现导入错误 (#13260)当守护进程化进程(调度程序、Kerberos 等)时,允许 PID 文件路径为相对路径 (#13232)
错误修复:在
airflow db upgrade
期间,MySQL 中没有通用的DROP CONSTRAINT
(#13239)错误修复:运行
sync-perm
时同步在 DAG 中定义的访问控制 (#13377)如果未在 DAG 上定义回调,则停止发送回调请求 (#13163)
错误修复:未运行 DAG 级别的回调请求 (#13651)
停止创建重复的 DAG 文件处理器 (#13662)
在调度时使用已删除状态下的任务实例筛选 DagRuns (#13165)
将 /airflow/www 中的
datatables.net
从 1.10.21 升级到 1.10.22 (#13143)将
datatables.net
JS 升级到 1.10.23 (#13253)将 /airflow/www 中的
dompurify
从 2.0.12 升级到 2.2.6 (#13164)更新最小
cattrs
版本 (#13223)删除 CLI 池导入/导出中不适用的参数“output” (#13071)
Web 服务器:修复停用身份验证选项的行为并添加文档 (#13191)
修复:添加对无菜单插件视图的支持 (#11742)
为 Python 3.8+ 添加
python-daemon
限制以修复守护进程崩溃 (#13540)将默认的 Celery
worker_concurrency
更改为 16 (#13612)如果
dag_id
为 None,则审计日志记录视图不应包含链接 (#13619)修复用于清理列表 pod 的无效
continue_token
(#13563)切换到最新版本的 Snowflake 连接器 (#13654)
修复在任务重试或重新调度时回填崩溃的问题 (#13712)
将
max_tis_per_query
设置为0
现在可以正确删除限制 (#13512)修复任务回调调用中的竞争条件 (#10917)
修复 gunicorn 主进程崩溃时 Web 服务器退出的问题 (#13518)(#13780)
修复用于检查重复连接的 SQL 语法 (#13783)
BaseBranchOperator
默认会推送到 xcom (#13704) (#13763)修复
configuration.getsection
的弃用问题 (#13804)修复日志端点中的 TaskNotFound 问题 (#13872)
修复使用动态 DAG 时的竞争条件 (#13893)
修复:Linux/Chrome 中 Web 服务器窗口的跳动问题
修复 sqlite 的 db shell (#13907)
仅在存在序列化 DAG 时比较更新时间 (#13899)
修复 mysqldb 驱动程序的 dag 运行类型枚举查询 (#13278)
为实验性 API 的谱系端点添加身份验证 (#13870)
不要将 User 角色的权限添加到自定义角色。 (#13856)
不要将
Website.can_read
访问权限添加到默认角色。 (#13923)修复由长的 Kubernetes pod 名称引起的无效值错误 (#13299)
修复 SQLite 的数据库迁移以升级到 2.0 (#13921)
错误修复:手动 DagRun 触发器不应跳过计划的运行 (#13963)
停止在调度程序中加载额外的运算符链接 (#13932)
在
FileTaskHandler
的读取函数中添加了缺少的返回参数 (#14001)错误修复:不要尝试在调度程序中创建重复的 Dag Run (#13920)
使
v1/config
端点遵守 Web 服务器expose_config
设置 (#14020)为 Mariadb 和 MySQL <8 禁用行级锁定 (#14031)
错误修复:修复仅触发特定 DAG 的权限 (#13922)
修复损坏的 SLA 机制 (#14056)
错误修复:如果任务在运行时被删除,则调度程序失败 (#14057)
删除用户和查看器角色读取配置的权限 (#14067)
修复从 2.0.1rc1 的数据库迁移
改进¶
增加默认的
min_file_process_interval
以降低 CPU 使用率 (#13664)当使用
os.fork
&CeleryExecutor
运行任务时处理连接 (#13265)在
example_kubernetes_executor
示例 DAG 中使函数目的更清晰 (#13216)删除未使用的库 -
flask-swagger
、funcsigs
(#13178)当任务尚未运行时(无 TI)显示替代工具提示 (#13162)
使用 werkzeug 自己的请求参数类型转换 (#13184)
UI:将
queued_by_job_id
&external_executor_id
列添加到 TI 视图 (#13266)使
json-merge-patch
成为可选库并取消固定 (#13175)将缺少的 LDAP “extra” 依赖项添加到 ldap 提供程序。 (#13308)
重构
setup.py
以更好地反映提供程序中的更改 (#13314)固定
pyjwt
并为 Apache Pinot 添加集成测试 (#13195)从
setup.cfg
中删除提供程序强加的要求 (#13409)替换已弃用的装饰器 (#13443)
简化 & 简化模型 Dag 和 BaseOperator 中的
__eq__
方法 (#13449)应允许在提供程序模式中添加其他属性 (#13440)
删除未使用的依赖项 -
contextdecorator
(#13455)删除“typing”依赖项 (#13472)
以一致的方式记录迁移信息 (#13458)
取消固定
mysql-connector-python
以允许8.0.22
(#13370)删除 thrift 作为核心依赖项 (#13471)
为 OpenAPI YAML 中的 DELETE 方法添加
NotFound
响应 (#13550)当
[core] lazy_load_plugins
为False
时,停止日志垃圾信息 (#13578)当未加载任何插件时显示消息和文档链接 (#13599)
取消固定
colorlog
依赖项的限制 (#13176)为示例 DAG 添加缺失的 DAG 标签 (#13665)
支持 DAG 文档中的表格 (#13533)
添加
python3-openid
依赖 (#13714)为执行器添加
__repr__
(#13753)添加描述,提示是否缺少
conn_type
(#13778)将 Azure blob 升级到 v12 (#12188)
向
get_connnection
REST 端点添加额外字段 (#13885)使智能传感器数据库迁移具有幂等性 (#13892)
改进在运行 dag 暂停命令时 DAG 不存在的错误提示 (#13900)
更新
airflow_local_settings.py
以修复错误消息 (#13927)仅允许将 JSON 可序列化的配置传递给
TriggerDagRunOperator
(#13964)Bugfix:允许获取具有 null
start_date
的 DAG 的详细信息(REST API)(#13959)将参数添加到 DAG 详细信息端点 (#13790)
使分配给匿名用户的角色可自定义 (#14042)
在出现
OperationalError
时,重试调度程序循环中的关键方法 (#14032)
仅文档更改¶
在文档中添加缺失的 StatsD 指标 (#13708)
在配置文档中添加缺失的电子邮件配置 (#13709)
为 Docker 上的 Airflow 添加快速入门 (#13660)
描述支持的 Python 版本 (#13259)
向 2.x 迁移文档添加注释块 (#13094)
添加有关 webserver_config.py 的文档 (#13155)
为最近添加的配置添加缺失的版本信息 (#13161)
API:在 UpdateMask 组件中使用通用信息 (#13146)
将 Airflow 2.0.0 添加到 requirements 表格 (#13140)
避免 CeleryKubernetesExecutor 文档中的混淆 (#13116)
更新 REST API 规范中的文档链接 (#13107)
将 PyPI 仓库的链接添加到提供程序文档 (#13064)
修复指向 Airflow master 分支文档的链接 (#13179)
对传感器文档进行小幅增强 (#13381)
在 Airflow 文档和 Breeze 中使用 2.0.0 (#13379)
改进了有关提供程序和自定义连接的文档 (#13375)(#13410)
修复 production-deployment.rst 中格式错误的表格 (#13395)
更新 celery.rst 以修复损坏的链接 (#13400)
删除文档中对 scheduler run_duration 参数的引用 (#13346)
设置支持的最低 SQLite 版本 (#13412)
修复安装文档 (#13462)
添加有关模拟变量和连接的文档 (#13502)
添加有关 Flask CLI 的文档 (#13500)
修复升级到 2 指南以使用
rbac
UI (#13569)明确文档指出稳定 API 不能禁用身份验证 (#13568)
从文档中删除已存档的链接,并添加 AIP 的链接 (#13580)
对 upgrading-to-2.rst 进行小幅修复 (#13583)
修复升级到 2.0 指南中的链接 (#13584)
修复 best-practices.rst 中 Mocking 部分的标题 (#13658)
添加有关如何在插件文件夹中使用自定义操作器的文档 (#13186)
更新文档以注册操作器额外链接 (#13683)
改进数据库设置文档 (#13696)
将模块路径替换为仅类名的类 (#13719)
更新 DAG 序列化文档 (#13722)
修复 Web 服务器中指向 Apache Airflow 文档的链接 (#13250)
阐明 extras 和提供程序包之间的差异 (#13810)
添加有关所有访问环境的方法的信息 (#13940)
文档:修复关于调度程序延迟的常见问题解答 (#13969)
更新 taskflow api 文档以显示与传感器的依赖关系 (#13968)
将已弃用的配置选项添加到文档 (#13883)
向升级到 2 的文档添加了常见问题解答部分 (#13979)
Airflow 2.0.0 (2020-12-18)¶
完整的更改日志大约有 3,000 行(已经排除了回溯到 1.10 的所有内容),因此请查看 Airflow 2.0.0 Highlights 博客文章。
重大更改¶
Airflow 的 2.0 版本是一次重大升级,包括实质性的重大更改,其中一些更改可能是破坏性的。为该项目早期版本编写的现有代码可能需要更新才能使用此版本。有时还需要必要的配置更改。本文档描述了所做的更改以及更新用法所需的操作。
如果您遇到问题或有疑问,请提交 问题。
主要更改¶
本节介绍此版本中已完成的主要更改。
实验性 REST API 默认禁用¶
实验性 REST API 默认禁用。要在迁移到稳定的 REST API 时还原这些 API,请将 [api]
部分中的 enable_experimental_api
选项设置为 True
。
请注意,实验性 REST API 没有访问控制。经过身份验证的用户具有完全访问权限。
SparkJDBCHook 默认连接¶
对于 SparkJDBCHook,默认连接是 spark-default
,对于 SparkSubmitHook,它是 spark_default
。现在,这两个钩子都使用 spark_default
,这是所有提供程序中使用的连接名称的通用模式。
命令中输出参数的更改¶
从 Airflow 2.0 开始,我们将用 rich 替换 tabulate 以渲染命令输出。由于此更改,--output
参数将不再接受 tabulate 表格的格式。相反,它现在接受
table
- 将以预定义的表格形式呈现输出json
- 将以 json 形式呈现输出yaml
- 将以 yaml 形式呈现输出
通过这样做,我们提高了代码一致性,并为用户提供了以编程方式操作输出的可能性(在使用 json 或 yaml 时)。
受影响的命令
airflow dags list
airflow dags report
airflow dags list-runs
airflow dags list-jobs
airflow connections list
airflow connections get
airflow pools list
airflow pools get
airflow pools set
airflow pools delete
airflow pools import
airflow pools export
airflow role list
airflow providers list
airflow providers get
airflow providers hooks
airflow tasks states-for-dag-run
airflow users list
airflow variables list
Azure Wasb Hook 不能与 Snowflake hook 一起使用¶
Apache Airflow 中的 WasbHook 使用的是旧版本的 Azure 库。虽然对于大多数 Azure 钩子来说,冲突并不严重,但对于 Wasb Hook 来说,这是一个问题,因为两个库的 blob
文件夹重叠。安装 Snowflake 和 Azure extra 将导致 WasbHook 无法导入。
将 all
重命名为 devel_all
extra¶
all
extras 被减少到只包含面向用户的依赖项。这意味着此 extra 不包含开发依赖项。如果您依赖于 all
extra,那么您现在应该使用 devel_all
或确定是否需要开发 extras。
上下文变量 prev_execution_date_success
和 prev_execution_date_success
现在是 pendulum.DateTime
¶
将 policy 重命名为 task_policy¶
因为 Airflow 引入了 DAG 级别的 policy (dag_policy
),所以我们决定将现有的 policy
函数重命名为 task_policy
,以使区别更加深刻,并避免任何混淆。
使用集群 policy 的用户需要将 airflow_local_settings.py
中的 policy
函数重命名为 task_policy
。
[celery] operation_timeout
的默认值已更改为 1.0
¶
从 Airflow 2 开始,默认情况下,Airflow 将重试 3 次以将任务发布到 Celery 代理。这由 [celery] task_publish_max_retries
控制。因此,我们现在可以有较低的操作超时,该超时会引发 AirflowTaskTimeout
。这通常发生在网络故障或间歇性 DNS 问题期间。
不再支持通过插件添加操作器和传感器¶
操作器和传感器不应再通过 Airflow 的插件机制注册或导入——这些类型的类仅被 Airflow 视为普通的 Python 类,因此无需在 Airflow 中注册它们。
如果您之前有一个 plugins/my_plugin.py
,并且您在 DAG 中像这样使用它
from airflow.operators.my_plugin import MyOperator
您应该改为将其导入为
from my_plugin import MyOperator
airflow.operators.
下的名称是插件名称,而在第二个示例中,它是定义操作器的 Python 模块名称。
有关更多信息,请参见 https://airflow.apache.org/docs/apache-airflow/stable/howto/custom-operator.html。
不再支持通过插件导入钩子¶
不再支持通过 airflow.hooks.<plugin_name>
导入插件中添加的钩子,并且钩子应仅作为常规 Python 模块导入。
from airflow.hooks.my_plugin import MyHook
您应该改为将其导入为
from my_plugin import MyHook
仍然可以在插件中“注册”钩子(但不是必须的)。这是为了支持未来在UI中动态填充连接表单。
有关更多信息,请参见 https://airflow.apache.org/docs/apache-airflow/stable/howto/custom-operator.html。
[core] enable_xcom_pickling
的默认值已更改为 False
¶
为了防止 RCE 攻击,XCom 消息的 pickle 类型已默认替换为 JSON。请注意,JSON 序列化比 pickling 更严格,因此例如,如果您想通过 XCom 传递原始字节,则必须使用诸如 base64
之类的编码对其进行编码。如果您了解风险并且仍然想使用 pickling,请在 Airflow 配置的 core
部分设置 enable_xcom_pickling = True
。
airflowignore 的基础路径¶
在 https://github.com/apache/airflow/pull/11993 中修复了一个错误,“airflowignore”检查了 dag 文件夹的基础路径以查找被禁止的 dag,而不仅仅是相对部分。这导致如果基础路径包含排除的单词,则整个 dag 文件夹都可能被排除。例如,如果 airflowignore 文件包含 x,并且 dags 文件夹是“/var/x/dags”,则文件夹中的所有 dag 都将被排除。此修复现在仅匹配相对路径,这意味着如果您之前使用完整路径作为忽略,则应将其更改为相对路径。例如,如果您的 dag 文件夹是“/var/dags/”,并且您的 airflowignore 包含“/var/dag/excluded/”,则应将其更改为“excluded/”。
ExternalTaskSensor
将所有任务上下文变量作为关键字参数提供给 execution_date_fn
¶
将 context
作为字典传递的旧语法将继续工作,但需要注意的是,该参数必须命名为 context
。以下代码将不起作用。要修复它,请将 ctx
更改为 context
。
def execution_date_fn(execution_date, ctx):
...
execution_date_fn
可以接收任务上下文字典中可用的任意数量的关键字参数。以下形式的 execution_date_fn
都受支持
def execution_date_fn(dt):
...
def execution_date_fn(execution_date):
...
def execution_date_fn(execution_date, ds_nodash):
...
def execution_date_fn(execution_date, ds_nodash, dag):
...
[webserver] cookie_samesite
的默认值已更改为 Lax
¶
根据 Flask 的建议,[webserver] cookie_samesite
已从 ''
(空字符串)更改为 Lax
。
导入路径的更改¶
以前,核心代码由原始创建者 Airbnb 维护。contrib 包中的代码由社区支持。该项目已移交给 Apache 社区,目前整个代码由社区维护,因此现在这种划分没有道理,这仅仅是历史原因。在 Airflow 2.0 中,我们希望组织包并将与第三方服务的集成移至 airflow.providers
包。
所有更改都是向后兼容的,但是如果您使用旧的导入路径,您将看到弃用警告。旧的导入路径将来可能会被放弃。
根据 AIP-21,已从运算符中删除 _operator
后缀。对于导入带有后缀的路径也引发了弃用警告。
下表显示了导入路径的更改。
旧路径 |
新路径 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
数据库模式更改¶
为了迁移数据库,您应该使用命令 airflow db upgrade
,但在某些情况下需要手动步骤。
连接表中唯一的 conn_id¶
以前,Airflow 允许用户添加多个具有相同 conn_id
的连接,并且在访问时会随机选择一个连接。当与重试结合使用时,这充当了基本的负载平衡和容错技术。
此行为给用户造成了一些困惑,并且没有明确的证据表明它是否真的工作良好。
现在,conn_id
将是唯一的。如果您的元数据数据库中已经有重复项,则必须在升级数据库之前管理这些重复的连接。
连接表中不可为空的 conn_type 列¶
connection
表中的 conn_type
列必须包含内容。以前,此规则由应用程序逻辑强制执行,但未由数据库模式强制执行。
如果您直接对表进行了任何修改,请确保 conn_type
列中没有空值。
配置更改¶
此版本包含许多更改,这些更改需要更改此应用程序或与之集成的其他应用程序的配置。
本节介绍了已进行的更改以及您需要执行的操作。
airflow.contrib.utils.log 已移动¶
以前,核心代码由原始创建者 Airbnb 维护。contrib 包中的代码由社区支持。该项目已移交给 Apache 社区,目前整个代码由社区维护,因此现在这种划分没有道理,这仅仅是历史原因。在 Airflow 2.0 中,我们希望组织包并将与第三方服务的集成移至 airflow.providers
包。
为了进行清理,移动了以下软件包
旧软件包 |
新软件包 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
如果您使用 logging_config_class
选项设置日志配置,则应更新导入路径。旧的导入路径仍然有效,但可以被放弃。
SendGrid 电子邮件程序已移动¶
以前,核心代码由原始创建者 Airbnb 维护。contrib 包中的代码由社区支持。该项目已移交给 Apache 社区,目前整个代码由社区维护,因此现在这种划分没有道理,这仅仅是历史原因。
为了进行清理,已移动 airflow.contrib.utils.sendgrid
模块中的 send_mail
函数。
如果您的配置文件如下所示
[email]
email_backend = airflow.contrib.utils.sendgrid.send_email
现在它应该如下所示
[email]
email_backend = airflow.providers.sendgrid.utils.emailer.send_email
旧的配置仍然有效,但可以被放弃。
统一 core
部分中的 hostname_callable
选项¶
以前的选项使用冒号 (:
) 将模块与函数分开。现在使用点号 (.
)。
此更改旨在统一 airflow.cfg
文件中引用对象的所有选项的格式。
使用完整导入路径加载自定义执行器¶
在以前的 Airflow 版本中,可以使用插件来加载自定义执行器。这仍然是可能的,但配置已更改。现在您无需创建插件来配置自定义执行器,但您需要在 core
部分的 executor
选项中提供模块的完整路径。此更改的目的是简化插件机制并使其更容易配置执行器。
如果您的模块在路径 my_acme_company.executors.MyCustomExecutor
中,并且插件名为 my_plugin
,则您的配置如下所示
[core]
executor = my_plugin.MyCustomExecutor
现在它应该如下所示
[core]
executor = my_acme_company.executors.MyCustomExecutor
旧的配置仍然有效,但随时可以被放弃。
对于自定义数据模型,请使用 CustomSQLAInterface
而不是 SQLAInterface
。¶
从 Airflow 2.0 开始,如果要定义自己的 Flask App Builder 数据模型,则需要使用 CustomSQLAInterface 而不是 SQLAInterface。
对于非 RBAC,请替换
from flask_appbuilder.models.sqla.interface import SQLAInterface
datamodel = SQLAInterface(your_data_model)
带有 RBAC (在 1.10 中)
from airflow.www_rbac.utils import CustomSQLAInterface
datamodel = CustomSQLAInterface(your_data_model)
在 2.0 中
from airflow.www.utils import CustomSQLAInterface
datamodel = CustomSQLAInterface(your_data_model)
删除 stat_name_handler 的插件支持¶
在之前的版本中,你可以使用插件机制来配置 stat_name_handler
。现在你应该使用 [scheduler]
部分中的 stat_name_handler
选项来实现相同的效果。
如果你的插件如下所示,并且可以通过 test_plugin
路径访问
def my_stat_name_handler(stat):
return stat
class AirflowTestPlugin(AirflowPlugin):
name = "test_plugin"
stat_name_handler = my_stat_name_handler
那么你的 airflow.cfg
文件应该如下所示
[scheduler]
stat_name_handler=test_plugin.my_stat_name_handler
此更改旨在简化 statsd 配置。
日志配置已移动到新部分¶
以下配置已从 [core]
移动到新的 [logging]
部分。
base_log_folder
remote_logging
remote_log_conn_id
remote_base_log_folder
encrypt_s3_logs
logging_level
fab_logging_level
logging_config_class
colored_console_log
colored_log_format
colored_formatter_class
log_format
simple_log_format
task_log_prefix_template
log_filename_template
log_processor_filename_template
dag_processor_manager_log_location
task_log_reader
指标配置已移动到新部分¶
以下配置已从 [scheduler]
移动到新的 [metrics]
部分。
statsd_on
statsd_host
statsd_port
statsd_prefix
statsd_allow_list
stat_name_handler
statsd_datadog_enabled
statsd_datadog_tags
statsd_custom_client_path
Elasticsearch 日志提供程序的更改¶
当启用 JSON 输出到 stdout 时,日志行现在将包含 log_id
和 offset
字段,这应该使从 Web 服务器上的 Elasticsearch 读取任务日志开箱即用。示例配置
[logging]
remote_logging = True
[elasticsearch]
host = http://es-host:9200
write_stdout = True
json_format = True
请注意,Web 服务器期望日志行数据本身存在于文档的 message
字段中。
删除 airflow.cfg 文件中的 gcp_service_account_keys 选项¶
此选项已被删除,因为它不再受 Google Kubernetes Engine 支持。 Google Cloud 管理方法的新推荐服务帐户密钥是 Workload Identity。
默认启用 Fernet¶
默认情况下启用 Fernet 机制,以提高默认安装的安全性。 为了恢复先前的行为,用户必须在 airflow.cfg
文件的 [core]
部分的 fernet_key
选项中自觉地设置一个空密钥。
同时,这意味着始终安装 apache-airflow[crypto]
额外包。 但是,这要求您的操作系统已安装 libffi-dev
。
传播 Kubernetes 工作节点注解的更改¶
kubernetes_annotations
配置部分已被删除。 新的键 worker_annotations
已添加到现有的 kubernetes
部分中。 这是为了删除 k8s 注解键的字符集限制。 kubernetes_annotations
中的所有键/值对现在应该以 json 格式转到 worker_annotations
。 即,例如,而不是
[kubernetes_annotations]
annotation_key = annotation_value
annotation_key2 = annotation_value2
它应该被重写为
[kubernetes]
worker_annotations = { "annotation_key" : "annotation_value", "annotation_key2" : "annotation_value2" }
删除 run_duration¶
我们不应该再使用 run_duration
选项。 过去这是用于不时重启调度程序的,但现在调度程序变得更加稳定,因此使用此设置被认为是糟糕的做法,并可能导致不一致的状态。
重命名池 statsd 指标¶
已使用的槽已重命名为运行槽,以使名称不言自明并使代码更易于维护。
这意味着 pool.used_slots.<pool_name>
指标已重命名为 pool.running_slots.<pool_name>
。 Pools Web UI 视图中的 Used Slots
列也已更改为 Running Slots
。
删除 Mesos Executor¶
Mesos Executor 已从代码库中删除,因为它没有被广泛使用且未维护。 关于删除它的邮件列表讨论。
更改 DAG 加载持续时间指标名称¶
将 DAG 文件加载持续时间指标从 dag.loading-duration.<dag_id>
更改为 dag.loading-duration.<dag_file>
。 这是为了更好地处理一个 DAG 文件有多个 DAG 的情况。
默认禁用 Sentry¶
默认禁用 Sentry。 要启用这些集成,你需要将 [sentry]
部分中的 sentry_on
选项设置为 "True"
。
简化的 GCSTaskHandler 配置¶
在以前的版本中,为了配置服务帐户密钥文件,你必须创建一个连接条目。 在当前版本中,你可以配置 [logging]
部分中的 google_key_path
选项来设置密钥文件路径。
使用应用程序默认凭据 (ADC) 的用户无需采取任何操作。
此更改旨在简化日志记录的配置,以防止通过更改用户控制的值(连接条目)来损坏实例配置。 如果你配置了后端密钥,这也意味着 Web 服务器不需要连接到它。 这简化了具有多个 GCP 项目的设置,因为只有一个项目需要启用 Secret Manager API。
核心操作符/钩子的更改¶
我们努力确保没有可能影响最终用户和你的文件的更改,但此版本可能包含需要更改你的 DAG 文件的更改。
本节介绍已进行的更改,以及如果使用核心操作符或任何其他操作符,你需要执行哪些操作来更新你的 DAG 文件。
BaseSensorOperator 现在尊重下游任务的 trigger_rule¶
以前,设置了 soft_fail=True
的 BaseSensorOperator 在失败时会跳过自身并无条件跳过其所有下游任务,即不遵守下游任务的 trigger_rule。
在新行为中,会尊重下游任务的 trigger_rule。 用户可以通过将每个下游任务的 trigger_rule 设置为 all_success
来保留/实现原始行为。
BaseOperator 使用元类¶
BaseOperator
类使用 BaseOperatorMeta
作为元类。 此元类基于 abc.ABCMeta
。 如果你的自定义操作符使用不同的元类,则需要对其进行调整。
删除 BaseHook 中的 SQL 支持¶
从 BaseHook 中删除 get_records
和 get_pandas_df
和 run
,它们仅适用于类似 SQL 的钩子。 如果要使用它们,或者你的自定义钩子继承了它们,请使用 airflow.hooks.dbapi.DbApiHook
不再支持使用按位移位(位移)运算符将任务分配给 DAG¶
以前,你可以按如下方式将任务分配给 DAG
dag = DAG("my_dag")
dummy = DummyOperator(task_id="dummy")
dag >> dummy
不再支持此操作。 相反,我们建议将 DAG 用作上下文管理器
with DAG("my_dag") as dag:
dummy = DummyOperator(task_id="dummy")
删除已弃用的导入机制¶
已删除已弃用的导入机制,以便模块的导入更加一致和明确。
例如:from airflow.operators import BashOperator
变为 from airflow.operators.bash_operator import BashOperator
传感器导入的更改¶
现在可以通过 airflow.sensors
访问传感器,不再通过 airflow.operators.sensors
访问。
例如:from airflow.operators.sensors import BaseSensorOperator
变为 from airflow.sensors.base import BaseSensorOperator
跳过的任务可以满足 wait_for_downstream¶
以前,如果前一个任务实例的下游任务成功,则具有 wait_for_downstream=True
的任务实例才会运行。同时,如果前一个任务实例成功或被跳过,则具有 depends_on_past=True
的任务实例将会运行。这两个标志是近亲,但它们的行为不同。这种行为的不一致使 API 对用户来说不够直观。为了保持一致的行为,现在成功或跳过的下游任务都可以满足 wait_for_downstream=True
标志。
airflow.utils.helpers.cross_downstream
¶
airflow.utils.helpers.chain
¶
chain
和 cross_downstream
方法现在从 airflow.utils.helpers
模块移动到 airflow.models.baseoperator 模块。
baseoperator
模块似乎是将紧密耦合的方法放在一起的更好选择。Helpers 模块应该包含可以被所有类导入的独立帮助方法。
chain
方法和 cross_downstream
方法都使用 BaseOperator。如果任何其他包从 helpers 模块导入任何类或函数,那么它会自动对 BaseOperator 产生隐式依赖。这通常会导致循环依赖。
更多信息请参见 AIRFLOW-6392
在 Airflow < 2.0 中,您是这样导入这两个方法的
from airflow.utils.helpers import chain
from airflow.utils.helpers import cross_downstream
在 Airflow 2.0 中,它应该更改为
from airflow.models.baseoperator import chain
from airflow.models.baseoperator import cross_downstream
airflow.operators.python.BranchPythonOperator
¶
BranchPythonOperator
现在将返回一个等于所选分支的 task_id
的值,而之前返回 None。由于它继承自 BaseOperator,如果 do_xcom_push=True
,它将执行此值的 xcom_push
。这对于下游决策很有用。
airflow.sensors.sql_sensor.SqlSensor
¶
SQLSensor 现在与 python bool()
函数一致,并且 allow_null
参数已被删除。
在接收到任何通过 python bool(value)
转换为 True
的值后,它将解析。这改变了之前接收 NULL
或 '0'
的响应。早先 '0'
被视为成功标准。NULL
的处理取决于 allow_null
参数的值。但是,通过将参数 success
设置为 lambda x: x is None or str(x) not in ('0', '')
,仍然可以实现所有以前的行为。
airflow.operators.trigger_dagrun.TriggerDagRunOperator
¶
TriggerDagRunOperator 现在接受一个 conf
参数,该参数可以提供一个 dict 作为 DagRun 的配置。因此,python_callable
参数被删除。PR: https://github.com/apache/airflow/pull/6317。
airflow.operators.python.PythonOperator
¶
PythonOperator 上的 provide_context
参数已被删除。现在会推断传递给 PythonOperator 的可调用对象的签名,并自动提供参数值。不再需要显式提供或不提供上下文。例如
def myfunc(execution_date):
print(execution_date)
python_operator = PythonOperator(task_id="mytask", python_callable=myfunc, dag=dag)
请注意,您不必设置 provide_context=True,现在会自动检测并提供任务上下文中的变量。
所有上下文变量仍然可以使用双星号参数提供
def myfunc(**context):
print(context) # all variables will be provided to context
python_operator = PythonOperator(task_id="mytask", python_callable=myfunc)
任务上下文变量名是可调用函数中的保留名称,因此与 op_args
和 op_kwargs
冲突会导致异常
def myfunc(dag):
# raises a ValueError because "dag" is a reserved name
# valid signature example: myfunc(mydag)
print("output")
python_operator = PythonOperator(
task_id="mytask",
op_args=[1],
python_callable=myfunc,
)
此更改是向后兼容的,设置 provide_context
会将 provide_context
变量添加到 kwargs
(但不会执行任何操作)。
PR: #5990
airflow.sensors.filesystem.FileSensor
¶
FileSensor 现在采用 glob 模式,而不仅仅是文件名。如果您要查找的文件名中包含 *
、?
或 [
,则应将其替换为 [*]
、[?]
和 [[]
。
airflow.operators.subdag_operator.SubDagOperator
¶
SubDagOperator
被更改为使用 Airflow 调度器而不是回填来调度子 DAG 中的任务。用户不再需要在 SubDagOperator
中指定执行器。
airflow.providers.google.cloud.operators.datastore.CloudDatastoreExportEntitiesOperator
¶
airflow.providers.google.cloud.operators.datastore.CloudDatastoreImportEntitiesOperator
¶
airflow.providers.cncf.kubernetes.operators.kubernetes_pod.KubernetesPodOperator
¶
airflow.providers.ssh.operators.ssh.SSHOperator
¶
airflow.providers.microsoft.winrm.operators.winrm.WinRMOperator
¶
airflow.operators.bash.BashOperator
¶
airflow.providers.docker.operators.docker.DockerOperator
¶
airflow.providers.http.operators.http.SimpleHttpOperator
¶
do_xcom_push
标志(一个用于将操作符的结果推送到 xcom 的开关)以不同的形式出现在不同的操作符中。它的功能已统一在 BaseOperator
上的通用名称(do_xcom_push
)下。这样也可以轻松地全局禁用将结果推送到 xcom。
以下操作符受到影响
DatastoreExportOperator (向后兼容)
DatastoreImportOperator (向后兼容)
KubernetesPodOperator (不向后兼容)
SSHOperator (不向后兼容)
WinRMOperator (不向后兼容)
BashOperator (不向后兼容)
DockerOperator (不向后兼容)
SimpleHttpOperator (不向后兼容)
有关详细信息,请参阅 AIRFLOW-3249
airflow.operators.latest_only_operator.LatestOnlyOperator
¶
在之前的版本中,LatestOnlyOperator
会强制跳过其自身的所有(直接和间接)下游任务。从这个版本开始,该操作符将仅跳过直接下游任务,而调度器将处理跳过任何进一步的下游依赖项。
如果仅使用默认的触发规则 all_success
,则无需进行任何更改。
如果 DAG 依赖于具有其他触发规则(例如 all_done
)的任务被 LatestOnlyOperator
跳过,则需要调整 DAG 以适应行为的变化,即从 LatestOnlyOperator
添加额外的边。
此更改的目标是基于 BaseBranchOperator
实现更一致和可配置的级联行为(请参阅 AIRFLOW-2923 和 AIRFLOW-1784)。
核心 Python API 的更改¶
我们努力确保没有可能影响最终用户的更改以及您的 Python 文件,但此版本可能包含需要更改您的插件、DAG 文件或其他集成的更改。
此处仅描述此提供程序特有的更改。您仍应注意对核心(包括核心操作符)所做的更改,因为它们可能会影响此提供程序的集成行为。
本节描述了所做的更改,以及您需要执行哪些操作来更新您的 Python 文件。
从 airflow/__init__.py
中删除子包导入¶
已从 airflow/__init__.py
中删除导入 LoggingMixin
、conf
和 AirflowException
。对这些对象的所有隐式引用将不再有效。要进行迁移,必须将每个旧路径的所有用法替换为相应的新路径。
旧路径(隐式导入) |
新路径(显式导入) |
---|---|
|
|
|
|
|
|
airflow.contrib.utils.Weekday
¶
以前,核心代码由原始创建者 Airbnb 维护。contrib 包中的代码由社区支持。该项目已移交给 Apache 社区,目前整个代码由社区维护,因此现在这种划分没有道理,这仅仅是历史原因。
为了进行清理,已将 Weekday
枚举从 airflow.contrib.utils
移动到 airflow.utils
模块。
airflow.models.connection.Connection
¶
连接模块有新的已弃用方法
Connection.parse_from_uri
Connection.log_info
Connection.debug_info
以及一个已弃用的函数
parse_netloc_to_hostname
以前,用户可以通过两种方式创建连接对象
conn_1 = Connection(conn_id="conn_a", uri="mysql://AAA/")
# or
conn_2 = Connection(conn_id="conn_a")
conn_2.parse_uri(uri="mysql://AAA/")
现在不支持第二种方式。
Connection.log_info
和 Connection.debug_info
方法已弃用。请单独读取每个连接字段或使用默认表示形式 (__repr__
)。
旧方法仍然有效,但可以随时放弃。这些更改旨在删除很少使用的方法。
airflow.models.dag.DAG.create_dagrun
¶
DAG.create_dagrun 接受 run_type,并且不需要 run_id。此更改的原因是在 DagRun
中添加了 run_type
列。
以前的签名
def create_dagrun(
self,
run_id,
state,
execution_date=None,
start_date=None,
external_trigger=False,
conf=None,
session=None,
):
...
当前
def create_dagrun(
self,
state,
execution_date=None,
run_id=None,
start_date=None,
external_trigger=False,
conf=None,
run_type=None,
session=None,
):
...
如果用户提供 run_id
,则将通过检查前缀从中派生 run_type
,允许的类型为:manual
、scheduled
、backfill
(由 airflow.utils.types.DagRunType
定义)。
如果用户提供 run_type
和 execution_date
,则 run_id
将构造为 {run_type}__{execution_data.isoformat()}
。
Airflow 应该使用 run_type
和 execution_date
来构造 dagruns,使用 run_id
创建 dagruns 保留用于用户操作。
airflow.models.dagrun.DagRun
¶
使用 DagRunType.SCHEDULED.value 而不是 DagRun.ID_PREFIX
不同类型 DagRuns 的所有 run_id 前缀都已分组到 airflow.utils.types.DagRunType
中的单个枚举中。
以前,它们在各种位置定义,例如 DagRun
、BackfillJob
和 _trigger_dag
函数的 ID_PREFIX
类变量。
曾是
>> from airflow.models.dagrun import DagRun
>> DagRun.ID_PREFIX
scheduled__
替换为
>> from airflow.utils.types import DagRunType
>> DagRunType.SCHEDULED.value
scheduled
airflow.utils.file.TemporaryDirectory
¶
我们移除了 airflow.utils.file.TemporaryDirectory
。由于 Airflow 已放弃对 Python < 3.5 的支持,因此无需拥有此自定义实现的 TemporaryDirectory
,因为 tempfile.TemporaryDirectory
提供了相同的功能。
现在,用户应该执行 from tempfile import TemporaryDirectory
,而不是 import from airflow.utils.files import TemporaryDirectory
。两个上下文管理器都提供相同的接口,因此不需要其他更改。
airflow.AirflowMacroPlugin
¶
我们移除了 airflow.AirflowMacroPlugin
类。该类在 airflow 包中,但尚未使用(显然自 2015 年以来)。它已被移除。
airflow.settings.CONTEXT_MANAGER_DAG
¶
CONTEXT_MANAGER_DAG 已从设置中删除。它的角色已由 'airflow.models.dag' 中的 DagContext
接管。原因之一是设置应该更静态,而不是存储来自 DAG 的动态上下文,但主要原因是将上下文移出设置可以解开 DAG、BaseOperator、SerializedDAG、SerializedBaseOperator 之间的循环导入,这是 AIRFLOW-6010 的一部分。
airflow.utils.log.logging_mixin.redirect_stderr
¶
airflow.utils.log.logging_mixin.redirect_stdout
¶
已删除 airflow.utils.log.logging_mixin
模块中的函数 redirect_stderr
和 redirect_stdout
,因为它们可以很容易地被标准库替换。标准库的功能更灵活,可以在更大的情况下使用。
以下代码
import logging
from airflow.utils.log.logging_mixin import redirect_stderr, redirect_stdout
logger = logging.getLogger("custom-logger")
with redirect_stdout(logger, logging.INFO), redirect_stderr(logger, logging.WARN):
print("I love Airflow")
可以用以下代码替换
from contextlib import redirect_stdout, redirect_stderr
import logging
from airflow.utils.log.logging_mixin import StreamLogWriter
logger = logging.getLogger("custom-logger")
with redirect_stdout(StreamLogWriter(logger, logging.INFO)), redirect_stderr(
StreamLogWriter(logger, logging.WARN)
):
print("I Love Airflow")
airflow.models.baseoperator.BaseOperator
¶
现在,传递给 BaseOperator 的其他参数会导致异常。以前版本的 Airflow 采用其他参数并在控制台上显示一条消息。当用户没有注意到该消息时,会导致非常难以检测的错误。
为了恢复以前的行为,必须在 airflow.cfg
文件中 [operators]
部分的 allow_illegal_arguments
选项中设置 True
。将来,可能会完全删除此选项。
airflow.models.dagbag.DagBag
¶
将 store_serialized_dags
参数传递给 DagBag.__init__ 和访问 DagBag.store_serialized_dags
属性已弃用,并且将在未来版本中删除。
以前的签名:
def __init__(
dag_folder=None,
include_examples=conf.getboolean("core", "LOAD_EXAMPLES"),
safe_mode=conf.getboolean("core", "DAG_DISCOVERY_SAFE_MODE"),
store_serialized_dags=False,
):
...
当前:
def __init__(
dag_folder=None,
include_examples=conf.getboolean("core", "LOAD_EXAMPLES"),
safe_mode=conf.getboolean("core", "DAG_DISCOVERY_SAFE_MODE"),
read_dags_from_db=False,
):
...
如果您使用的是位置参数,则不需要进行任何更改,但如果您使用的是关键字参数,请将 store_serialized_dags
更改为 read_dags_from_db
。
同样,如果您使用的是 DagBag().store_serialized_dags
属性,请将其更改为 DagBag().read_dags_from_db
。
google
提供程序包中的更改¶
我们努力确保没有可能影响最终用户的更改以及您的 Python 文件,但此版本可能包含需要更改您的配置、DAG 文件或其他集成(例如自定义操作符)的更改。
此处仅描述此提供程序特有的更改。您仍应注意对核心(包括核心操作符)所做的更改,因为它们可能会影响此提供程序的集成行为。
本节描述了所做的更改,以及如果您使用与 Google 服务(包括 Google Cloud - GCP)集成的操作符或钩子,您需要执行哪些操作来进行更新。
与 Google 服务通信的操作符添加了直接模拟¶
现在,操作员可以通过名为 impersonation_chain
(如果操作员还与其它云提供商的服务通信,则为 google_impersonation_chain
)的新参数,直接模拟服务帐号与 Google 服务通信。因此,GCSToS3Operator 不再继承自 GCSListObjectsOperator。
规范化 Google Cloud 的 gcp_conn_id¶
之前,并非所有与 Google Cloud 相关的 Hook 和 Operator 都使用 gcp_conn_id
作为 GCP 连接的参数。目前有一个参数适用于大多数服务。类似 datastore_conn_id
、bigquery_conn_id
、google_cloud_storage_conn_id
和类似的参数已被弃用。需要两个连接的 Operator 不会更改。
以下组件受到规范化的影响
airflow.providers.google.cloud.hooks.datastore.DatastoreHook
airflow.providers.google.cloud.hooks.bigquery.BigQueryHook
airflow.providers.google.cloud.hooks.gcs.GoogleCloudStorageHook
airflow.providers.google.cloud.operators.bigquery.BigQueryCheckOperator
airflow.providers.google.cloud.operators.bigquery.BigQueryValueCheckOperator
airflow.providers.google.cloud.operators.bigquery.BigQueryIntervalCheckOperator
airflow.providers.google.cloud.operators.bigquery.BigQueryGetDataOperator
airflow.providers.google.cloud.operators.bigquery.BigQueryOperator
airflow.providers.google.cloud.operators.bigquery.BigQueryDeleteDatasetOperator
airflow.providers.google.cloud.operators.bigquery.BigQueryCreateEmptyDatasetOperator
airflow.providers.google.cloud.operators.bigquery.BigQueryTableDeleteOperator
airflow.providers.google.cloud.operators.gcs.GoogleCloudStorageCreateBucketOperator
airflow.providers.google.cloud.operators.gcs.GoogleCloudStorageListOperator
airflow.providers.google.cloud.operators.gcs.GoogleCloudStorageDownloadOperator
airflow.providers.google.cloud.operators.gcs.GoogleCloudStorageDeleteOperator
airflow.providers.google.cloud.operators.gcs.GoogleCloudStorageBucketCreateAclEntryOperator
airflow.providers.google.cloud.operators.gcs.GoogleCloudStorageObjectCreateAclEntryOperator
airflow.operators.sql_to_gcs.BaseSQLToGoogleCloudStorageOperator
airflow.operators.adls_to_gcs.AdlsToGoogleCloudStorageOperator
airflow.operators.gcs_to_s3.GoogleCloudStorageToS3Operator
airflow.operators.gcs_to_gcs.GoogleCloudStorageToGoogleCloudStorageOperator
airflow.operators.bigquery_to_gcs.BigQueryToCloudStorageOperator
airflow.operators.local_to_gcs.FileToGoogleCloudStorageOperator
airflow.operators.cassandra_to_gcs.CassandraToGoogleCloudStorageOperator
airflow.operators.bigquery_to_bigquery.BigQueryToBigQueryOperator
GCP Operator 和 Hook 的导入路径和名称的更改¶
根据 AIP-21,与 Google Cloud 相关的 Operator 已从 contrib 移动到 core。下表显示了导入路径的更改。
旧路径 |
新路径 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
统一 Google Cloud 的默认连接 ID¶
之前,并非所有与 Google Cloud 相关的钩子和操作符都使用 google_cloud_default
作为默认的连接 ID。目前只有一个默认变体。类似 google_cloud_storage_default
、bigquery_default
、google_cloud_datastore_default
的值已被弃用。数据库中现有相关连接的配置已保留。要使用这些已弃用的 GCP 连接 ID,您需要显式地将它们的连接 ID 传递到操作符/钩子中。否则,默认情况下将使用 google_cloud_default
作为 GCP 的连接 ID。
airflow.providers.google.cloud.hooks.dataflow.DataflowHook
¶
airflow.providers.google.cloud.operators.dataflow.DataflowCreateJavaJobOperator
¶
airflow.providers.google.cloud.operators.dataflow.DataflowTemplatedJobStartOperator
¶
airflow.providers.google.cloud.operators.dataflow.DataflowCreatePythonJobOperator
¶
为了在 GCP 钩子和操作符中一致地使用 project_id 参数,我们进行了以下更改
- 更改了 DataflowHook.start_python_dataflow 中参数的顺序。使用
带有位置参数可能会中断。
- 更改了 DataflowHook.is_job_dataflow_running 中参数的顺序。使用
带有位置参数可能会中断。
- 更改了 DataflowHook.cancel_job 中参数的顺序。使用
带有位置参数可能会中断。
- 向 DataflowCreateJavaJobOperator 添加了可选的 project_id 参数
构造函数。
- 向 DataflowTemplatedJobStartOperator 添加了可选的 project_id 参数
构造函数。
- 向 DataflowCreatePythonJobOperator 添加了可选的 project_id 参数
构造函数。
airflow.providers.google.cloud.sensors.gcs.GCSUploadSessionCompleteSensor
¶
为了在处理底层 GCS 存储桶中对象的更改时提供更精确的控制,现在更改了此传感器的构造函数。
旧行为:此构造函数过去可以选择接受
previous_num_objects: int
。新的替换构造函数 kwarg:
previous_objects: Optional[Set[str]]
。
大多数用户不会指定此参数,因为存储桶开始时是空的,并且用户希望将任何文件都视为新的。
更新此传感器用法的示例:过去使用
GCSUploadSessionCompleteSensor(bucket='my_bucket', prefix='my_prefix', previous_num_objects=1)
的用户现在将调用
GCSUploadSessionCompleteSensor(bucket='my_bucket', prefix='my_prefix', previous_num_objects={'.keep'})
其中 ‘.keep’ 是您前缀下的单个文件,传感器不应将其视为新的。
airflow.providers.google.cloud.hooks.bigquery.BigQueryBaseCursor
¶
airflow.providers.google.cloud.hooks.bigquery.BigQueryHook
¶
为了简化 BigQuery 操作符(无需 Cursor
)并标准化所有 GCP 集成方法中钩子的使用,BiqQueryBaseCursor
中的钩子被移动到了 BigQueryHook
中。由于保留了向后兼容性,仍然可以通过 Cursor
对象使用它们,但会引发 DeprecationWarning
。以下方法已被移动:
旧路径 |
新路径 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
airflow.providers.google.cloud.hooks.bigquery.BigQueryBaseCursor
¶
由于 BigQuery 是 GCP 的一部分,因此可以通过使用 airflow.providers.google.common.hooks.base.GoogleBaseHook.catch_http_exception
装饰器来处理异常,从而简化代码。但是,这会更改以下方法引发的异常:
airflow.providers.google.cloud.hooks.bigquery.BigQueryBaseCursor.run_table_delete
引发AirflowException
而不是Exception
。airflow.providers.google.cloud.hooks.bigquery.BigQueryBaseCursor.create_empty_dataset
引发AirflowException
而不是ValueError
。airflow.providers.google.cloud.hooks.bigquery.BigQueryBaseCursor.get_dataset
引发AirflowException
而不是ValueError
。
airflow.providers.google.cloud.operators.bigquery.BigQueryCreateEmptyTableOperator
¶
airflow.providers.google.cloud.operators.bigquery.BigQueryCreateEmptyDatasetOperator
¶
已为 BigQueryCreateEmptyTableOperator
和 BigQueryCreateEmptyDatasetOperator
添加了幂等性。但是,为了实现这一点,从 BigQueryHook
的 create_empty_dataset
和 create_empty_table
方法中删除了 try / except 子句。
airflow.providers.google.cloud.hooks.dataflow.DataflowHook
¶
airflow.providers.google.cloud.hooks.mlengine.MLEngineHook
¶
airflow.providers.google.cloud.hooks.pubsub.PubSubHook
¶
GCP 操作符的更改意味着,这些操作符的 GCP 钩子现在需要在所有使用 project_id
的方法中使用关键字参数,而不是位置参数。如果使用位置参数调用这些方法,则会抛出说明性异常。
其他 GCP 钩子不受影响。
airflow.providers.google.cloud.hooks.pubsub.PubSubHook
¶
airflow.providers.google.cloud.operators.pubsub.PubSubTopicCreateOperator
¶
airflow.providers.google.cloud.operators.pubsub.PubSubSubscriptionCreateOperator
¶
airflow.providers.google.cloud.operators.pubsub.PubSubTopicDeleteOperator
¶
airflow.providers.google.cloud.operators.pubsub.PubSubSubscriptionDeleteOperator
¶
airflow.providers.google.cloud.operators.pubsub.PubSubPublishOperator
¶
airflow.providers.google.cloud.sensors.pubsub.PubSubPullSensor
¶
在 PubSubPublishOperator
和 PubSubHook.publish
方法中,消息中的 data 字段应为字节串 (utf-8 编码),而不是 base64 编码的字符串。
由于 GCP 操作符和钩子中的参数标准化,像 project
或 topic_project
这样的参数已被弃用,并将被参数 project_id
替换。在 PubSubHook.create_subscription
钩子方法中,参数 subscription_project
被 subscription_project_id
替换。模板字段已相应更新,旧的字段可能无法使用。
现在需要将仅关键字参数传递给 PubSub
钩子。
这些更改不向后兼容。
airflow.providers.google.cloud.operators.kubernetes_engine.GKEStartPodOperator
¶
GKEPodOperator 中的 gcp_conn_id 参数是必需的。在以前的版本中,可以将 None
值传递给 GKEStartPodOperator 操作符中的 gcp_conn_id
,这将导致根据应用程序默认凭据策略确定凭据。
现在,此参数需要一个值。要恢复以前的行为,请配置连接而不指定服务帐户。
有关连接管理的详细信息,请访问:Google Cloud 连接。
airflow.providers.google.cloud.hooks.gcs.GCSHook
¶
以下参数已在 GCSHook 中的所有方法中被替换:
bucket
已更改为bucket_name
object
已更改为object_name
为了保持一致性,
GoogleCloudStorageHook.list
中的maxResults
参数已重命名为max_results
。
airflow.providers.google.cloud.operators.dataproc.DataprocSubmitPigJobOperator
¶
airflow.providers.google.cloud.operators.dataproc.DataprocSubmitHiveJobOperator
¶
airflow.providers.google.cloud.operators.dataproc.DataprocSubmitSparkSqlJobOperator
¶
airflow.providers.google.cloud.operators.dataproc.DataprocSubmitSparkJobOperator
¶
airflow.providers.google.cloud.operators.dataproc.DataprocSubmitHadoopJobOperator
¶
airflow.providers.google.cloud.operators.dataproc.DataprocSubmitPySparkJobOperator
¶
Dataproc 相关操作符 (DataprocXXXOperator
) 的 ‘properties’ 和 ‘jars’ 属性已从 dataproc_xxxx_properties
和 dataproc_xxx_jars
重命名为 dataproc_properties
和 dataproc_jars
。dataproc_properties dataproc_jars 的参数
airflow.providers.google.cloud.operators.cloud_storage_transfer_service.CloudDataTransferServiceCreateJobOperator
¶
为了获得 pylint 兼容性,CloudDataTransferServiceCreateJobOperator
中的 filter
参数已重命名为 request_filter
。
airflow.providers.google.cloud.hooks.cloud_storage_transfer_service.CloudDataTransferServiceHook
¶
为了获得 pylint 兼容性,
CloudDataTransferServiceHook.list_transfer_job
和CloudDataTransferServiceHook.list_transfer_operations
中的filter
参数已重命名为request_filter
。
airflow.providers.google.cloud.hooks.bigquery.BigQueryHook
¶
通常,所有 hook 方法都使用 @GoogleBaseHook.fallback_to_default_project_id
进行装饰,因此 hook 的参数只能通过关键字参数传递。
create_empty_table
方法现在接受table_resource
参数。如果提供了该参数,则将忽略所有其他参数。create_empty_dataset
现在将使用dataset_reference
中的值,而不是在dataset_reference
中传递参数以及作为方法的参数时引发错误。此外,dataset_reference
的验证是使用Dataset.from_api_repr
完成的。异常和日志消息已更改。update_dataset
现在需要新的fields
参数(破坏性更改)delete_dataset
有新的签名 (dataset_id, project_id, …),之前的签名是 (project_id, dataset_id, …) (破坏性更改)get_tabledata
返回行列表,而不是字典格式的 API 响应。此方法已被弃用,建议使用list_rows
。(破坏性更改)
airflow.providers.google.cloud.hooks.cloud_build.CloudBuildHook
¶
airflow.providers.google.cloud.operators.cloud_build.CloudBuildCreateBuildOperator
¶
api_version
已被删除,将不再使用,因为我们将CloudBuildHook
从使用Discovery API 迁移到原生的 google-cloud-build Python 库。
CloudBuildCreateBuildOperator
中的body
参数已被弃用。相反,您应该使用
build
参数传递 body。
airflow.providers.google.cloud.hooks.dataflow.DataflowHook.start_python_dataflow
¶
airflow.providers.google.cloud.hooks.dataflow.DataflowHook.start_python_dataflow
¶
airflow.providers.google.cloud.operators.dataflow.DataflowCreatePythonJobOperator
¶
将 python3 作为 Dataflow Hooks/Operators 的默认解释器进行更改
现在,DataFlow Hooks/Operators 的 py_interpreter
参数已从 python2 更改为 python3。
airflow.providers.google.common.hooks.base_google.GoogleBaseHook
¶
为了简化代码,装饰器 provide_gcp_credential_file 已从内部类移出。
您应该编写 @GoogleBaseHook.provide_gcp_credential_file
,而不是 @GoogleBaseHook._Decorators.provide_gcp_credential_file
airflow.providers.google.cloud.operators.dataproc.DataprocCreateClusterOperator
¶
强烈建议 Dataproc 的磁盘大小为 1TB 以上,以获得足够的吞吐量:https://cloud.google.com/compute/docs/disks/performance
因此,DataprocCreateClusterOperator
中的 master_disk_size
的默认值已从 500GB 更改为 1TB。
生成集群配置¶
如果您是从 Airflow 1.10.x 升级且未使用 CLUSTER_CONFIG,则可以使用 airflow.providers.google.cloud.operators.dataproc.ClusterGenerator
的 make() 轻松生成配置。
如果您正在使用旧 API 中的 metadata 参数,这将特别有用,有关详细信息,请参阅 AIRFLOW-16911。
例如,您的集群创建在 v1.10.x 中可能如下所示
path = f"gs://goog-dataproc-initialization-actions-us-central1/python/pip-install.sh"
create_cluster = DataprocClusterCreateOperator(
task_id="create_dataproc_cluster",
cluster_name="test",
project_id="test",
zone="us-central1-a",
region="us-central1",
master_machine_type="n1-standard-4",
worker_machine_type="n1-standard-4",
num_workers=2,
storage_bucket="test_bucket",
init_actions_uris=[path],
metadata={"PIP_PACKAGES": "pyyaml requests pandas openpyxl"},
)
升级到 v2.x.x 并使用 CLUSTER_CONFIG 后,它将如下所示
path = f"gs://goog-dataproc-initialization-actions-us-central1/python/pip-install.sh"
CLUSTER_CONFIG = ClusterGenerator(
project_id="test",
zone="us-central1-a",
master_machine_type="n1-standard-4",
worker_machine_type="n1-standard-4",
num_workers=2,
storage_bucket="test",
init_actions_uris=[path],
metadata={"PIP_PACKAGES": "pyyaml requests pandas openpyxl"},
).make()
create_cluster_operator = DataprocClusterCreateOperator(
task_id="create_dataproc_cluster",
cluster_name="test",
project_id="test",
region="us-central1",
cluster_config=CLUSTER_CONFIG,
)
airflow.providers.google.cloud.operators.bigquery.BigQueryGetDatasetTablesOperator
¶
我们更改了 BigQueryGetDatasetTablesOperator
的签名。
之前
def __init__(
dataset_id: str,
dataset_resource: dict,
# ...
):
...
之后
def __init__(
dataset_resource: dict,
dataset_id: Optional[str] = None,
# ...
):
...
amazon
提供程序包中的更改¶
我们力求确保不会出现可能影响最终用户的更改,并且您的 Python 文件不会出现更改,但此版本可能包含需要更改您的配置、DAG 文件或其他集成(例如自定义运算符)的更改。
此处仅描述此提供程序特有的更改。您仍应注意对核心(包括核心操作符)所做的更改,因为它们可能会影响此提供程序的集成行为。
本节介绍已进行的更改,以及如果您使用与 Amazon 服务(包括 Amazon Web Service - AWS)集成的运算符或 hook,您需要执行哪些操作进行更新。
AWS 组件的迁移¶
如 AIP-21 中所决定,所有 AWS 组件(hook、运算符、传感器、示例 DAG)将分组在一起。迁移的组件保持向后兼容性,但从旧模块导入时会引发 DeprecationWarning
。迁移的组件包括
旧路径 |
新路径 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
不适用 |
|
|
|
|
|
|
|
|
|
airflow.providers.amazon.aws.hooks.emr.EmrHook
¶
airflow.providers.amazon.aws.operators.emr_add_steps.EmrAddStepsOperator
¶
airflow.providers.amazon.aws.operators.emr_create_job_flow.EmrCreateJobFlowOperator
¶
airflow.providers.amazon.aws.operators.emr_terminate_job_flow.EmrTerminateJobFlowOperator
¶
在以前的版本中,一些 emr 运算符中的 aws_conn_id 的默认值被错误地设置为“s3_default”而不是“aws_default”。这导致 EmrStepSensor 无法找到其对应的 emr 集群。通过 EmrAddStepsOperator、EmrTerminateJobFlowOperator 和 EmrCreateJobFlowOperator 中的新更改,此问题已得到解决。
airflow.providers.amazon.aws.operators.batch.AwsBatchOperator
¶
重构了 AwsBatchOperator
以提取 AwsBatchClient
(并从中继承)。这些更改大多向后兼容,并阐明了这些类的公共 API;AwsBatchOperator
上的一些用于轮询作业状态的私有方法已重新定位并重命名,以在 AwsBatchClient
上(以及通过继承在 AwsBatchOperator
上)公开新的公共方法。AwsBatchOperator
的实例上的一些作业属性已重命名;这些属性主要用作私有属性,但它们已在公共 API 中公开,因此对它们的任何使用都需要按如下方式更新
AwsBatchOperator().jobId
->AwsBatchOperator().job_id
AwsBatchOperator().jobName
->AwsBatchOperator().job_name
AwsBatchOperator
获取一个新选项,用于定义等待作业状态更改的自定义模型。AwsBatchOperator
可以使用新的 waiters
参数,即 AwsBatchWaiters
的实例,以指定将使用自定义作业等待程序来监视批处理作业。有关详细信息,请参阅最新的 API 文档。
airflow.providers.amazon.aws.sensors.athena.AthenaSensor
¶
将参数 max_retires
替换为 max_retries
以修复拼写错误。
airflow.providers.amazon.aws.hooks.s3.S3Hook
¶
注意:check_for_prefix
的参数顺序已更改。 bucket_name
现在是可选的。 它会回退到 connection schema
属性。delete_objects
现在返回 None
而不是响应,因为当键列表的长度 > 1000 时,该方法现在会发出多个 API 请求。
其他提供程序包中的更改¶
我们努力确保没有可能影响最终用户的更改以及您的 Python 文件,但此版本可能包含需要更改您的配置、DAG 文件或其他集成(例如自定义操作符)的更改。
此处仅描述提供程序独有的更改。您仍然应该注意对核心(包括核心运算符)所做的更改,因为它们会影响此提供程序的集成行为。
本节介绍了已进行的更改,以及如果您使用 airflow.providers
包中的任何代码,则需要执行的更新操作。
S3Hook
中 list_prefixes
和 list_keys
方法的返回类型已更改¶
以前,当没有结果时,list_prefixes
和 list_keys
方法返回 None
。此行为已更改为在这种情况下返回一个空列表,而不是 None
。
已删除 HipChat 集成¶
HipChat 已达到生命周期结束,不再可用。
airflow.providers.salesforce.hooks.salesforce.SalesforceHook
¶
将参数 sandbox
替换为 domain
。根据 simple-salesforce 包中的更改。
将 sign_in
函数重命名为 get_conn
。
airflow.providers.apache.pinot.hooks.pinot.PinotAdminHook.create_segment
¶
为了与 pylint 兼容,在 PinotAdminHook 函数 create_segment 中,将参数名称从 format
重命名为 segment_format
airflow.providers.apache.hive.hooks.hive.HiveMetastoreHook.get_partitions
¶
为了与 pylint 兼容,在 HiveMetastoreHook 函数 get_partitions 中,将参数名称从 filter
重命名为 partition_filter
airflow.providers.ftp.hooks.ftp.FTPHook.list_directory
¶
为了与 pylint 兼容,在 FTPHook 函数 list_directory
中删除不必要的参数 nlst
airflow.providers.postgres.hooks.postgres.PostgresHook.copy_expert
¶
为了与 pylint 兼容,在 PostgresHook 函数 copy_expert
中删除不必要的参数 open
airflow.providers.opsgenie.operators.opsgenie_alert.OpsgenieAlertOperator
¶
为了与 pylint 兼容,在 OpsgenieAlertOperator 中将参数名称从 visibleTo
更改为 visible_to
airflow.providers.imap.hooks.imap.ImapHook
¶
airflow.providers.imap.sensors.imap_attachment.ImapAttachmentSensor
¶
ImapHook
has_mail_attachment
、retrieve_mail_attachments
和download_mail_attachments
的参数顺序已更改。已为每个参数添加新的
mail_filter
参数。
airflow.providers.http.hooks.http.HttpHook
¶
HTTPHook 现在默认是安全的:verify=True
(之前:verify=False
)可以通过将 extra_options 参数用作 {'verify': False}
来覆盖此设置。
airflow.providers.cloudant.hooks.cloudant.CloudantHook
¶
将 cloudant 版本从
>=0.5.9,<2.0
升级到>=2.0
删除了连接中
schema
属性的使用删除了
db
函数,因为可以通过调用cloudant_session['database_name']
来检索数据库对象
例如
from airflow.providers.cloudant.hooks.cloudant import CloudantHook
with CloudantHook().get_conn() as cloudant_session:
database = cloudant_session["database_name"]
有关如何使用新 cloudant 版本的更多信息,请参阅文档。
airflow.providers.snowflake
¶
初始化 Snowflake hook 或 operator 时,用于 snowflake_conn_id
的值始终为 snowflake_conn_id
,无论您是否指定了值。默认的 snowflake_conn_id
值现在切换为 snowflake_default
以保持一致性,并且在指定时将被正确覆盖。
其他更改¶
此版本还包括以上任何部分之外的更改。
标准化“额外”要求¶
我们标准化了 Extras 名称,并将提供程序包名称与主要的 airflow extras 同步。
我们在 2.0 中弃用了一些 extras。
已弃用的 extras |
新的 extras |
---|---|
atlas |
apache.atlas |
aws |
amazon |
azure |
microsoft.azure |
azure_blob_storage |
microsoft.azure |
azure_data_lake |
microsoft.azure |
azure_cosmos |
microsoft.azure |
azure_container_instances |
microsoft.azure |
cassandra |
apache.cassandra |
druid |
apache.druid |
gcp |
|
gcp_api |
|
hdfs |
apache.hdfs |
hive |
apache.hive |
kubernetes |
cncf.kubernetes |
mssql |
microsoft.mssql |
pinot |
apache.pinot |
webhdfs |
apache.webhdfs |
winrm |
apache.winrm |
例如
如果要安装 Apache Atlas 的集成,则应该使用 pip install apache-airflow[apache.atlas]
,而不是 pip install apache-airflow[atlas]
。
注意!
如果要安装 Microsoft Azure 的集成,则应该运行 pip install 'apache-airflow[microsoft.azure]'
,而不是
pip install 'apache-airflow[azure_blob_storage,azure_data_lake,azure_cosmos,azure_container_instances]'
您应该运行 pip install 'apache-airflow[microsoft.azure]'
如果要安装 Amazon Web Services 的集成,则应该执行 pip install 'apache-airflow[aws]'
,而不是 pip install 'apache-airflow[s3,emr]'
。
已弃用的 extras 将在 3.0 中删除。
简化端点 /dag_stats 和 /task_stats 的响应有效负载¶
端点 /dag_stats
和 /task_stats
的响应有助于 UI 获取有关 DAG 和任务的简要统计信息。格式如下
{
"example_http_operator": [
{
"state": "success",
"count": 0,
"dag_id": "example_http_operator",
"color": "green"
},
{
"state": "running",
"count": 0,
"dag_id": "example_http_operator",
"color": "lime"
}
]
}
dag_id
在有效负载中重复,这使得响应有效负载不必要地变大。
现在 dag_id
不会重复出现在有效负载中,响应格式如下
{
"example_http_operator": [
{
"state": "success",
"count": 0,
"color": "green"
},
{
"state": "running",
"count": 0,
"color": "lime"
}
]
}
Airflow 1.10.15 (2021-03-17)¶
重大更改¶
没有重大更改。
错误修复¶
修复
airflow db upgrade
以按预期升级数据库 (#13267)将 boto3 限制移至 snowflake (#13286)
KubernetesExecutor
应该接受来自executor_config
的镜像 (#13074)调度程序应正确确认活动运行 (#13803)
在 dist 包中包含
airflow/contrib/executors
为 Python 2.7 用户固定 Click 版本
确保所有 StatsD 计时器都使用毫秒值。 (#10633)
[
kubernetes_generate_dag_yaml
] - 修复 dag yaml 生成函数 (#13816)使用
--yes
修复airflow tasks clear
cli 命令 (#14188)修复非 POSIX 文件系统上的权限错误 (#13121) (#14383)
修复了 “variables” 命令的弃用消息 (#14457)
BugFix:修复 json_client 的
delete_dag
函数 (#14441)修复
KubernetesExecutor
的 secret 和 configmap 合并 (#14090)修复 gunicorn 主进程崩溃时 Web 服务器退出的问题 (#13470)
在
airflow/www_rbac
中将ini
从 1.3.5 更新到 1.3.8在
airflow/www_rbac
中将datatables.net
从 1.10.21 更新到 1.10.23Webserver:清理传递给 origin 参数的字符串 (#14738)
使
rbac_app
的db.session
与@provide_session
使用相同的时区 (#14025)
改进¶
在官方镜像中添加 airflow 作为可用的 docker 命令 (#12878)
StreamLogWriter
: 提供 (no-op) close 方法 (#10885)为 1.10.x 过渡版本添加 “airflow variables list” 命令 (#14462)
仅文档更改¶
更新 Airflow 文档的 URL (#13561)
明确在 Docker 中安装 1.10 的版本参数 (#12875)
Airflow 1.10.14 (2020-12-10)¶
重大更改¶
[scheduler] max_threads
配置已重命名为 [scheduler] parsing_processes
¶
从 Airflow 1.10.14 开始,[scheduler]
部分下的 max_threads
配置已重命名为 parsing_processes
。
这是为了使名称与实际代码保持一致,Scheduler 在实际代码中启动由 [scheduler] parsing_processes
定义的进程数量来解析 DAG 文件。
与 2.0 一致的 Airflow CLI 更改¶
Airflow CLI 已被组织成将相关命令分组为子命令,这意味着如果您在脚本中使用这些命令,它们现在将引发 DeprecationWarning,您必须在升级到 Airflow 2.0 之前对其进行更改。
本节描述了所做的更改,以及您需要做什么来更新脚本。
- 从命令行操作用户的能力已更改。
airflow create_user
,airflow delete_user
和
airflow list_users
已被分组到单个命令airflow users
,带有可选标志create
、list
和delete
。
airflow list_dags
命令现在是 airflow dags list
,airflow pause
是 airflow dags pause
,等等。
在 Airflow 1.10 和 2.0 中,都有一个 airflow config
命令,但行为有所不同。在 Airflow 1.10 中,它打印所有配置选项,而在 Airflow 2.0 中,它是一个命令组。airflow config
现在是 airflow config list
。您可以通过运行命令 airflow config --help
来查看其他选项
与旧 CLI 的兼容性已得到维护,但它们将不再出现在帮助中
您可以通过运行 airflow --help
来了解命令。例如,要获得关于 celery
组命令的帮助,您必须运行帮助命令:airflow celery --help
。
旧命令 |
新命令 |
组 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bug 修复¶
Bug 修复:具有
depends_on_past
或task_concurrency
的任务被卡住 (#12663)修复 executor_config 中 Resources 为空的问题 (#12633)
修复:未使用的已弃用配置
force_log_out_after
(#12661)修复 JSON 格式日志中 asctime 字段为空的问题 (#10515)
[AIRFLOW-2809] 修复关于 Flask SECRET_KEY 的安全问题 (#3651)
[AIRFLOW-2884] 修复 www_rbac 中 Flask SECRET_KEY 的安全问题 (#3729)
[AIRFLOW-2886] 在默认配置中生成随机 Flask SECRET_KEY (#3738)
在 setup.py 中添加缺失的逗号 (#12790)
Bug 修复:无法在 Python 3.8 上导入 Airflow 插件 (#12859)
修复
setup_requires
中 setup.py 缺少逗号的问题 (#12880)不要为仅运行一次的 dag 发出 first_task_scheduling_delay 指标 (#12835)
改进¶
更新 setup.py 以获取不冲突的依赖项集 (#12636)
将
[scheduler] max_threads
重命名为[scheduler] parsing_processes
(#12605)添加首次运行任务和预期开始时间之间调度延迟的指标 (#9544)
为 Airflow 1.10.x 添加新样式的 2.0 命令名称 (#12725)
为 Helm Chart 添加 Kubernetes cleanup-pods CLI 命令 (#11802)
不要让 Web 服务器以危险配置运行 (#12747)
用
importlib.metadata
替换 pkg_resources 以避免 VersionConflict 错误 (#12694)
仅文档更改¶
澄清关于支持的数据库的信息
Airflow 1.10.13 (2020-11-25)¶
重大更改¶
TimeSensor 现在支持时区¶
之前,TimeSensor
始终将 target_time
与 UTC 的当前时间进行比较。
现在,它将 target_time
与 DAG 时区的当前时间进行比较,默认为全局配置中的 default_timezone
。
删除了 HDFS hook 的 Kerberos 支持¶
由于 PyPI 中移除了 python-krbV
依赖,以及 Python3 中普遍缺乏对 SSL 的支持(我们用作依赖的 Snakebite-py3 不支持与 HDFS 的 SSL 连接),HDFS hook 的 Kerberos 支持已被移除。
SSL 支持仍然适用于 WebHDFS hook。
统一用户会话生命周期配置¶
在 Airflow 的早期版本中,用户会话生命周期可以通过 session_lifetime_days
和 force_log_out_after
选项进行配置。实际上,只有 session_lifetime_days
对会话生命周期有影响,但其值仅限于以天为单位。我们移除了上述选项,并引入了新的 session_lifetime_minutes
选项,从而简化了会话生命周期的配置。
之前
[webserver]
force_log_out_after = 0
session_lifetime_days = 30
之后
[webserver]
session_lifetime_minutes = 43200
通过 Airflow 插件添加 Operators、Hooks 和 Sensors 已被弃用¶
通过插件机制导入 Operators、Hooks 和 Sensors 的功能已被弃用,在 Airflow 1.10.13 中将发出警告,并在 Airflow 2.0 中完全移除。
请查看 https://airflow.apache.org/docs/1.10.13/howto/custom-operator.html,了解如何创建和导入自定义 Hooks、Operators 和 Sensors。
新特性¶
在 K8sPodOperator 中向失败的 pod 添加“已检查” (#11368)
将 SQLAlchemy 引擎选项传递给基于 FAB 的 UI (#11395)
[AIRFLOW-4438] 为 S3_hook 添加 Gzip 压缩 (#8571)
为 Viewer 角色及以上添加权限 “extra_links” (#10719)
添加 generate_yaml 命令,以便在部署 pod 之前轻松测试 KubernetesExecutor (#10677)
为 Microsoft Azure Key Vault 添加 Secrets 后端 (#10898)
Bug 修复¶
SkipMixin:处理空分支 (#11120)
[AIRFLOW-5274] dag 加载持续时间指标名称过长 (#5890)
在 DagrunIdDep 中处理无 Dagrun 的情况 (#8389) (#11343)
修复长 dag 名称的 Kubernetes Executor 日志 (#10942)
为 KubernetesPodOperator 添加 on_kill 支持 (#10666)
KubernetesPodOperator 模板修复 (#10963)
修复显示添加 serialized_dag 表迁移的问题
修复 DAG 页面上的开始日期工具提示 (#10637)
对最后运行链接中的执行日期进行 URL 编码 (#10595)
修复 Airflow 1.10 中 affinity 向后兼容的问题
修复 views.py 中 KubernetesExecutor 的导入
修复甘特图视图的问题 (#12419)
修复 Entrypoint 和 _CMD 配置变量 (#12411)
修复 SerializedBaseOperator 的 operator 字段更新 (#10924)
将 Python 2.7 的加密库限制在 < 3.2
在 Python 3.7 上安装 cattr - 修复 RTD 上的文档构建 (#12045)
限制 marshmallow-sqlalchemy 的版本
将
kubernetes
固定到最大版本 11.0.0 (#11974)为 Python3 的 HDFS 依赖使用 snakebite-py3 (#12340)
移除 snakebite kerberos 依赖 (#10865)
修复 FAB 和 Celery 的依赖失败问题 (#10828)
修复 1.10.13 的 pod_mutation_hook (#10850)
修复主机信息的格式
修复非 RBAC UI 中的注销 Google Auth 问题 (#11890)
向 app.py 添加缺失的导入 (#10650)
在旧 UI 中为图表和查询视图显示通用错误 (#12495)
TimeSensor 应遵守 default_timezone 配置 (#9699)
TimeSensor 应遵守 DAG 时区 (#9882)
统一用户会话生命周期配置 (#11970)
优雅地处理过时的 webserver 会话超时 (#12332)
改进¶
向 Airflow 1.10.13 添加 XCom.deserialize_value (#12328)
将 airflow.cfg 挂载到 pod_template_file (#12311)
所有 k8s 对象必须符合 JSON Schema (#12003)
验证 Airflow 图表 values.yaml 和 values.schema.json (#11990)
Pod 模板文件使用自定义环境变量 (#11480)
更新 attrs 和 cattrs 依赖 (#11969)
将 attrs 更新至 > 20.0 (#11799)
[AIRFLOW-3607] 对于 TriggerRuleDep,每个 DAG 运行只查询数据库一次 (#4751)
重命名具有重复 task_id 的任务
使用 Alembic 迁移管理 Flask AppBuilder 表 (#12352)
airflow test
仅适用于 1.10 中的任务,不适用于整个 dag (#11191)改进 DAG 中重复 task_id 的警告消息 (#11126)
将 moto 固定到 1.3.14 (#10986)
DbApiHook:支持 get_pandas_df 中的 kwargs (#9730)
使 K8sPodOperator 上的 grace_period_seconds 选项可用 (#10727)
修复 Dockerfile ‘maintainer’ 标签中的语法错误 (#10899)
Docker 镜像中的入口点应归 Airflow 所有 (#10853)
使 dockerfiles 符合 Google Shell 指南 (#10734)
Dockerfile 的 clean-logs 脚本:在休眠前修剪日志 (#10685)
当从子进程向 celery 发送任务时,重置信号处理程序 (#11278)
SkipMixin:添加缺失的 session.commit() 和测试 (#10421)
Webserver:进一步清理传递给 origin 参数的值 (#12459)
将 lodash 的安全性从 4.17.19 升级到 4.17.20 (#11095)
对于未注册的 OperatorLinks,记录日志而不是引发错误 (#11959)
在使用 CLI 时,在日志表中屏蔽密码 (#11468)
[AIRFLOW-3607] 优化 depends on past 设置和并发限制时的依赖项检查
在 Dataproc Hook 中执行作业取消 HTTPRequest (#10361)
使用 rst lexer 格式化 Airflow 升级检查输出 (#11259)
从 contrib/kubernetes/pod.py 中移除弃用警告
为 CloudSqlImportOperator 添加 body 作为模板字段 (#10510)
将用户会话的日志级别更改为 DEBUG (#12414)
弃用¶
弃用从插件创建的模块导入 Hooks (#12133)
弃用通过插件添加 Operators 和 Sensors (#12069)
仅文档更改¶
[文档] 更正宏 task_instance_key_str 的描述 (#11062)
检查 setup.py 中的所有库是否都列在 installation.rst 文件中 (#12023)
修订“项目重点”副本 (#12011)
将项目重点和原则移至 README 的更高位置 (#11973)
从 README.md 中移除已存档的链接 (#11945)
更新 Airflow 版本的下载 URL (#11800)
为 PyPI 页面添加项目 URL (#11801)
将 Backport Providers 文档移至我们的文档站点 (#11136)
重构 rebase 副本 (#11030)
为 kubernetes executor 文档添加缺失的图像 (#11083)
修复 executor_config 示例中的缩进 (#10467)
增强 Kubernetes Executor 文档 (#10433)
将内容重构为 markdown 表 (#10863)
重命名“超越视野”部分并重构内容 (#10802)
将官方来源部分重构为使用项目符号 (#10801)
添加官方源代码部分 (#10678)
向 Airflow 商品添加 redbubble 链接 (#10359)
README 文档:链接到 ASF 目录中的 Airflow 目录 (#11137)
修复 VaultBackend 的 config_path 的默认值 (#12518)
Airflow 1.10.12 (2020-08-25)¶
重大更改¶
清除 SkipMixin 跳过的任务将跳过它们¶
以前,当清除 SkipMixin(例如 BranchPythonOperator、BaseBranchOperator 和 ShortCircuitOperator)跳过的任务时,它们会执行。从 1.10.12 开始,当清除此类跳过的任务时,它们将再次被新引入的 NotPreviouslySkippedDep 跳过。
pod_mutation_hook 函数现在将接受一个 kubernetes V1Pod 对象¶
从 airflow 1.10.12 开始,在 pod_mutation_hook
中使用 airflow.contrib.kubernetes.Pod
类已被弃用。相反,我们建议用户将 pod
参数视为 kubernetes.client.models.V1Pod
对象。这意味着用户现在可以在修改 airflow pod 时访问完整的 Kubernetes API
pod_template_file 选项现在在 KubernetesPodOperator 中可用¶
用户现在可以使用 pod_template_file
参数为 KubernetesPodOperator 提供一个 yaml 路径。
新特性¶
添加 DateTimeSensor (#9697)
向 Airflow 本地设置添加 AirflowClusterPolicyViolation 支持 (#10282)
从 Secret Backends 获取包含敏感数据的 Airflow 配置 (#9645)
[AIRFLOW-4734] PostgresHook.insert_rows() 的 Upsert 功能 (#8625)
允许定义自定义 XCom 类 (#8560)
Bug 修复¶
使用弃用警告添加 pre 1.10.11 Kubernetes 路径 (#10067)
修复 PodMutationHook 的向后兼容性 (#9903)
修复定义资源时 executor_config 中的错误 (#9935)
在运行 sync_perm 时遵守 DAG 序列化设置 (#10321)
在图表视图中为正在运行的任务显示正确的持续时间 (#8311) (#8675)
修复 SQLThresholdCheckOperator 中的回归 (#9312)
[AIRFLOW-6931] 修复了查找 MSSQL 所有依赖项的迁移 (#9891)
避免与 RenderedTaskInstanceFields 的写入和删除共享会话 (#9993)
修复使用 ExternalTaskMarker 时清除未来递归的问题 (#9515)
处理创建 TIs 时的 IntegrityError (#10136)
修复使用 Kerberos Auth 时 airflow-webserver 启动错误的问题 (#10047)
修复调度程序中处理开放槽位的问题 (#9316) (#9505)
修复 KubernetesPodOperator 的重新附加 (#10230)
修复更多 PodMutationHook 的向后兼容性问题 (#10084)
[AIRFLOW-5391] 清除时不要重新运行跳过的任务 (#7276)
修复 task_instance_mutation_hook (#9910)
修复 DAG 文件中 docstring 包含 {} 时格式化失败的问题 (#9779)
修复 is_terminal_support_colors 函数 (#9734)
修复使用
provide_context=True
时的 PythonVirtualenvOperator (#8256)修复从 secrets 挂载卷的问题 (#10366)
BugFix:默认情况下,K8s Executor 多命名空间模式被评估为 true (#10410)
使 KubernetesExecutor 能够识别 kubernetes_labels (#10412)
修复损坏的 Kubernetes PodRuntimeInfoEnv (#10478)
改进¶
使用序列化 DAG 的哈希值来确定 DAG 是否已更改 (#10227)
在 DAG 更新时更新 Webserver 中的序列化 DAG (#9851)
如果 DAG 未更改,则不在 DB 中更新序列化 DAG (#9850)
向 SerializedDagModel 添加 __repr__ (#9862)
将 JS 包更新到最新版本 (#9811) (#9921)
UI 图表视图:鼠标悬停时聚焦上游/下游任务依赖项 (#9303)
允许
KubernetesPodOperator
中的image
被模板化 (#10068)[AIRFLOW-6843] 向 delete_namespaced_pod 添加 delete_option_kwargs (#7523)
改进 scheduler_job 中的进程终止 (#8064)
替换 bigquery_check_operator 中使用的已弃用基类 (#10272)
[AIRFLOW-5897] 允许在 Webserver 中将 -1 设置为池槽位值 (#6550)
将所有 google-cloud API 限制为 <2.0.0 (#10317)
[AIRFLOW-6706] 延迟加载操作符额外链接 (#7327) (#10318)
为 SQL 操作符和传感器添加 Snowflake 支持 (#9843)
使多命名空间模式成为可选 (#9570)
固定 pyarrow < 1.0
将 pymongo 版本固定为 <3.11.0
将 google-cloud-container 固定为 <2 (#9901)
Dockerfile:从 prod 镜像中删除 package.json 和 yarn.lock (#9814)
Dockerfile:嵌入式 DAG 的组应为 root,以便与 OpenShift 兼容 (#9794)
更新 flask-swagger、gunicorn 和 jinja2 的上限 (#9684)
Webserver:清理传递给 origin 参数的值 (#10334)
按字母顺序对添加/编辑页面中的连接类型列表进行排序 (#8692)
仅文档更改¶
将新提交者:Ry Walker 和 Leah Cole 添加到 project.rst (#9892)
将 Qingping Hou 添加到提交者列表 (#9725)
更新了指向官方文档的链接 (#9629)
为 Airflow Slack 邀请创建一个短链接 (#10034)
在 docs/howto/email-config.rst 中的代码块上设置语言 (#10238)
从 1.10.10 CHANGELOG 中删除重复行 (#10289)
改进“电子邮件配置”页面的标题 (#10175)
修复 docs/tutorial.rst 中 Jinja 项目的链接 (#10245)
为 Cron 预设创建单独的部分 (#10247)
向 docs/best-practices.rst 中的代码块添加语法高亮 (#10258)
修复 BigQueryGetDataOperator 中的 docstring (#10042)
修复“任务生命周期”部分中的错别字 (#9867)
使“秘密后端”文档更清楚地说明变量和连接视图 (#8913)
Airflow 1.10.11 (2020-07-10)¶
重大更改¶
使用 NULL 作为 dag.description 的默认值¶
现在在 dag 表中使用 NULL 作为 dag.description 的默认值
限制在旧 UI(基于 Flask-admin 的 UI)中编辑 DagRun 状态¶
- 在 1.10.11 之前,可以在
/admin/dagrun/
页面中编辑 DagRun 状态 为任意文本。
在 Airflow 1.10.11+ 中,用户只能从列表中选择状态。
实验性 API 默认将拒绝所有请求。¶
之前的默认设置是允许所有 API 请求无需身份验证,但这会对忽略此事实的用户造成安全风险。此更改将新安装的默认值更改为默认拒绝所有请求。
注意:这不会更改现有安装的行为,请更新检查您的 airflow.cfg
如果您希望实验性 API 工作,并且意识到在没有身份验证的情况下启用此功能的风险(或者如果您在 Airflow 前面有自己的身份验证层),您可以通过在 airflow.cfg 中设置此项来在新安装上获得之前的行为
[api]
auth_backend = airflow.api.auth.backend.default
XCom 值不再能从 Webserver 添加或更改¶
由于 XCom 值可以包含 pickle 数据,我们将不再允许从 UI 添加或更改 XCom 值。
配置的 run_as_user
的默认值已从 0 更改为 50000¶
使用时,Worker POD 的第一个进程运行的 UID 已从之前的默认值 0
更改为 50000
。之前的默认值为空字符串,但如果为空字符串,则代码使用 0
。
之前:
[kubernetes]
run_as_user =
之后:
[kubernetes]
run_as_user = 50000
这样做是为了避免以 root
用户身份运行容器。
新功能¶
添加任务实例变更钩子 (#8852)
允许更改任务状态颜色 (#9520)
添加 AWS Secrets Manager 作为 Secrets Backend 的支持 (#8186)
将 Airflow info 命令添加到 CLI (#8704)
添加本地文件系统秘密后端 (#8596)
添加 Airflow config CLI 命令 (#8694)
添加对 Python 3.8 的支持 (#8836)(#8823)
允许从 JSON/YAML 文件配置 K8S 工作程序 Pod (#6230)
将季度添加到 crontab 预设 (#6873)
添加对 KubernetesPodOperator 上临时存储的支持 (#6337)
添加 AirflowFailException 以在不重试的情况下失败 (#7133)
添加 SQL 分支操作符 (#8942)
错误修复¶
使用 NULL 作为 dag.description 默认值 (#7593)
BugFix:通过 RBAC UI 中的 UI 触发 DAG 错误 (#8411)
修复运行任务时的日志记录问题 (#9363)
修复 DockerOperator 中的 JSON 编码错误 (#8287)
修复由于类型导入导致的 alembic 崩溃 (#6547)
在反序列化操作符时正确恢复 upstream_task_ids (#8775)
正确存储序列化任务/DAG 中的非默认 Nones (#8772)
正确反序列化 DAG 中的 dagrun_timeout 字段 (#8735)
修复配置包含 ” 时的树视图 (#9250)
修复时区无法保存的 Dag Run UI 执行日期的问题 (#8902)
修复 MSSQL 的迁移 (#8385)
RBAC ui:修复图中缺少单位的 Y 轴标签 (#8252)
RBAC ui:修复缺失的任务运行被渲染为圆形的问题 (#8253)
修复:DagRuns 页面在旧 UI 中使用工件渲染状态列 (#9612)
修复主页上的任务和 DAG 统计信息 (#8865)
修复嵌套子 DAG 情况下的 trigger_dag api (#8081)
UX 修复:防止在 Chrome 中选择 DAG 标题时出现不必要的文本选择 (#8912)
修复 spark 的连接添加/编辑 (#8685)
修复由于 DAG 序列化导致 MySQL 上出现约束冲突的重试 (#9336)
[AIRFLOW-4472] 将 json.dumps/loads 用于模板化 lineage 数据 (#5253)
将 google-cloud-texttospeech 限制为 <v2 (#9137)
修复生成进程时 pickle 失败的问题 (#8671)
将 azure-cosmos 的版本固定为 <4 (#8956)
Azure 存储 0.37.0 不再可安装 (#8833)
修复 UI 中的 modal_backdrop z-index (#7313)
修复甘特图视图中的额外链接 (#8308)
修复 EmrAddStepOperator 使用 cluster_name 错误初始化的错误 (#9235)
修复 KubernetesPodOperator pod 名称长度验证 (#8829)
通过检查上次修改时间来修复未更新的 DAG 代码 (#8266)
BugFix:取消暂停 catchup=False 的 DAG 会创建一个额外的 DAG 运行 (#8776)
改进¶
改进 add_dag_code_table 迁移 (#8176)
持久显示/过滤 DAG 状态 (#8106)
设置唯一的记录器名称 (#7330)
将 cattrs 的版本从 0.9 更新到 1.0 以支持 Python 3.8 (#7100)
减少 /dag_stats 和 /task_stats 的响应有效负载大小 (#8655)
将身份验证器参数添加到 snowflake_hook (#8642)
在 Airflow Webserver 中显示“任务重新计划”表 (#9521)
将 worker_refresh_interval 回退更改为默认值 30 (#9588)
使用 pformat 而不是 str 在 WebUI 中渲染参数 (#9587)
简化 DagFileProcessorManager (#7521)
在插件更改时重新加载 gunicorn (#8997)
修复 store_dag_code 的默认值 (#9554)
添加从正在运行的 Pod 获取日志的支持 (#8626)
持久保存 DummyOperator 任务实例的开始/结束日期和持续时间 (#8663)
确保如果作业未启动,则不在工具提示中显示“已启动”/“已结束” (#8667)
将上下文添加到 ExternalTaskSensor 中的 execution_date_fn (#8702)
避免在
/dag_stats
和/task_stats
的响应中显示颜色信息 (#8742)使从入口点加载插件具有容错性 (#8732)
重构 Kubernetes 工作程序配置 (#7114)
将默认
conf
参数添加到 Spark JDBC Hook (#8787)允许将 backend_kwargs 传递给 AWS SSM 客户端 (#8802)
通过单击标签过滤 DAG (#8897)
支持 Vault Secrets 提供程序中的 k8s 身份验证方法 (#8640)
通过标签而不是名称监视 Pod (#6377)
优化 /home 上的计数查询 (#8729)
修复树视图中的 JSON 字符串转义 (#8551)
将 TaskInstance 状态添加到 TI 工具提示,以便对色盲更友好 (#8910)
在触发 DAG 屏幕上添加提示 (#9049)
将 Markup 用于 landing_times 的 htmlcontent (#9242)
将最大 pandas 版本固定为 2.0(小于),以允许 pandas 1.0 (#7954)
更新示例 webserver_config.py 以显示正确的 CSRF 配置 (#8944)
修复“基本作业”表中显示的执行程序类名称 (#8679)
将现有 DagBag 用于 'dag_details' 和 'trigger' 端点 (#8501)
在退出之前刷新挂起的 Sentry 异常 (#7232)
在列表视图中显示 DAG 运行配置 (#6794)
修复更新 dagrun 状态时的性能下降问题 (#8435)
不要在代码中使用
|safe
过滤器,这很冒险 (#9180)验证是否只有任务命令由执行程序运行 (#9178)
在重复的任务 ID 上显示弃用警告 (#8728)
将 DAG._schedule_interval 逻辑移出
DAG.__init__
(#8225)使检索暂停的 Dag id 成为单独的方法 (#7587)
批量获取 paused_dag_ids (#7476)
为 Kubernetes 添加可配置的 DAG 卷挂载路径 (#8147)
为 KubernetesPodOperator 添加 schedulername 选项 (#6088)
支持以 root 身份运行 git sync 容器 (#6312)
为 Slack Webhook 操作符和 Slack Hook 添加额外的选项 (#9409)
Monkey patch greenlet Celery 池 (#8559)
从 SystemsManagerParameterStoreBackend 解密秘密 (#9214)
在 TI 视图中,防止在不可排序的列上进行点击排序 (#8681)
使 hive 宏与 py3 兼容 (#8598)
修复带有自定义脚本的 SVG 工具提示定位问题 (#8269)
避免不必要的睡眠以保持本地任务作业心跳 (#6553)
在用户和查看者角色中包含一些缺失的 RBAC 角色 (#9133)
在树视图上显示 DAG 的 Markdown 文档 (#9448)
提高与 Python 3.5+ 的兼容性 - 将 signal.SIGTERM 转换为 int (#9207)
在 DataprocSubmitPySparkJobOperator 中为 template_fields 添加 ‘main’ 参数 (#9154)
使 Airflow 可以静默警告 (#9208)
删除 BaseOperator.clear() 中的冗余计数查询 (#9362)
修复数据库迁移消息 (#8988)
修复 dbapi_hook 中令人尴尬的日志信息 (#8482)
修复 Celery 默认不再允许 pickle 的问题 (#7205)
进一步验证只有任务命令由执行器运行 (#9240)
删除 vendored nvd3 和 slugify 库 (#9136)
启用可配置的 git 同步深度 (#9094)
减少 Kubernetes sidecar 所需的资源 (#6062)
使用 k8s API 模型重构 K8S 代码库 (#5481)
将 k8s 执行器从 contrib 移出,以更接近 master (#8904)
允许在“日志”视图中使用“event”和“owner”进行过滤 (#4881)
将 Yandex.Cloud 自定义连接添加到 1.10 (#8791)
为 DAG 表添加 table-hover css 类 (#5033)
在 DAG 视图中显示取消/暂停错误。 (#7669)
重组 /home 上的数据库查询 (#4872)
添加跨站点脚本防御 (#6913)
使甘特图工具提示与树视图和图形视图相同 (#8220)
添加配置以仅在任务失败时删除 worker pod (#7507)(#8312)
删除图表连接失败时的重复错误消息 (#8476)
删除默认值 spark_binary (#8508)
在生产 Docker 镜像中公开 Airflow Web 服务器端口 (#8228)
在每次 alembic 迁移后提交 (#4797)
KubernetesPodOperator 修复和测试 (#6524)
Docker 镜像:添加 ADDITIONAL_AIRFLOW_EXTRAS (#9032)
Docker 镜像:添加 ADDITIONAL_PYTHON_DEPS (#9031)
从 Google requirements 中删除 httplib2 (#9194)
合并多个 SQL 运算符 (#9124)
在 pyhive 依赖项中添加 hive 作为额外项 (#9075)
将实验性后端的默认身份验证更改为 deny_all (#9611)
限制从 Web 服务器更改 XCom 值 (#9614)
为 DagTag 添加 __repr__,以便标签在 /dagmodel/show 中正确显示 (#8719)
由 HiveMetastoreHook 使用的混洗 HMS 连接的功能,有助于负载均衡 (#9280)
公开 SQLAlchemy 的 connect_args 并使其可配置 (#6478)
仅限文档的更改¶
添加关于使用 DAGRun.conf 的文档 (#9578)
在文档中强制执行代码块指令 (#9443)
在构建文档时仔细解析警告消息 (#8693)
使 KubernetesPodOperator 在文档中清晰明了 (#8444)
改进 Pod Mutation Hook 文档中的语言 (#8445)
修复 concepts.rst 中 Pool 文档的格式 (#8443)
使关于使用环境变量的 Airflow 变量的文档更清晰 (#8427)
修复 LocalExecutor 的池文档 (#7643)
将 Local 和 Sequential 执行器添加到文档 (#8084)
添加关于 CLI 命令 Airflow dags test 的文档 (#8251)
修复 DAG 序列化文档中的错别字 (#8317)
在生产部分添加调度器 (#7351)
添加结构化的 DAG 验证示例 (#6727)
添加任务重新运行文档 (#6295)
修复 settings.policy 上过时的文档 (#7532)
添加关于 reload_on_plugin_change 选项的文档 (#9575)
在 Airflow 文档中的代码块中添加复制按钮 (#9450)
更新 v1.10+ 的文档中的命令 (#9585)
添加关于 dry-run CLI 选项的更多信息 (#9582)
记录 SSHOperator 的默认超时值 (#8744)
修复关于创建 CustomOperator 的文档 (#8678)
增强关于集群策略的文档 (#8661)
在 concepts.rst 中使用 sphinx 语法 (#7729)
更新 README 以删除 Master 的 Python 3.8 限制 (#9451)
添加关于在 BashOperator 中使用 dag_run.conf 的注释 (#9143)
改进教程 - 包括所有导入语句 (#8670)
在 README.md 中添加更精确的 Python 要求 (#8455)
修复 README.md 中 Airflow 稳定版本 (#9360)
更新 AWS 连接示例以展示如何从 env var 设置 (#9191)
修复插件文档的列表格式。 (#8873)
在 Secrets Backend 文档中添加 “已添加的版本” (#8264)
简化关于自定义 secrets 后端的语言 (#8257)
添加可重复 PyPi 安装的安装说明 (#8513)
添加注释,说明额外链接仅在使用 RBAC web 服务器时呈现 (#8788)
从文档中删除未使用的 Airflow 导入 (#9274)
在贡献工作流示例中添加 PR/issue 注释 (#9177)
使用包容性语言 - 语言很重要 (#9174)
添加关于更改 Web 服务器颜色的文档 (#9607)
在 installation.rst 中将“initiate”更改为“initialize” (#9619)
用新的变量视图屏幕截图替换旧的 (#9620)
用新的 SubDag 缩放屏幕截图替换旧的 (#9621)
更新关于实验性 API 的默认身份验证更改的文档 (#9617)
Airflow 1.10.10 (2020-04-09)¶
重大更改¶
将空字符串设置为 Airflow 变量将返回空字符串¶
以前,当你使用空字符串 (''
) 设置 Airflow 变量时,你过去获得的值是 None
。现在将返回一个空字符串 ('''
)
示例
Variable.set("test_key", "")
Variable.get("test_key")
上面的代码之前返回 None
,现在它将返回 ''
。
使 none_failed
触发规则的行为与文档一致¶
none_failed
触发规则的行为被记录为“所有父节点均未失败(failed
或upstream_failed
),即所有父节点都已成功或被跳过。”正如先前实现的那样,如果任务的所有父节点也被跳过,则实际行为将跳过。
添加新的触发规则 none_failed_or_skipped
¶
- 对
none_failed
触发规则的修复会破坏依赖于先前行为的工作流。 如果你需要旧的行为,则应将具有
none_failed
触发规则的任务更改为none_failed_or_skipped
。
当从 UI 中将任务标记为成功时,将调用成功回调¶
当用户从 Airflow UI 将任务标记为成功时 - 将调用 on_success_callback
新功能¶
[AIRFLOW-7048] 允许用户选择在 UI 中使用的时区 (#8046)
添加生产 Docker 镜像支持 (#7832)
从环境变量获取 Airflow 变量 (#7923)
从 Hashicorp Vault 获取 Airflow 变量 (#7944)
从 AWS Systems Manager Parameter Store 获取 Airflow 变量 (#7945)
从 GCP Secrets Manager 获取 Airflow 变量 (#7946)
[AIRFLOW-5705] 添加 secrets 后端并支持 AWS SSM / 从 AWS Parameter Store 获取 Airflow 连接 (#6376)
[AIRFLOW-7104] 为 GCP Secrets Manager 添加 Secret 后端 / 从 GCP Secrets Manager 获取 Airflow 连接 (#7795)
[AIRFLOW-7076] 添加对 HashiCorp Vault 作为 Secrets 后端的支持 / 从 Hashicorp Vault 获取 Airflow 连接 (#7741)
[AIRFLOW-6685] 添加 ThresholdCheckOperator (#7353)
[AIRFLOW-7080] 添加 API 端点以返回 DAG 的暂停状态 (#7737)
错误修复¶
BugFix:在图形视图工具提示中显示 task_id (#7859)
[AIRFLOW-6730] 使用 total_seconds 而不是 seconds (#7363)
[AIRFLOW-6167] 在 hive 中创建表时转义列名 (#6741)
[AIRFLOW-6628] DAG 自动完成现在会从所有可访问的 DAG 中建议 (#7251)
[AIRFLOW-7113] 修复甘特图渲染错误 (#7913)
[AIRFLOW-6399] 添加 _access 控制以验证反序列化的 DAG (#7896)
[AIRFLOW-6399] 序列化:DAG access_control 字段应为 DAG 序列化中的修饰字段 (#7879)
[AIRFLOW-4453] 使
none_failed
的行为与文档一致 (#7464)[AIRFLOW-4363] 修复 JSON 编码错误 (#7628)
[AIRFLOW-6683] 在 DAG 序列化时运行 REST API 测试 (#7352)
[AIRFLOW-6704] 从任务复制通用 TaskInstance 属性 (#7324)
[AIRFLOW-6734] 使用配置的 base_template 而不是硬编码 (#7367)
[AIRFLOW-7098] 简单的 salesforce 版本 1.0.0 破坏了构建 (#7775)
[AIRFLOW-6062] 执行器仅在其自己的命名空间中删除 worker (#7123)
[AIRFLOW-7074] 添加查看 SubDAG 的权限 (#7752)
[AIRFLOW-7025] 修复 SparkSqlHook.run_query 以正确处理其参数 (#7677)
[AIRFLOW-6855] 在 gcs 到 bq 运算符中转义 SQL 查询中的 project_dataset_table (#7475)
[AIRFLOW-6949] 尊重 SparkSubmitOperator 的显式 conf (#7575)
[AIRFLOW-6588] write_stdout 和 json_format 是布尔值 (#7199)
[AIRFLOW-3439] 使用“utf-8”解码日志 (#4474)
[AIRFLOW-6878] 修复 kube_client_request_args 的错误配置的默认值
[AIRFLOW-5167] 更新 GCP 软件包的依赖项 (#7116)
[AIRFLOW-6821] 当从 UI 将任务标记为成功时,不调用成功回调 (#7447)
[AIRFLOW-6740] 删除未记录,已弃用,功能失调的 PROXY_FIX_NUM_PROXIES (#7359)
[AIRFLOW-6728] 将各种 DAG 信息方法更改为 POST (#7364)
[AIRFLOW-6997] 确保 worker pod initcontainers 从配置中获取 env var (#7663)
[AIRFLOW-7062] 修复 pydruid 版本破坏构建的问题 (#7720)
[AIRFLOW-6040] KubernetesExecutor 中的 ReadTimoutError 不应引发异常 (#7616)
[AIRFLOW-6943] 修复 Python 2 中 DAG 中 utf-8 编码的描述 (#7567)
[AIRFLOW-6892] 修复损坏的非 wheel 版本 (#7514)
[AIRFLOW-6789] BugFix:修复默认 worker 并发 (#7494)
[AIRFLOW-6840] 提升 future 的版本 (#7471)
[AIRFLOW-5705] 修复 AWS SSM Secrets 后端中的错误 (#7745)
[AIRFLOW-5705] 修复 Secrets 后端中的错误 (#7742)
修复 CloudSecretsManagerBackend 无效的 connections_prefix (#7861)
[AIRFLOW-7045] BugFix:DebugExecutor 无法更改任务状态。 (#8073)
BugFix:Datetimepicker 卡在 UI 上 (#8092)
[AIRFLOW-5277] 甘特图尊重每用户的时区 UI 设置 (#8096)
修复任务实例工具提示中显示的时区 (#8103)
BugFix:修复序列化 DAG 的写入和删除 Dag 代码 (#8151)
使默认的 TI 池槽为“1” (#8153)
修复安全屏幕中的 500 错误 (#8165)
修复无状态 Web 服务器的查看 Dag 代码 (#8159)
修复 sqlalchemy 1.3.16 的问题 (#8230)
改进¶
对 TaskInstance 使用与图形和树视图相同的工具提示 (#8043)
允许 Web 服务器中的 DateTimePicker 实际选择时间 (#8034)
[AIRFLOW-5590] 将 run_id 添加到触发 DAG 运行 API 响应 (#6256)
[AIRFLOW-6695] 现在可以通过 UI 触发 DAG 时传递 dagrun conf (#7312)
[AIRFLOW-5336] 添加在 Web 服务器中更新 FAB 权限的可选能力 (#5940)
[AIRFLOW-1467] 允许任务使用多个池槽 (#7160)
[AIRFLOW-6987] 避免创建默认连接 (#7629)
[AIRFLOW-4175] S3Hook load_file 应支持 ACL 策略参数 (#7733)
[AIRFLOW-4438] 向 S3_hook 添加 Gzip 压缩 (#7680)
允许将 Airflow 变量值设置为空字符串 (#8021)
不要调度虚拟任务 (#7880)
防止顺序扫描任务实例表 (#8014)
[AIRFLOW-7017] 在触发 dag 原点中尊重默认 dag 视图 (#7667)
[AIRFLOW-6837] 限制主页上 DAG 的描述长度 (#7457)
[AIRFLOW-6989] 显示呈现的 template_fields,无需访问 Dag 文件 (#7633)
[AIRFLOW-5944] 在不访问 DAG 文件的情况下渲染 templated_fields (#6788)
[AIRFLOW-5946] DAG 序列化:将源代码存储在数据库中 (#7217)
[AIRFLOW-7079] 删除存储 template_fields 的冗余代码 (#7750)
[AIRFLOW-7024] 为 SparkSqlOperator 添加 verbose 参数支持 (#7676)
[AIRFLOW-6733] 扩展而不是替换模板 (#7366)
[AIRFLOW-7001] 进一步修复 MySQL 5.7 UtcDateTime 问题 (#7655)
[AIRFLOW-6014] 处理被 Kubernetes 抢占并删除但未重启的 Pod (#6606)
[AIRFLOW-6950] 从 ti.refresh_from_db 中删除 refresh_executor_config (#7577)
[AIRFLOW-7016] 在 UI 中对 DAG 标签进行排序 (#7661)
[AIRFLOW-6762] 修复指向 “建议在此页面上进行更改” 的链接 (#7387)
[AIRFLOW-6948] 从 version 命令中删除 ASCII Airflow 图案 (#7572)
[AIRFLOW-6767] 更正默认 Athena 工作组的名称 (#7394)
[AIRFLOW-6905] 使用新的风车更新 pin.svg (#7524)
[AIRFLOW-6801] 使用 ImportError.timestamp (#7425)
[AIRFLOW-6830] 向 SNS hook 和 operator 添加 Subject/MessageAttributes (#7451)
[AIRFLOW-6630] 解决 handlebars 安全公告 (#7284)
[AIRFLOW-6945] MySQL 5.7 在 v1-10-test 中用作选项
[AIRFLOW-6871] 优化大型 DAG 的树状视图 (#7492)
[AIRFLOW-7063] 修复 dag.clear() 因计数导致的缓慢问题 (#7723)
[AIRFLOW-7023] 删除 setup.py 中重复的软件包定义 (#7675)
[AIRFLOW-7001] 从 MySQL TIMESTAMP 字段插入中删除时区
[AIRFLOW-7105] 统一 Secrets Backend 方法接口 (#7830)
使 BaseSecretsBackend.build_path 通用化 (#7948)
允许使用 ‘hashicorp’ extra 安装 hvac 包 (#7915)
标准化 SecretBackend 类名称 (#7846)
[AIRFLOW-5705] 使 AwsSsmSecretsBackend 与 VaultBackend 保持一致 (#7753)
[AIRFLOW-7045] 更新 SQL 查询以删除 RenderedTaskInstanceFields (#8051)
更好地处理任务实例工具提示中的 DST (#8104)
杂项/内部¶
修复 Flaky TriggerDAG UI 测试 (#8022)
删除 CI 中不必要的消息 (#7951)
修复 CI 中过高的并行性 (#7947)
安装的版本在 breeze 中不是持久的 (#7914)
修复了镜像重建的自动检查 (#7912)
将 Dockerfile 移动到 Dockerfile.ci (#7829)
现在生成的 requirements 是排序的 (#8040)
更改公共环境初始化函数的名称 (#7805)
Requirements 现在取决于 Python 版本 (#7841)
恢复在 CI 入口显式调用的 reset db (#7798)
修复 Airflow 1.10 的不干净安装 (#7796)
[AIRFLOW-7029] 使用单独的 Docker 镜像运行许可证检查 (#7678)
[AIRFLOW-5842] 切换到 Debian buster 镜像作为基础 (#7647)
[AIRFLOW-5828] 将构建逻辑从 hooks/build 中移出 (#7618)
[AIRFLOW-6839] 进一步提高 mypy 速度 (#7460)
[AIRFLOW-6820] 将 breeze 分割成函数 (#7433)
[AIRFLOW-7097] 在 CI 镜像中安装 gcloud beta 组件 (#7772)
[AIRFLOW-7018] 修复 travis 的作业名称转义问题 (#7668)
[AIRFLOW-7054] Breeze 现在有一个在入口重置数据库的选项 (#7710)
[AIRFLOW-7005] 向 Breeze 添加 exec 命令 (#7649)
[AIRFLOW-7015] 在 Dockerhub 上构建时检测 Dockerhub 仓库/用户 (#7673)
[AIRFLOW-6727] 修复发布管理脚本中的小错误 (#7355)
[AIRFLOW-7013] 自动检查是否需要拉取 Breeze 镜像 (#7656)
[AIRFLOW-7010] 跳过 Dockerhub 构建的容器内检查 (#7652)
[AIRFLOW-7011] 将 JPype 版本固定为允许构建 1.10 镜像
[AIRFLOW-7006] 修复 Breeze 脚本中缺少 +e 的问题 (#7648)
[AIRFLOW-6979] 修复 breeze test-target 特定测试参数问题 (#7614)
[AIRFLOW-6932] 向 Breeze 添加 restart-environment 命令
[AIRFLOW-6919] 使 Breeze DAG 测试友好 (#7539)
[AIRFLOW-6838] 为 Breeze 引入真正的子命令 (#7515)
[AIRFLOW-6763] 使系统测试为回溯测试做好准备 (#7389)
[AIRFLOW-6866] 修复 Mac 上 Breeze 的错误导出 (#7485)
[AIRFLOW-6842] 跳过修复 Mac 上的所有权问题 (#7469)
[AIRFLOW-6841] 修复 Mac 上的无界变量问题 (#7465)
[AIRFLOW-7067] 固定 Apache Airflow 的版本 (#7730)
[AIRFLOW-7058] 添加对不同数据库版本的支持 (#7717)
[AIRFLOW-7002] 在 bash 中摆脱 yaml “解析器” (#7646)
[AIRFLOW-6972] 在 Breeze 中缩短常用命令 (#7608)
仅文档更改¶
修复 store_serialized_dags 配置的拼写错误 (#7952)
修复 README.md 中的断开链接 (#7893)
用逗号分隔支持的 Postgres 版本 (#7892)
修复 setup.py 中的语法错误 (#7877)
将 Jiajie Zhong 添加到提交者列表 (#8047)
更新 1.10.* 的安全文档以获取身份验证后端 (#8072)
修复 Secrets Backend 的 config_templates 中的示例 (#8074)
在 IMAGES.rst 命令描述中添加反引号 (#8075)
更改 store_dag_code 配置的 version_added (#8076)
[AIRFLOW-XXXX] 删除重复的文档
[AIRFLOW-XXXX] 删除 Dag 序列化的已失效限制 (#7716)
[AIRFLOW-XXXX] 为所有 GCP 运算符指南添加先决条件任务 (#6049)
[AIRFLOW-XXXX] 简化 AWS/Azure/Databricks 运算符列表 (#6047)
[AIRFLOW-XXXX] 为所有 GCP 运算符指南添加外部引用 (#6048)
[AIRFLOW-XXXX] 简化 GCP 运算符列表
[AIRFLOW-XXXX] 简化 Qubole 运算符列表
[AIRFLOW-XXXX] 添加自动生成的 TOC (#6038)
[AIRFLOW-XXXX] 创建 “使用 CLI” 页面 (#5823)
[AIRFLOW-XXXX] 将引用分组到一个部分 (#5776)
[AIRFLOW-XXXX] 修复分析文档 (#5885)
[AIRFLOW-XXXX] 添加 S3 日志记录部分 (#6039)
[AIRFLOW-XXXX] 将 Azure 日志记录部分移动到运算符上方 (#6040)
[AIRFLOW-XXXX] 将临时链接更新为固定链接 (#7715)
[AIRFLOW-XXXX] 为 1.10.9 添加 Updating.md 部分 (#7385)
[AIRFLOW-XXXX] 删除 BaseOperator 文档字符串中的重复内容 (#7321)
[AIRFLOW-XXXX] 更新 CONTRIBUTING.rst 中的测试信息 (#7466)
[AIRFLOW-XXXX] 小 BREEZE.rst 更新 (#7487)
[AIRFLOW-XXXX] 添加用于记录到 localstack S3 的说明 (#7461)
[AIRFLOW-XXXX] 删除 travis 配置警告 (#7467)
[AIRFLOW-XXXX] 向贡献添加通信章节 (#7204)
[AIRFLOW-XXXX] 添加已知问题 - example_dags/__init__.py (#7444)
[AIRFLOW-XXXX] 修复 breeze build-docs (#7445)
[AIRFLOW-XXXX] 减少 Docker 构建的冗长程度
[AIRFLOW-XXXX] 加快 mypy 运行速度 (#7421)
[AIRFLOW-XXXX] 修复 kubernetes 测试的位置 (#7373)
[AIRFLOW-XXXX] 从 Google Oauth 中的域中删除引号 (#4226)
[AIRFLOW-XXXX] 为与代码相关的 PR 添加有关 JIRA 的显式信息 (#7318)
[AIRFLOW-XXXX] 修复单词 committer 中的拼写错误 (#7392)
[AIRFLOW-XXXX] 删除文档中重复的段落 (#7662)
修复对 KubernetesPodOperator 的引用 (#8100)
Airflow 1.10.9 (2020-02-07)¶
重大更改¶
没有重大更改。
错误修复¶
[AIRFLOW-6751] 将 Werkzeug(我们许多依赖项的依赖项)固定为 < 1.0.0 (#7377)
Airflow 1.10.8 (2020-02-07)¶
重大更改¶
新功能¶
[AIRFLOW-4026] 添加按 DAG 标签筛选的功能 (#6489)
[AIRFLOW-6613] 在图表视图加载时居中显示 DAG (#7238)
[AIRFLOW-5843] 向添加 DAG 运行视图添加 conf 选项 (#7281)
[AIRFLOW-4495] 允许外部触发的 DAG 为将来的执行日期运行 (#7038)
改进¶
[AIRFLOW-6438] 筛选被阻止返回的 DAG (#7019)
[AIRFLOW-6666] 解决 js-yaml 安全公告 (#7283)
[AIRFLOW-6632] 升级 dagre-d3 以解决 lodash CVE 安全公告 (#7280)
[AIRFLOW-6667] 解决 serialize-javascript 安全公告 (#7282)
[AIRFLOW-6451] dag_processing.py 中的 self._print_stat() 应该是可跳过的 (#7134)
[AIRFLOW-6495] 使用 StandardTaskRunner 运行任务时仅加载一次 DAG (#7090)
[AIRFLOW-6319] 添加对 AWS Athena 工作组的支持 (#6871)
[AIRFLOW-6677] 删除 SQLAlchmey 的弃用警告 (#7289)
[AIRFLOW-6428] 修复 Example DAGs 中 airflow.utils.dates.days_ago 的导入路径 (#7007)
[AIRFLOW-6595] 使用 TaskNotFound 异常而不是 AirflowException (#7210)
[AIRFLOW-6620] 在 worker cli 测试中模拟 celery (#7243)
[AIRFLOW-6608] 更改 Bash 和 PyOperator Env 导出的日志级别
[AIRFLOW-2279] 如果由 ExternalTaskMarker 标记,则清除跨 DAG 的任务 (#6633)
[AIRFLOW-6359] 使 Spark status_poll_interval 显式 (#6978)
[AIRFLOW-6359] spark_submit_hook.py 状态轮询间隔配置 (#6909)
[AIRFLOW-6316] 在 tutorial.rst 中使用 exampleinclude 指令 (#6868)
[AIRFLOW-6519] 使 Webserver 中的 TI 日志常量可配置 (#7113)
[AIRFLOW-6327] http_hook:接受 payload 的 json= 参数 (#6886)
[AIRFLOW-6261] flower_basic_auth 符合 _cmd (#6825)
[AIRFLOW-6238] 筛选 dag_stats 返回的 dag
[AIRFLOW-5616] 将 PrestoHook 从 pyhive 切换到 presto-python-client
[AIRFLOW-6611] 将 proxy_fix 配置添加到 default_airflow.cfg (#7236)
[AIRFLOW-6557] 为 BaseOperator 中新添加的字段添加测试 (#7162)
[AIRFLOW-6584] 固定 cassandra 驱动程序 (#7194)
[AIRFLOW-6537] 修复 RST 文件中的反引号 (#7140)
[AIRFLOW-4428] 如果 trigger_dag 中的 exec_date 早于 default_args.start_date,则报错 (#6948)
[AIRFLOW-6330] 当参数为空白或拼写错误时显示 cli 帮助 (#6883)
[AIRFLOW-4113] 取消固定 boto3 (#6884)
[AIRFLOW-6181] 添加 DebugExecutor (#6740)
[AIRFLOW-6504] 允许为 Airflow 本地设置指定 configmap (#7097)
[AIRFLOW-6436] 清理 Airflow 配置文档生成器代码 (#7036)
[AIRFLOW-6436] 在 config.yml 中添加 x_frame_enabled 配置 (#7024)
[AIRFLOW-6436] 创建和自动化有关 Airflow 配置的文档 (#7015)
[AIRFLOW-6527] 使 send_task_to_executor 超时可配置 (#7143)
[AIRFLOW-6272] 从 npm 切换到 yarnpkg 来管理前端依赖项 (#6844)
[AIRFLOW-6350] 安全性 - spark submit 运算符日志记录 + 异常应屏蔽密码
[AIRFLOW-6358] 记录失败任务的详细信息 (#6908)
[AIRFLOW-5149] 跳过 SLA 检查配置 (#6923)
[AIRFLOW-6057] 更新 PythonSensor 的 template_fields (#6656)
[AIRFLOW-4445] Mushroom cloud 错误过于冗长 (#6952)
[AIRFLOW-6394] 简化 github PR 模板 (#6955)
[AIRFLOW-5385] spark hook 在 spark 2.3/2.4 上不起作用 (#6976)
错误修复¶
[AIRFLOW-6345] 确保 ProxyFix 的参数为整数 (#6901)
[AIRFLOW-6576] 修复由已删除的带有 SLA 遗漏的任务导致的调度程序崩溃 (#7187)
[AIRFLOW-6686] 修复构建进程 ID 列表的语法错误 (#7298)
[AIRFLOW-6683] REST API 遵循 store_serialized_dag 设置 (#7296)
[AIRFLOW-6553] 将 upstream_failed 添加到 WebUI 的实例状态过滤器中 (#7159)
[AIRFLOW-6357] 如果任务 ID 包含点,则在 Graph UI 中突出显示节点 (#6904)
[AIRFLOW-3349] 在 StreamLogWriter 中使用 None 而不是 False 作为编码的值 (#7329)
[AIRFLOW-6627] 未发送包含错误 DAG 的电子邮件 (#7250)
[AIRFLOW-6637] 修复 1.10.x 中的 Airflow 测试命令
[AIRFLOW-6636] 避免在打印任务实例时出现异常
[AIRFLOW-6522] 在开始修复 S3TaskHandler 中的重复项之前清除任务日志文件 (#7120)
[AIRFLOW-5501] 使 KubernetesPodOperator 中的默认
in_cluster
值遵循配置 (#6124)[AIRFLOW-6514] 使用 RUNNING_DEPS 从 UI 检查运行 (#6367)
[AIRFLOW-6381] 从 DAG 页面删除基于 DAG ID 的样式 (#6985)
[AIRFLOW-6434] 将返回语句添加回 DockerOperator.execute (#7013)
[AIRFLOW-2516] 修复 MySQL 死锁 (#6988)
[AIRFLOW-6528] 禁用 flake8 W503 二元运算符前的换行符 (#7124)
[AIRFLOW-6517] 使 merge_dicts 函数递归 (#7111)
[AIRFLOW-5621] 当在 UI 上标记为失败时,不会触发失败回调 (#7025)
[AIRFLOW-6353] 安全性 - UI - 添加点击劫持防御 (#6995)
[AIRFLOW-6348] 安全性 - cli.py 当前正在打印带有密码的日志 (#6915)
[AIRFLOW-6323] 从默认配置中删除非 ASCII 字母 (#6878)
[AIRFLOW-6506] 修复 KubernetesPodOperator 中 do_xcom_push 默认为 True 的问题 (#7122)
[AIRFLOW-6516] BugFix: airflow.cfg 在 Volume Mounts 中不存在 (#7109)
[AIRFLOW-6427] 修复损坏的 example_qubole_operator dag (#7005)
[AIRFLOW-6385] BugFix: 当未设置 blocks 时,SlackAPIPostOperator 失败 (#7022)
[AIRFLOW-6347] BugFix: 当启用序列化时,无法获取任务日志 (#7092)
[AIRFLOW-XXXX] 修复数据库迁移 0e2a74e0fc9f 的降级 (#6859)
[AIRFLOW-6366] 修复 MS SQL Server 的迁移 (#6920)
[AIRFLOW-5406] 允许在没有 Kubernetes 的情况下使用 Spark (#6921)
[AIRFLOW-6229] 如果无法获取状态 JSON,SparkSubmitOperator 将永远轮询 (#6918)
[AIRFLOW-6352] 安全性 - UI - 添加登录超时 (#6912)
[AIRFLOW-6397] 确保在尝试杀死子进程之前,sub_process 属性存在 (#6958)
[AIRFLOW-6400] 修复 pytest 在 Windows 上无法工作的问题 (#6964)
[AIRFLOW-6418] 删除 SystemTest.skip 装饰器 (#6991)
[AIRFLOW-6425] 序列化:将缺少的 DAG 参数添加到 JSON Schema (#7002)
其他/内部¶
[AIRFLOW-6467] 使用 self.dag i/o 创建一个新的 (#7067)
[AIRFLOW-6490] 改进本地任务作业测试中的时间增量比较 (#7083)
[AIRFLOW-5814] 实现 Presto hook 测试 (#6491)
[AIRFLOW-5704] 改进用于本地测试的 Kind Kubernetes 脚本 (#6516)
[AIRFLOW-XXXX] 将 airflow-config-yaml pre-commit 移动到 pylint 之前 (#7108)
[AIRFLOW-XXXX] 提高确认消息的清晰度 (#7110)
[AIRFLOW-6662] 安装 dumb init (#7300)
[AIRFLOW-6705] 在 Breeze 初始化时减少不必要的输出消息 (#7326)
[AIRFLOW-6705] 减少不必要的集成/后端检查 (#7325)
[AIRFLOW-6662] 切换到 --init docker 标志以进行信号传播 (#7278)
[AIRFLOW-6661] 在 50 个测试失败后失败 (#7277)
[AIRFLOW-6607] 删除 Breeze 的旧本地脚本 (#7225)
[AIRFLOW-6589] BAT 测试在 bash 脚本更改时在 pre-commit 中运行 (#7203)
[AIRFLOW-6592] 文档构建已移至测试阶段 (#7208)
[AIRFLOW-6641] 更好地诊断 kubernetes 不稳定的测试 (#7261)
[AIRFLOW-6642] 使本地任务作业测试更稳定 (#7262)
[AIRFLOW-6643] 修复 Kerberos 测试的不稳定性
[AIRFLOW-6638] 从 test_serialized_db 删除中删除不稳定性测试
[AIRFLOW-6701] Rat 从稳定的备份/镜像下载 (#7323)
[AIRFLOW-6702] 将 kind 日志转储到 file.io (#7319)
[AIRFLOW-6491] 改进 Breeze 参数的处理 (#7084)
[AIRFLOW-6470] 在执行 curl 时避免管道到文件 (#7063)
[AIRFLOW-6471] 添加 pytest-instafail 插件 (#7064)
[AIRFLOW-6462] 限制 Dockerfile/Breeze 中导出的变量 (#7057)
[AIRFLOW-6465] 在 Breeze 中为 Airflow 添加 bash 自动完成功能 (#7060)
[AIRFLOW-6464] 在 Breeze 中添加云提供商 CLI 工具 (#7059)
[AIRFLOW-6461] 删除 Dockerfile 中的静默标志 (#7052)
[AIRFLOW-6459] 增加 pytest 的详细程度 (#7049)
[AIRFLOW-6370] 如果集群未启动,则跳过 Cassandra 测试 (#6926)
[AIRFLOW-6511] 删除 BATS docker 容器 (#7103)
[AIRFLOW-6475] 删除 Breeze 中卷挂载规范的重复 (#7065)
[AIRFLOW-6489] 为 Bash 单元测试添加 BATS 支持 (#7081)
[AIRFLOW-6387] 打印成功/跳过任务的详细信息 (#6956)
[AIRFLOW-6568] 将 Emacs 相关文件添加到 .gitignore (#7175)
[AIRFLOW-6575] CI 测试的熵源更改为非阻塞 (#7185)
[AIRFLOW-6496] 分隔测试中的集成 (#7091)
[AIRFLOW-6634] 在交互式 Breeze 中设置 PYTHONPATH
[AIRFLOW-6564] CI 检查失败时的附加诊断信息 (#7172)
[AIRFLOW-6383] 添加 no trailing-whitespace pre-commit 钩子 (#6941)
仅文档更改¶
[AIRFLOW-XXXX] 新文档中的一致性修复 (#7207)
[AIRFLOW-XXXX] 改进 FAQ 文档中的语法和结构 (#7291)
[AIRFLOW-XXXX] 修复 CONTRIBUTING.rst 中的电子邮件配置链接 (#7311)
[AIRFLOW-XXXX] 使用新的 BranchPythonOperator 行为更新文档 (#4682)
[AIRFLOW-XXXX] 修复 scripts/ci/ci_run_airflow_testing.sh 中的拼写错误 (#7235)
[AIRFLOW-XXXX] 显示 OSX 磁盘空间配置的屏幕截图 (#7226)
[AIRFLOW-XXXX] 将指导信息添加到贡献文档 (#7202)
[AIRFLOW-XXXX] 将 rebase 信息添加到贡献文档 (#7201)
[AIRFLOW-XXXX] 增加 CI 中静态检查的详细程度 (#7200)
[AIRFLOW-XXXX] 将分支策略添加到文档 (#7193)
[AIRFLOW-XXXX] 将电子邮件配置从概念页面移动 (#7189)
[AIRFLOW-XXXX] 更新任务生命周期图 (#7161)
[AIRFLOW-XXXX] 修复概念文档中的引用 (#7135)
[AIRFLOW-XXXX] 清除调试文档 (#7104)
[AIRFLOW-XXXX] 修复开发文档中的拼写错误和损坏的链接 (#7086)
[AIRFLOW-XXXX] 澄清 wait_for_downstream 和 execution_date (#6999)
[AIRFLOW-XXXX] 添加
airflow dags show
命令指南 (#7014)[AIRFLOW-XXXX] 更新操作链接文档 (#7018)
[AIRFLOW-XXXX] 将
.autoenv_leave.zsh
添加到 .gitignore (#6986)[AIRFLOW-XXXX] 修复开发包安装说明 (#6942)
[AIRFLOW-XXXX] 更新提交者列表 (#7212)
[AIRFLOW-XXXX] 将 UPDATING 更改移动到正确的版本 (#7166)
[AIRFLOW-XXXX] 为 check_slas 标志添加文档 (#6974)
[AIRFLOW-XXXX] 修复 gcp keyfile_dict 拼写错误 (#6962)
[AIRFLOW-XXXX] 添加在 UPDATIND.md 中编写注释的技巧 (#6960)
[AIRFLOW-XXXX] 添加警告,说明文档构建脚本需要 bash>4.0 (#6947)
[AIRFLOW-XXXX] 将 autoenv 添加到 gitignore (#6946)
[AIRFLOW-XXXX] 修复 GCSTaskHandler 注释拼写错误 (#6928)
[AIRFLOW-XXXX] 修复损坏的 DAG 序列化链接 (#6891)
[AIRFLOW-XXXX] 将 versions_added 字段添加到配置
Airflow 1.10.7 (2019-12-24)¶
重大更改¶
实验性 API execution_date 微秒替换中的更改¶
默认行为是从实验性 REST API 触发的所有 dag 运行中删除微秒(和毫秒等)。当在请求正文中显式传递 execution_date 时,默认行为将更改。现在还可以生成 execution_date,但通过在请求正文中发送 replace_microseconds=false
来保留微秒。可以通过发送 replace_microseconds=true
以及显式的 execution_date 来覆盖默认行为
无限池大小和池大小查询优化¶
现在可以将池大小设置为 -1 以表示无限大小(它还包括池查询的优化,这导致 MySQL 中任务池查询的任务 n^2 性能较差)。
查看者将无权在 DAG 视图上进行编辑。¶
Google Cloud Storage Hook¶
GoogleCloudStorageDownloadOperator
可以写入提供的 filename
,也可以通过 xcom 通过 store_to_xcom_key
返回文件的内容 - 这两个选项是互斥的。
新功能¶
[AIRFLOW-5088][AIP-24] 在数据库中持久化序列化的 DAG,以实现 Web 服务器的可伸缩性 (#5992)
[AIRFLOW-6083] 添加将自定义配置传递给 AWS Lambda 客户端的功能。(#6678)
[AIRFLOW-5117] 在需要时自动刷新 EKS API 令牌 (#5731)
[AIRFLOW-5118] 添加在 DataprocClusterCreateOperator 中指定可选组件的功能 (#5821)
[AIRFLOW-5681] 允许为 git_sync init 容器指定标签或哈希 (#6350)
[AIRFLOW-6025] 添加标签以唯一标识 Pod 的创建者 (#6621)
[AIRFLOW-4843] 允许通过 Docker Swarm (SwarmOperator) 进行编排 (#5489)
[AIRFLOW-5751] 向 Connection 添加 get_uri 方法 (#6426)
[AIRFLOW-6056] 允许 EmrAddStepsOperator 接受 job_flow_name 作为 job_flow_id 的替代 (#6655)
[AIRFLOW-2694] 在 DAG 定义中声明权限 (#4642)
[AIRFLOW-4940] 将 DynamoDB 添加到 S3 运算符 (#5663)
[AIRFLOW-4161] BigQuery 到 MySQL 运算符 (#5711)
[AIRFLOW-6041] 将用户代理添加到 Discovery API 客户端 (#6636)
[AIRFLOW-6089] 重新排序 setup.py 依赖项并添加 ci (#6681)
[AIRFLOW-5921] 向 MySqlHook 添加 bulk_load_custom (#6575)
[AIRFLOW-5854] 在 Docker 相关运算符中添加对
tty
参数的支持 (#6542)[AIRFLOW-4758] 添加 GcsToGDriveOperator 运算符 (#5822)
改进¶
[AIRFLOW-3656] 显示当前安装版本的文档链接 (#6690)
[AIRFLOW-5665] 向 SFTPHook 添加 path_exists 方法 (#6344)
[AIRFLOW-5729] 使 Sagemaker 训练配置中的 InputDataConfig 可选 (#6398)
[AIRFLOW-5045] 允许从不同的项目中创建具有自定义映像的 Google Dataproc 集群 (#5752)
[AIRFLOW-6132] 允许为 AzureContainerInstancesOperator 传入标签 (#6694)
[AIRFLOW-5945] 使内置 OperatorLinks 在使用序列化时工作 (#6715)
[AIRFLOW-5947] 使 JSON 后端可插入以进行 DAG 序列化 (#6630)
[AIRFLOW-6239] 通过 last_dagruns 过滤返回的 dag(仅选择可见的 dag,而不是所有 dag)(#6804)
[AIRFLOW-6095] 通过 task_stats 过滤返回的 dag(仅选择可见的 dag,而不是所有 dag)(#6684)
[AIRFLOW-4482] 将 execution_date 添加到“触发 DagRun”API 响应 (#5260)
[AIRFLOW-1076] 为模板变量访问器添加 get 方法 (#6793)
[AIRFLOW-5194] 向操作日志添加错误处理程序 (#5883)
[AIRFLOW-5936] 允许在 SSHOperator 中显式 get_pty (#6586)
[AIRFLOW-5474] 将基本身份验证添加到 Druid hook (#6095)
[AIRFLOW-5726] 允许在 RedshiftToS3Transfer 中使用自定义文件名 (#6396)
[AIRFLOW-5834] 使用
airflow worker
跳过 serve_logs 进程的选项 (#6709)[AIRFLOW-5583] 扩展“DAG 详细信息”页面以显示 start_date / end_date (#6235)
[AIRFLOW-6250] 确保 on_failure_callback 始终具有填充的上下文 (#6812)
[AIRFLOW-6222] http hook 为任何失败记录响应正文 (#6779)
[AIRFLOW-6260] 通过环境变量驱动 _cmd 配置选项(例如
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN_CMD
)(#6801)[AIRFLOW-6168] 允许 web 服务器的 proxy_fix 中间件可配置 (#6723)
[AIRFLOW-5931] 在适当的时候使用 os.fork 来加速任务执行。(#6627)
[AIRFLOW-4145] 允许 RBAC 角色权限,ViewMenu 可被覆盖 (#4960)
[AIRFLOW-5928] Hive hook load_file 短路 (#6582)
[AIRFLOW-5313] 为 awsbatch_operator 添加参数支持 (#5900)
[AIRFLOW-2227] 向 Variable 类添加删除方法 (#4963)
[AIRFLOW-5082] 在 AwsSnsHook 中添加主题 (#5694)
[AIRFLOW-5715] 使电子邮件、所有者上下文可用 (#6385)
[AIRFLOW-5345] 允许 SqlSensor 的 hook 由子类自定义 (#5946)
[AIRFLOW-5417] 修复 Web 服务器启动期间的数据库断开连接问题 (#6023)
[AIRFLOW-5730] 在 PinotDbApiHook 上启用 get_pandas_df (#6399)
[AIRFLOW-3235] 在 AzureDataLakeHook 中添加 list 函数 (#4070)
[AIRFLOW-5442] 为 druid broker hook 实现 get_pandas_df 方法 (#6057)
[AIRFLOW-5883] 改进几个地方的 count() 查询 (#6532)
[AIRFLOW-5811] 为外部终止的任务计数添加指标 (#6466)
[AIRFLOW-5758] 支持 PostgreSQL hook 的自定义光标类 (#6432)
[AIRFLOW-5766] 在 http_default 中使用 httpbin.org (#6438)
[AIRFLOW-5798] 设置默认 ExternalTaskSensor.external_task_id (#6431)
[AIRFLOW-5643] 减少 S3Hook 中的重复逻辑 (#6313)
[AIRFLOW-5562] 跳过为管理员角色授予单个 DAG 权限。(#6199)
[AIRFLOW-6192] 停止从 SFTPSensor.__init__ 创建 Hook (#6748)
[AIRFLOW-5749][AIRFLOW-4162] 为 Slack 运算符支持“blocks”组件 (#6418)
[AIRFLOW-5693] 支持 Slack 消息的 “blocks” 组件 (#6364)
[AIRFLOW-5714] 仅从错过 SLA 的任务收集 SLA 错过电子邮件 (#6384)
[AIRFLOW-5049] 在 bigquery hook 中添加对 src_fmt_configs 的验证 (#5671)
[AIRFLOW-6177] 将 DAG 处理器超时事件的日志级别从 info 改为 error (#6731)
[AIRFLOW-6180] 改进 pytest conftest 中的 Kerberos 初始化 (#6735)
[AIRFLOW-6159] 将心跳消息的日志级别更改为 DEBUG (#6716)
[AIRFLOW-6144] 改进 Airflow 调度程序的日志消息 (#6710)
[AIRFLOW-6045] 编译 assets 失败时报错 (#6640)
[AIRFLOW-5144] 在删除按钮点击时添加确认 (#6745)
[AIRFLOW-6099] 将主机名添加到任务运行器日志 (#6688)
[AIRFLOW-5915] 添加对新文档主题的支持 (#6563)
[AIRFLOW-5897] 允许在 Webserver 中将 -1 设置为池槽位值 (#6550)
[AIRFLOW-5888] 对 postgres 操作使用 psycopg2-binary (#6533)
[AIRFLOW-5870] 允许池大小为 -1 并优化池查询 (#6520)
错误修复¶
[AIRFLOW-XXX] 升级 Jira 版本以修复异步问题
[AIRFLOW-XXX] 添加编码以修复读取任务日志时西里尔字母输出的问题 (#6631)
[AIRFLOW-5304] 修复 BigQueryOperator 中具有多个查询的额外链接 (#5906)
[AIRFLOW-6268] 在没有 DAG 可见时,防止在主页上进行(代价高昂的)ajax 调用 (#6839)
[AIRFLOW-6259] 每次新的 DAG 搜索时将页面重置为 1 (#6828)
[AIRFLOW-6185] SQLAlchemy 连接模型 schema 与 Alembic schema 不一致 (#6754)
[AIRFLOW-3632] 仅当 trigger_dag REST API 中的 execution_date 为 None 时才替换微秒 (#6380)
[AIRFLOW-5458] 将 Flask-AppBuilder 升级到 2.2.0(适用于 Python >= 3.6)(#6607)
[AIRFLOW-5072] gcs_hook 应该只下载一次文件 (#5685)
[AIRFLOW-5744] 环境变量在 Spark 提交操作符中未正确设置 (#6796)
[AIRFLOW-3189] 如果 DbHook.get_uri 响应中 schema 为 None,则删除 schema (#6833)
[AIRFLOW-6195] 修复 UI 上 TaskInstance 属性不正确的问题 (#6758)
[AIRFLOW-5889] 使 AWS Batch 作业状态的轮询更具弹性 (#6765)
[AIRFLOW-6043] 修复 UI 中“按根过滤”以显示 DAG 部分时的错误 (#6638)
[AIRFLOW-6033] 修复在更改 task_id 时“着陆时间”的 UI 崩溃问题 (#6635)
[AIRFLOW-3745] 修复查看器无法查看 DAG 详细信息的问题 (#4569)
[AIRFLOW-6175] 修复任务卡在 “scheduled” 状态的问题 (#6732)
[AIRFLOW-5463] 在替换原子操作时使用 Variable.set (#6807)
[AIRFLOW-5582] 将 get_autocommit 添加到 JdbcHook (#6232)
[AIRFLOW-5867] 修复 webserver unit_test_mode 数据类型 (#6517)
[AIRFLOW-5819] 更新 AWSBatchOperator 的默认值 (#6473)
[AIRFLOW-5709] 修复在设置自定义操作符资源时的回归问题 (#6331)
[AIRFLOW-5658] 修复损坏的导航链接 (#6374)
[AIRFLOW-5727] SqoopHook: 仅在定义了端口/schema 时才构建 –connect 参数 (#6397)
[AIRFLOW-5695] 使用 RUNNING_DEPS 从 UI 检查运行 (#6367)
[AIRFLOW-6254] 隐藏日志中的连接额外信息 (#6817)
[AIRFLOW-4824] 为 MySqlHook 的 SqlAlchemy 引擎添加字符集处理 (#6816)
[AIRFLOW-6091] 为 BigQueryCursor 的 execute 方法添加刷新 (#6683)
[AIRFLOW-6256] 确保在重置数据库时清除 Jobs 表 (#6818)
[AIRFLOW-5224] 将 encoding 参数添加到 GoogleCloudStorageToBigQuery (#6297)
[AIRFLOW-5179] 删除顶层 __init__.py (#5818)
[AIRFLOW-5660] 尝试从 Kubernetes pod 标签在数据库中查找任务 (#6340)
[AIRFLOW-6241] 修复 airflow/gcp/operator/dataflow.py 中的拼写错误 (#6806)
[AIRFLOW-6171] 将 .airflowignore 应用于正确的子目录 (#6784)
[AIRFLOW-6018] 在回填期间在表中显示任务实例 (#6612)
[AIRFLOW-6189] 将最大测试持续时间减少到 8 分钟 (#6744)
[AIRFLOW-6141] 如果传感器模式 == poke,则删除 ReadyToRescheduleDep (#6704)
[AIRFLOW-6054] 添加启动数据库控制台的命令 (#6653)
[AIRFLOW-6047] 简化日志配置模板 (#6644)
[AIRFLOW-6017] 从 RAT 检查中排除 PULL_REQUEST_TEMPLATE.md (#6611)
[AIRFLOW-4560] 修复 mapred_queue 中的 Tez 队列参数名称 (#5315)
[AIRFLOW-2143] 修复 TaskTries 图表计数偏差 1 的问题 (#6526)
[AIRFLOW-5873] KubernetesPodOperator 的修复和测试 (#6523)
[AIRFLOW-5869] 错误修复:一些反序列化任务没有 start_date (#6519)
[AIRFLOW-4020] 从查看者角色中删除 DAG 编辑权限 (#4845)
[AIRFLOW-6263] 修复损坏的 WinRM 集成 (#6832)
[AIRFLOW-5836] 将 azure-storage-blob 版本固定为 <12 (#6486)
[AIRFLOW-4488] 修复非 RBAC UI 中 max_active_runs_per_dag 的拼写错误 (#6778)
[AIRFLOW-5942] 将 PyMSSQL 固定到 <3.0 (#6592)
[AIRFLOW-5451] SparkSubmitHook 不设置默认命名空间 (#6072)
[AIRFLOW-6271] 打印在 load_test_config 期间读取的日志文件 (#6842)
[AIRFLOW-6308] 取消固定 Python 3 的 Kombu
其他/内部¶
[AIRFLOW-6009] 关闭常规测试的 travis_wait (#6600)
[AIRFLOW-6226] 在测试中始终重置警告
[AIRFLOW-XXX] 删除序列化中的循环导入和 pylint hack (#6601)
[AIRFLOW-XXX] 将 /airflow/www 中的 npm 从 6.4.1 升级到 6.13.4 (#6815)
[AIRFLOW-XXX] 从文件中删除可执行权限
[AIRFLOW-XXX] 分组 AWS 和 Azure 依赖项(旧的
[emr]
等额外依赖项仍然有效)[AIRFLOW-5487] 修复未使用的警告变量 (#6111)
[AIRFLOW-5925] 放宽
funcsigs
和 psutil 版本要求 (#6580)[AIRFLOW-5740] 修复 Slack 测试中的瞬时故障 (#6407)
[AIRFLOW-6058] 使用 pytest 运行测试 (#6472)
[AIRFLOW-6066] 添加了对意外 debug 语句的 pre-commit 检查 (#6662)
[AIRFLOW-6060] 改进 conf_vars 上下文管理器 (#6658)
[AIRFLOW-6044] 标准化 kube_pod_operator.py 中的代码结构 (#6639)
[AIRFLOW-4940] 简化 DynamoDBToS3Operator 的测试 (#6836)
[AIRFLOW-XXX] 更新 airflow-jira 发布管理脚本 (#6772)
[AIRFLOW-XXX] 添加简单的单元测试编写指南 (#6846)
[AIRFLOW-6309] 修复 Travis 上的稳定构建
仅文档更改¶
[AIRFLOW-6211] 文档说明如何使用 conda 进行本地虚拟环境 (#6766)
[AIRFLOW-5855] 修复自定义操作符文档中损坏的引用 (#6508)
[AIRFLOW-5875] 修复 example_qubole_operator.py 中的拼写错误 (#6525)
[AIRFLOW-5702] 修复常见的文档字符串问题 (#6372)
[AIRFLOW-5640] 文档并测试 BaseOperator 的
email
参数 (#6315)[AIRFLOW-XXX] 改进 OpenFaaS Hook 的描述 (#6187)
[AIRFLOW-XXX] GSoD:如何使 DAG 准备好投入生产 (#6515)
[AIRFLOW-XXX] 在示例中使用完整命令 (#5973)
[AIRFLOW-XXX] 更新文档以准确描述远程和本地日志的优先级 (#5607)
[AIRFLOW-XXX] 修复 mysql 连接文档中的示例“extras”字段 (#5285)
[AIRFLOW-XXX] 修复文档中错误的内联代码高亮显示 (#5309)
[AIRFLOW-XXX] 将执行器分组到一个部分 (#5834)
[AIRFLOW-XXX] 将任务生命周期图添加到文档 (#6762)
[AIRFLOW-XXX] 高亮显示代码块 (#6243)
[AIRFLOW-XXX] 关于 task_concurrency 和 pool 的文档 (#5262)
[AIRFLOW-XXX] 修复不正确的文档字符串参数 (#6649)
[AIRFLOW-XXX] 添加指向 concepts.rst 中 XCom 部分的链接 (#6791)
[AIRFLOW-XXX] 使用正确的路径更新 kubernetes 文档 (#6774)
[AIRFLOW-XXX] 添加有关如何配置 pytest 运行器的信息 (#6736)
[AIRFLOW-XXX] 更多 GSOD 改进 (#6585)
[AIRFLOW-XXX] 澄清了一个语法不正确的句子 (#6667)
[AIRFLOW-XXX] 在文档中添加关于 Mesos 执行器弃用的通知 (#6712)
[AIRFLOW-XXX] 更新 pre-commits 列表 (#6603)
[AIRFLOW-XXX] 来自 GSOD 的 Breeze 文档更新 (#6285)
[AIRFLOW-XXX] 澄清夏令时行为 (#6324)
[AIRFLOW-XXX] GSoD:添加 “创建自定义操作符” 文档 (#6348)
[AIRFLOW-XXX] 将资源和链接添加到 CONTRIBUTING.rst (#6405)
[AIRFLOW-XXX] 将聊天频道详细信息从 gitter 更新为 slack (#4149)
[AIRFLOW-XXX] 将徽标信息添加到 readme (#6349)
[AIRFLOW-XXX] 修复 CONTRIBUTING.rst 的大小写问题 (#6329)
[AIRFLOW-XXX] Google Season of Docs 更新到 CONTRIBUTING 文档 (#6283)
Airflow 1.10.6 (2019-10-28)¶
重大更改¶
BaseOperator::render_template 函数签名已更改¶
先前版本的 BaseOperator::render_template
函数需要一个 attr
参数作为第一个位置参数,以及 content
和 context
。此函数签名在 1.10.6 中已更改,不再需要(或接受)attr
参数。
为了在 BaseOperator
的子类中使用此函数,必须删除 attr
参数
result = self.render_template("myattr", self.myattr, context) # Pre-1.10.6 call
# ...
result = self.render_template(self.myattr, context) # Post-1.10.6 call
更改为 aws_default
连接的默认区域¶
Airflow 与 AWS 的默认连接 (aws_default
) 的区域先前在安装期间设置为 us-east-1
。
现在需要手动设置该区域,可以在 Airflow 的连接屏幕中,通过 ~/.aws
配置文件,或者通过 AWS_DEFAULT_REGION
环境变量进行设置。
某些 DAG 处理指标已重命名¶
以下指标已被弃用,不会在 Airflow 2.0 中发出
scheduler.dagbag.errors
和dagbag_import_errors
- 请改用dag_processing.import_errors
dag_file_processor_timeouts
- 请改用dag_processing.processor_timeouts
collect_dags
– 请改用dag_processing.total_parse_time
dag.loading-duration.<basename>
– 请改用dag_processing.last_duration.<basename>
dag_processing.last_runtime.<basename>
– 请改用dag_processing.last_duration.<basename>
新功能¶
[AIRFLOW-4908] 为 update_dataset、patch_dataset 和 get_dataset 实现 BigQuery Hooks/Operators (#5546)
[AIRFLOW-4741] 可选地将任务错误报告给 Sentry (#5407)
[AIRFLOW-4939] 添加 default_task_retries 配置 (#5570)
[AIRFLOW-5508] 添加配置设置以限制发出的 StatsD 指标 (#6130)
[AIRFLOW-4222] 为 bash 和 zsh 添加 cli 自动补全功能 (#5789)
[AIRFLOW-3871] Operators 模板字段现在可以渲染对象内部的字段 (#4743)
改进¶
[AIRFLOW-5127] 为 CassandraToGoogleCloudStorageOperator 添加 Gzip 支持 (#5738)
[AIRFLOW-5125] 为 AdlsToGoogleCloudStorageOperator 添加 gzip 支持 (#5737)
[AIRFLOW-5124] 为 S3ToGoogleCloudStorageOperator 添加 gzip 支持 (#5736)
[AIRFLOW-5653] 在任务实例日志中记录 AirflowSkipException,以更清楚地说明任务可能被跳过的原因 (#6330)
[AIRFLOW-5343] 删除旧的 SQLAlchmey 悲观池断开连接处理 (#6034)
[AIRFLOW-5561] 放宽 gcp extra 所需的 httplib2 版本 (#6194)
[AIRFLOW-5657] 更新 dill 依赖项的上限 (#6334)
[AIRFLOW-5292] 允许 ECSOperator 标记任务 (#5891)
[AIRFLOW-4939] 简化默认任务重试的代码 (#6233)
[AIRFLOW-5126] 读取 aws hook 的 extra_config 中的
aws_session_token
(#6303)[AIRFLOW-5636] 允许添加或覆盖现有的 Operator 链接 (#6302)
[AIRFLOW-4965] 处理 GCP AI 运算符中的引号异常 (v1.10) (#6304)
[AIRFLOW-3783] 通过 HEADER 加速 Redshift 到 S3 的卸载 (#6309)
[AIRFLOW-3388] 为 AWS Batch Operator 添加 Array Jobs 支持 (#6153)
[AIRFLOW-4574] 添加在 SSHHook 中提供 private_key 的选项 (#6104) (#6163)
[AIRFLOW-5530] 修复 AWS SQS 传感器中的拼写错误 (#6012)
[AIRFLOW-5445] 减少 Kubernetes sidecar 所需的资源 (#6062)
[AIRFLOW-5443] 在 Kubernetes sidecar 中使用 alpine 镜像 (#6059)
[AIRFLOW-5344] 为 SparkSubmitOperator 添加 –proxy-user 参数 (#5948)
[AIRFLOW-3888] 用于 Hive 元存储连接的 HA (#4708)
[AIRFLOW-5269] 从健康端点重用 Scheduler Job 中的会话 (#5873)
[AIRFLOW-5153] 强制删除非空 BQ 数据集的选项 (#5768)
[AIRFLOW-4443] 记录外部触发的 LatestOnly 行为 (#5214)
[AIRFLOW-2891] 使 DockerOperator container_name 可模板化 (#5696)
[AIRFLOW-2891] 允许配置 docker_operator 容器名称 (#5689)
[AIRFLOW-4285] 更新任务依赖上下文定义和用法 (#5079)
[AIRFLOW-5142] 修复不稳定的 Cassandra 测试 (#5758)
[AIRFLOW-5218] 减少对 AWS Batch 作业状态的轮询 (#5825)
[AIRFLOW-4956] 修复 LocalTaskJob 心跳日志垃圾邮件 (#5589)
[AIRFLOW-3160] 在主页上异步加载 latest_dagruns (#5339)
[AIRFLOW-5560] 允许在
airflow backfill
命令中重置 DAG 时无需确认 (#6195)[AIRFLOW-5280] conn:删除 aws_default 的默认区域名称 (#5879)
[AIRFLOW-5528] end_of_log_mark 不应为日志记录 (#6159)
[AIRFLOW-5526] 由于 GCP 文档的迁移,更新文档配置 (#6154)
[AIRFLOW-4835] 重构 operator render_template (#5461)
错误修复¶
[AIRFLOW-5459] 在 Dataflow 运算符中使用动态临时位置 (#6078)
[Airflow 4923] 修复 Databricks hook 在日志中泄露 API 密钥的问题 (#5635)
[AIRFLOW-5133] 在 provide_gcp_credential_file 中保留原始环境状态 (#5747)
[AIRFLOW-5497] 更新
airflow/utils/dag_processing.py
中的文档字符串 (#6314)还原然后重做“[AIRFLOW-4797] 改进僵尸检测的性能和行为 (#5511)”,以提高性能 (#5908)
[AIRFLOW-5634] 不允许编辑 DagModelView (#6308)
[AIRFLOW-4309] 在删除 DAG 后删除损坏的 DAG 错误 (#6102)
[AIRFLOW-5387] 修复“显示暂停”分页错误 (#6100)
[AIRFLOW-5489] 删除不必要的变量赋值 (#6106)
[AIRFLOW-5491] mark_tasks pydoc 不正确 (#6108)
[AIRFLOW-5492] 添加了缺失的文档字符串 (#6107)
[AIRFLOW-5503] 修复 HDPI 屏幕上的树视图布局 (#6125)
[AIRFLOW-5481] 允许删除重命名的 DAG (#6101)
[AIRFLOW-3857] spark_submit_hook 无法在 Kubernetes 中杀死驱动程序 pod (#4678)
[AIRFLOW-4391] 修复“最近的任务”中 None 状态任务的工具提示 (#5909)
[AIRFLOW-5554] 最低要求 StatsD 3.3.0 (#6185)
[AIRFLOW-5306] 修复链接包含特殊字符时链接的显示 (#5904)
[AIRFLOW-3705] 修复 PostgresHook get_conn 以使用 conn_name_attr (#5841)
[AIRFLOW-5581] 干净地关闭 KubernetesJobWatcher,以便在 SIGTERM 上安全关闭 Scheduler (#6237)
[AIRFLOW-5634] 不允许在 DagModelView 中编辑禁用的字段 (#6307)
[AIRFLOW-4833] 允许在 DAG 声明中设置 Jinja env 选项 (#5943)
[AIRFLOW-5408] 修复 Kubernetes 模板中的环境变量名称 (#6016)
[AIRFLOW-5102] 如果 worker 作业无法发送心跳信号,则应自行终止 (#6284)
[AIRFLOW-5572] 清除任务实例时清除任务重新调度 (#6217)
[AIRFLOW-5543] 修复树状图和图形视图(RBAC UI)中工具提示消失的问题 (#6174)
[AIRFLOW-5444] 修复 action_logging,以便记录 POST 的 request.form (#6064)
[AIRFLOW-5484] 修复 PigCliHook 具有不正确的命名参数 (#6112)
[AIRFLOW-5342] 修复 MSSQL 破坏 task_instance db 迁移的问题 (#6014)
[AIRFLOW-5556] 为调度程序 DAG 处理的超时添加单独的配置 (#6186)
[AIRFLOW-4858] 弃用 airflow.configuration 中的“历史便利函数” (#5495) (#6144)
[AIRFLOW-774] 修复长期损坏的 DAG 解析 StatsD 指标的问题 (#6157)
[AIRFLOW-5419] 在使用模拟运行时,使用
sudo
来杀死已清除的任务 (#6026) (#6176)[AIRFLOW-5537] Yamllint 不是主机上的必需依赖项
[AIRFLOW-5536] 更好地处理临时输出文件
[AIRFLOW-5535] 修复 VERBOSE 参数的名称
[AIRFLOW-5519] 通过添加 apply_defaults 装饰器,修复 sql_to_gcs 运算符缺少多级默认参数的问题 (#6146)
[AIRFLOW-5210] 使查找模板文件更高效 (#5815)
[AIRFLOW-5447] 由于默认参数中的第二个 watcher 线程,导致调度程序停滞 (#6129)
仅限文档的更改¶
[AIRFLOW-5574] 修复 Google Analytics 脚本加载 (#6218)
[AIRFLOW-5588] 添加 Celery 的架构图 (#6247)
[AIRFLOW-5521] 修复指向 GCP 文档的链接 (#6150)
[AIRFLOW-5398] 将 contrib 示例 DAG 更新为上下文管理器 (#5998)
[AIRFLOW-5268] 应用与文献中相同的 DAG 命名约定 (#5874)
[AIRFLOW-5101] 修复示例中不一致的所有者值 (#5712)
[AIRFLOW-XXX] 修复拼写错误 - AWS DynamoDB Hook (#6319)
[AIRFLOW-XXX] 修复添加额外 Operator 链接的文档 (#6301)
[AIRFLOW-XXX] 添加有关任务生命周期的部分,并更正在文档中的大小写 (#4681)
[AIRFLOW-XXX] 明确 1.10.5 不是意外地从 UPDATING.md 中省略的 (#6240)
[AIRFLOW-XXX] 改进代码块指令中的格式 (#6242)
[AIRFLOW-XXX] 格式化 Sendgrid 文档 (#6245)
[AIRFLOW-XXX] 更新为新徽标 (#6066)
[AIRFLOW-XXX] FAQ 中的拼写错误 - schedule_interval (#6291)
[AIRFLOW-XXX] 在 1.10.4 中添加有关 DAG#get_task_instances 中重大更改的消息 (#6226)
[AIRFLOW-XXX] 修复使用 Timers 的指标文档中不正确的单位 (#6152)
[AIRFLOW-XXX] 修复 .rst 文件中的反引号问题并添加 Precommit hook (#6162)
[AIRFLOW-XXX] 更新有关变量强制回答的文档 (#6158)
[AIRFLOW-XXX] 添加配置授权的第三种方法 (#6134)
[AIRFLOW-XXX] 添加在单个文件上运行 pre-commit hook 的示例 (#6143)
[AIRFLOW-XXX] 向文档添加有关默认池的信息 (#6019)
[AIRFLOW-XXX] 使 Breeze 成为默认的集成测试环境 (#6001)
杂项/内部¶
[AIRFLOW-5687] 在 CI 构建管道中将 pip 升级到 19.0.2 (#6358) (#6361)
[AIRFLOW-5533] 修复失败的 CRON 构建 (#6167)
[AIRFLOW-5130] 使用库中的 GOOGLE_APPLICATION_CREDENTIALS 常量 (#5744)
[AIRFLOW-5369] 添加对 pre-commits 的交互性 (#5976)
[AIRFLOW-5531] 将已弃用的 log.warn() 替换为 log.warning() (#6165)
[AIRFLOW-4686] 使 dags 与 Pylint 兼容 (#5753)
[AIRFLOW-4864] 删除对 load_test_config 的调用 (#5502)
[AIRFLOW-XXX] 锁定 mypy 的版本,以便我们在一段时间内保持稳定 (#6198)
[AIRFLOW-XXX] 添加从 #5127 中遗漏的测试
[AIRFLOW-4928] 将配置解析移动到 DagBag 内部的类属性 (#5557)
[AIRFLOW-5003] 使 AWS Hooks 与 pylint 兼容 (#5627)
[AIRFLOW-5580] 为系统测试添加基类 (#6229)
Airflow 1.10.5 (2019-09-04)¶
重大变更¶
没有重大更改。
新功能¶
[AIRFLOW-1498] 添加用户向 Airflow UI 添加 Google Analytics 的功能 (#5850)
[AIRFLOW-4074] 添加向 Dataproc 作业添加标签的选项 (#5606)
[AIRFLOW-4846] 允许为 init 容器指定包含 git 凭据的现有密钥 (#5475)
改进¶
[AIRFLOW-5335] 更新 GCSHook 方法,使其需要最少的 IAM 权限 (#5939)
[AIRFLOW-2692] 允许 AWS Batch Operator 在 job_name 参数中使用模板 (#3557)
[AIRFLOW-4768] 在 example_gcp_video_intelligence 中添加 Timeout 参数 (#5862)
[AIRFLOW-5165] 使 Dataproc 具有高可用性 (#5781)
[AIRFLOW-5139] 允许自定义 ES 配置 (#5760)
[AIRFLOW-5340] 修复 GCP DLP 示例 (#594)
[AIRFLOW-5211] 将 pass_value 添加到 template_fields BigQueryValueCheckOperator (#5816)
[AIRFLOW-5113] 支持 slack web hook 中的图标 URL (#5724)
[AIRFLOW-4230] bigquery 架构更新选项应该是一个列表 (#5766)
[AIRFLOW-1523] 单击图形视图应显示相关的 DAG 运行 (#5866)
[AIRFLOW-5027] 为 ECS 和 SageMaker 运算符通用化 CloudWatch 日志抓取 (#5645)
[AIRFLOW-5244] 将所有可能的主题添加到 default_webserver_config.py (#5849)
[AIRFLOW-5245] 在调度程序周围添加更多指标 (#5853)
[AIRFLOW-5048] 改进 Kubernetes 资源的显示 (#5665)
[AIRFLOW-5284] 将已弃用的 log.warn 替换为 log.warning (#5881)
[AIRFLOW-5276] 从 airflow.utils.helpers 中删除未使用的助手 (#5878)
[AIRFLOW-4316] 支持从环境变量设置 kubernetes_environment_variables 配置部分 (#5668)
错误修复¶
[AIRFLOW-5168] 修复在 1.10.4 中失败的 Dataproc 运算符 (#5928)
[AIRFLOW-5136] 修复 DataProc{*} 运算符中不正确的 template_fields 的错误 (#5751)
[AIRFLOW-5169] 将 GCP 项目 ID 显式传递给 GCSHook 中的 StorageClient (#5783)
[AIRFLOW-5302] 修复 none_skipped 触发规则中的错误 (#5902)
[AIRFLOW-5350] 修复 BigQueryHook 中 num_retires 字段中的错误 (#5955)
[AIRFLOW-5145] 修复 rbac ui 提供错误选择来加密或不加密变量值的问题 (#5761)
[AIRFLOW-5104] 为 GCP Transfer 运算符设置默认计划 (#5726)
[AIRFLOW-4462] 在使用 MSSQL 后端时使用 datetime2 列类型 (#5707)
[AIRFLOW-5282] 在 kubeclient 上添加默认超时并捕获 HTTPError (#5880)
[AIRFLOW-5315] 当用户更改 executor_config 时,TaskInstance 不会从数据库更新 (#5926)
[AIRFLOW-4013] 标记成功/失败正在选择所有执行日期 (#5616)
[AIRFLOW-5152] 修复 GoogleCloudStorageToBigQueryOperator 中自动检测默认值的问题 (#5771)
[AIRFLOW-5100] Airflow 调度程序不遵守安全模式设置 (#5757)
[AIRFLOW-4763] 允许在 DockerOperator 中使用列表作为命令 (#5408)
[AIRFLOW-5260] 允许连接字符串中包含空的 URI 参数 (#5855)
[AIRFLOW-5257] 修复尝试关闭日志时 ElasticSearch 日志处理程序的错误 (#5863)
[AIRFLOW-1772] Google 更新的传感器无法使用 CRON 表达式 (#5730)
[AIRFLOW-5085] 从 TAG 运行 kubernetes git-sync 测试时失败 (#5699)
[AIRFLOW-5258] ElasticSearch 日志处理程序在 _clean_execution_dat 中有 2 次小时 (%H 和 %I) (#5864)
[AIRFLOW-5348] 通过 JS 设置时,转义已弃用图表视图中的标签 (#5952)
[AIRFLOW-5357] 修复导出的 variables.json 文件的 Content-Type (#5963)
[AIRFLOW-5109] 修复杀死进程时的进程竞争 (#5721)
[AIRFLOW-5240] 最新版本的 Kombu 破坏了 Airflow 的 py2 版本
其他/内部¶
[AIRFLOW-5111] 从 Dockerfile 中删除 apt-get upgrade (#5722)
[AIRFLOW-5209] 修复文档构建 (#5814)
[AIRFLOW-5083] 检查许可证镜像构建可以更快并移至安装前 (#5695)
[AIRFLOW-5119] Cron 作业应始终从头开始重建所有内容 (#5733)
[AIRFLOW-5108] 在 CI 本地环境中,长时间运行的 kerberos 有时可能会失败 (#5719)
[AIRFLOW-5092] 最新的 Python 镜像应在 force_pull_and_build 中本地拉取 (#5705)
[AIRFLOW-5225] 可以为所有 JS 文件自动添加一致的许可证 (#5827)
[AIRFLOW-5229] 向所有其他文件类型添加许可证 (#5831)
[AIRFLOW-5227] 所有 .sql 文件的一致许可证 (#5829)
[AIRFLOW-5161] 添加 pre-commit 钩子以仅对更改的文件运行静态检查 (#5777)
[AIRFLOW-5159] 优化 checklicence 镜像构建(如果不需要则不构建)(#5774)
[AIRFLOW-5263] 在 pre-commit 检查失败时显示差异 (#5869)
[AIRFLOW-5204] Shell 文件应使用 shellcheck 进行检查,并具有相同的许可证 (#5807)
[AIRFLOW-5233] 检查空格(制表符/换行符)和常见问题的一致性 (#5835)
[AIRFLOW-5247] 可以将从 NPM 获取所有依赖项的操作移到 Dockerfile 中 (#5870)
[AIRFLOW-5143] 损坏的 rat.jar 成为了 Docker 镜像的一部分 (#5759)
[AIRFLOW-5226] 所有 html JINJA 模板的一致许可证 (#5828)
[AIRFLOW-5051] 在新的 CI 系统中,覆盖率报告不正确 (#5732)
[AIRFLOW-5239] CONTRIBUTING.md 中的小错字和不正确的测试 (#5844)
[AIRFLOW-5287] 未拉取 Checklicence 基本镜像 (#5886)
[AIRFLOW-5301] 来自 breeze 的一些尚未提供的文件已提交到 master (#5901)
[AIRFLOW-5285] Pre-commit pylint 在 todo 文件上运行 (#5884)
[AIRFLOW-5288] 用于静态检查的临时容器应自动删除 (#5887)
[AIRFLOW-5206] 所有 .md 文件都应具有所有通用许可证、目录(如果适用)(#5809)
[AIRFLOW-5329] 将本地文件添加到 docker 的简便方法 (#5933)
[AIRFLOW-4027] 使实验性 API 测试更无状态 (#4854)
仅文档更改¶
[AIRFLOW-XXX] 修复 Azkaban 链接 (#5865)
[AIRFLOW-XXX] 从 CONTRIBUTING.md 中删除重复的行 (#5830)
[AIRFLOW-XXX] 修复 SchedulerJob 中不正确的文档字符串参数 (#5729)
Airflow 1.10.4 (2019-08-06)¶
重大变更¶
将 MySQL 时间戳导出为 UTC¶
MySqlToGoogleCloudStorageOperator
现在默认将 TIMESTAMP 列导出为 UTC,而不是使用 MySQL 服务器的默认时区。这对于 BigQuery 的使用是正确的行为,因为 BigQuery 假定没有时区的 TIMESTAMP 列采用 UTC 时区。要保留以前的行为,请将 ensure_utc
设置为 False.
DatastoreHook 的更改¶
从
get_conn
函数中删除参数version
,并将其添加到钩子的__init__
函数中,并将其重命名为api_version
将函数
allocate_ids
的partialKeys
参数重命名为partial_keys
GoogleCloudStorageHook 的更改¶
在
GoogleCloudStorageHook
中使用的基于发现的 API (googleapiclient.discovery
) 现在被推荐的基于客户端的 API (google-cloud-storage
) 取代。要了解这两个库之间的区别,请阅读 https://cloud.google.com/apis/docs/client-libraries-explained。PR:#5054作为此替换的一部分,
GoogleCloudStorageHook.upload
方法的multipart
和num_retries
参数已弃用。如果对象/blob 大小超过 8 MB,客户端库会自动使用多部分上传 - 源代码。客户端还会自动处理重试
GoogleCloudStorageHook.delete
和GoogleCloudStorageHook.insert_object_acl
中已弃用generation
参数。
更新到 google-cloud-storage >= 1.16
会将上游 client.get_bucket()
方法的签名从 get_bucket(bucket_name: str)
更改为 get_bucket(bucket_or_name: Union[str, Bucket])
。此方法不由 airflow 钩子直接公开,但是任何直接访问连接的代码(GoogleCloudStorageHook().get_conn().get_bucket(...)
或类似)都需要更新。
写入 Elasticsearch 日志的更改¶
已从 [elasticsearch]
部分下的所有配置项中删除 elasticsearch_
前缀。例如,elasticsearch_host
现在只是 host
。
删除 non_pooled_task_slot_count
和 non_pooled_backfill_task_slot_count
¶
删除了 non_pooled_task_slot_count
和 non_pooled_backfill_task_slot_count
,取而代之的是一个真正的池,例如 default_pool
。
默认情况下,任务在 default_pool
中运行。default_pool
使用 128 个插槽初始化,用户可以通过 UI/CLI 更改插槽数。default_pool
无法删除。
Celery 部分中的 pool
配置选项,以支持不同的 Celery 池实现¶
新的 pool
配置选项允许用户选择不同的池实现。默认值为“prefork”,而选项包括“prefork”(默认值)、“eventlet”、“gevent”或“solo”。这可以帮助用户在不同的场景中实现更好的并发性能。
有关 Celery 池实现的更多详细信息,请参考
BaseOperator
和 DAG
类中方法签名的更改¶
BaseOperator
和 DAG
类中 get_task_instances
方法的签名已更改。此更改不会更改该方法在两种情况下的行为。
对于 BaseOperator
¶
旧签名
def get_task_instances(self, session, start_date=None, end_date=None):
...
新签名
@provide_session
def get_task_instances(self, start_date=None, end_date=None, session=None):
...
对于 DAG
¶
旧签名
def get_task_instances(self, session, start_date=None, end_date=None, state=None):
...
新签名
@provide_session
def get_task_instances(self, start_date=None, end_date=None, state=None, session=None):
...
在任何一种情况下,都有必要重写当前提供 session
位置参数的 get_task_instances
方法的调用。对此方法的新调用如下所示
# if you can rely on @provide_session
dag.get_task_instances()
# if you need to provide the session
dag.get_task_instances(session=your_session)
新功能¶
[AIRFLOW-4811] 实现 GCP 数据丢失防护钩子和运算符 (#5539)
[AIRFLOW-5035] 使用 golang 的“通道”样式替换 multiprocessing.Manager (#5615)
[AIRFLOW-4883] 杀死挂起的文件进程管理器 (#5605)
[AIRFLOW-4929] 在 UI 中漂亮地打印 JSON 变量 (#5573)
[AIRFLOW-4884] 在 RBAC UI 中汇总 import_errors (#5516)
[AIRFLOW-4871] 允许通过 RBAC UI 创建 DagRuns (#5507)
[AIRFLOW-4591] 使 default_pool 成为一个真正的池 (#5349)
[AIRFLOW-4844] 向 DAG 添加可选的 is_paused_upon_creation 参数 (#5473)
[AIRFLOW-4456] 添加可子类化的 BaseBranchOperator (#5231)
[AIRFLOW-4343] 如果调度程序未运行,则在 UI 中显示警告 (#5127)
[AIRFLOW-4739] 添加任意定义 kubernetes 工作程序 pod 标签的功能 (#5376)
[AIRFLOW-4348] 在 BigQueryOperator 中添加 GCP 控制台链接 (#5195)
[AIRFLOW-4306] 全局运算符额外链接 (#5094)
[AIRFLOW-4812] 添加批处理镜像注释 (#5433)
[AIRFLOW-4135] 添加 Google Cloud Build 运算符和钩子 (#5251)
[AIRFLOW-4781] 添加在 KubernetesPodOperator 中指定端口的功能 (#5410)
[AIRFLOW-4521] 暂停 dag 也会暂停其子 dag (#5283)
[AIRFLOW-4738] 为示例 DAG 强制执行 exampleinclude (#5375)
[AIRFLOW-4326] Airflow AWS SQS 运算符 (#5110)
[AIRFLOW-3729] 支持 KubernetesPodOperator 的环境变量中的
DownwardAPI
(#4554)[AIRFLOW-4585] 实现 Kubernetes Pod 突变钩子 (#5359)
[AIRFLOW-161] 新的重定向路由和额外链接 (#5059)
[AIRFLOW-4420] 回填尊重 task_concurrency (#5221)
[AIRFLOW-4147] 添加将事件发布到 Redis 的运算符 (#4967)
[AIRFLOW-3359] 添加将客户加密密钥传递到 Dataproc 的选项 (#4200)
[AIRFLOW-4318] 创建 Google Cloud 翻译语音运算符 (#5102)
[AIRFLOW-3960] 添加 Google Cloud 语音运算符 (#4780)
[AIRFLOW-1501] 添加 GoogleCloudStorageDeleteOperator (#5230)
[AIRFLOW-3672] 添加对 Mongo DB DNS Seedlist 连接格式的支持 (#4481)
[AIRFLOW-4397] 手动为 gcs 传感器添加集成文档 (#5204)
[AIRFLOW-4251] 记录 DagRun 调度延迟 (#5050)
[AIRFLOW-4118] 记录 DagRun 持续时间 (#4946)
[AIRFLOW-4361] 修复不稳定的 test_integration_run_dag_with_scheduler_failure (#5182)
[AIRFLOW-4361] 修复不稳定的 test_integration_run_dag_with_scheduler_failure (#5140)
[AIRFLOW-4168] 创建 Google Cloud Video Intelligence 运算符 (#4985)
[AIRFLOW-4397] 添加 GCSUploadSessionCompleteSensor (#5166)
[AIRFLOW-4335] 为 GCP 连接添加默认的 num_retries (#5117)
[AIRFLOW-3808] 将 cluster_fields 添加到 BigQueryHook 的 create_empty_table 方法 (#4654)
[AIRFLOW-4362] 修复 test_execution_limited_parallelism 测试 (#5141)
[AIRFLOW-4307] 回填操作遵循并发限制 (#5128)
[AIRFLOW-4268] 添加 MsSqlToGoogleCloudStorageOperator (#5077)
[AIRFLOW-4169] 添加 Google Cloud Vision 检测操作符 (#4986)
[AIRFLOW-XXX] 修复 WS-2019-0032 (#5384)
[AIRFLOW-XXX] 修复 CVE-2019-11358 (#5197)
[AIRFLOW-XXX] 更改 Jinja2 允许的版本以修复 CVE-2019-10906 (#5075)
改进¶
[AIRFLOW-5022] 修复 DockerHook 对于带有端口号的注册表的问题 (#5644)
[AIRFLOW-4961] 将 TaskFail.duration 作为 int 类型插入以匹配数据库模式列类型 (#5593)
[AIRFLOW-5038] 当 pod 删除被禁用时,跳过 pod 删除日志消息 (#5656)
[AIRFLOW-5067] 更新分页符号 (#5682)
[AIRFLOW-4981][AIRFLOW-4788] 始终在任务实例上下文中使用 pendulum DateTimes (#5654)
[AIRFLOW-4880] 为 SqlSensor 添加 success、failure 和 fail_on_empty 参数 (#5488)
[AIRFLOW-3617] 在 Kube 执行器和 pod 的配置中添加 gpu 限制选项 (#5643)
[AIRFLOW-4998] 在 BigQueryOperator 中运行多个查询 (#5619)
[AIRFLOW-4929] 改进 UI 中 JSON 变量的显示 (#5641)
[AIRFLOW-4959] 为 DataProcHiveOperator 添加 .hql 支持 (#5591)
[AIRFLOW-4962] 修复 Werkzeug v0.15 中 DispatcherMiddleware 导入的弃用警告 (#5595)
[AIRFLOW-4797] 改进僵尸检测的性能和行为 (#5511)
[AIRFLOW-4911] 屏蔽来自 KubernetesExecutor 的 FORBIDDEN 错误 (#5547)
[AIRFLOW-3495] 验证传递给 DataProcSparkSqlOperator 的 query 和 query_uri 之一 (#5510)
[AIRFLOW-4925] 改进变量导入文件字段的 CSS 样式 (#5552)
[AIRFLOW-4906] 改进 SparkSubmitHook 的调试 (#5542)
[AIRFLOW-4904] 可以通过设置 $AIRFLOW_TEST_CONFIG 覆盖 unittest.cfg 的名称和路径 (#5540)
[AIRFLOW-4920] 使用 html.escape 而不是 cgi.escape 来修复 DeprecationWarning (#5551)
[AIRFLOW-4919] DataProcJobBaseOperator 的 dataproc_*_properties 可以使用模板 (#5555)
[AIRFLOW-4478] 延迟实例化默认资源对象。 (#5259)
[AIRFLOW-4564] AzureContainerInstance 的错误修复和改进 (#5319)
[AIRFLOW-4237] 在甘特图中包含任务的尝试次数 (#5037)
[AIRFLOW-4862] 允许直接使用 IP 地址作为 Web 服务器日志的主机名 (#5501)
[AIRFLOW-4857] 为 SlackWebhookOperator 添加模板字段 (#5490)
[AIRFLOW-3502] 为 Celery 添加用于设置 "pool" 的配置选项 (#4308)
[AIRFLOW-3217] 在日志和代码视图中切换换行的按钮 (#4277)
[AIRFLOW-4491] 为日志添加“跳转到末尾”按钮 (#5266)
[AIRFLOW-4422] Pool 利用率统计信息 (#5453)
[AIRFLOW-4805] 将 py_file 作为模板字段添加到 DataflowPythonOperator (#5451)
[AIRFLOW-4838] 在 AWSAthenaOperator 中显示 Athena 错误 (#5467)
[AIRFLOW-4831] 如果缺少 section,conf.has_option 不再抛出异常。 (#5455)
[AIRFLOW-4829] EMR 传感器更具描述性的异常 (#5452)
[AIRFLOW-4414] AWSAthenaOperator:将 QueryExecutionID 推送到 XCom (#5276)
[AIRFLOW-4791] 向 SnowflakeOperator 添加 “schema” 关键字参数 (#5415)
[AIRFLOW-4759] 将成功运行标记为失败时不要报错 (#5435)
[AIRFLOW-4716] 记录 DAG 加载时间 (#5350)
[AIRFLOW-3958] 支持将任务列表作为链中的上游 (#4779)
[AIRFLOW-4409] 防止空值导致任务持续时间中断 (#5178)
[AIRFLOW-4418] 向任务模态框添加“仅失败”选项 (#5193)
[AIRFLOW-4740] 在 DAG default_args 中接受字符串
end_date
(#5381)[AIRFLOW-4423] 改进 mysql 到 gcs 操作符中的日期处理。 (#5196)
[AIRFLOW-4447] 在 UI 中以人类友好的格式显示任务持续时间 (#5218)
[AIRFLOW-4377] 删除 DAG.owner() 中不必要的对象转换 (#5144)
[AIRFLOW-4766] 为 DataprocClusterCreateOperator 添加自动伸缩选项 (#5425)
[AIRFLOW-4795] 将 alembic 升级到最新版本。 (#5411)
[AIRFLOW-4793] 向 mlengine 操作符添加 signature_name (#5417)
[AIRFLOW-3211] 在 Airflow 重启时重新连接到 GCP Dataproc 作业 (#4083)
[AIRFLOW-4750] 记录已识别的僵尸任务实例 (#5389)
[AIRFLOW-3870] STFPOperator:更新日志级别和返回值 (#4355)
[AIRFLOW-4759] 在 set_state API 中批量查询。 (#5403)
[AIRFLOW-2737] 将原始许可证头恢复到 airflow.api.auth.backend.kerberos_auth
[AIRFLOW-3635] 修复 delete_dag 中的错误逻辑(在 PR#4406 中引入)(#4445)
[AIRFLOW-3599] 从 delete dag 中删除 Dagbag (#4406)
[AIRFLOW-4737] 增加并记录 celery 队列名称限制 (#5383)
[AIRFLOW-4505] 更正 PY3 的全部标签 (#5275)
[AIRFLOW-4743] 为 SSHOperator 添加环境变量支持 (#5385)
[AIRFLOW-4725] 修复 setup.py PEP440 和 Sphinx-PyPI-upload 依赖 (#5363)
[AIRFLOW-3370] 为 Elasticsearch 任务日志处理程序添加 stdout 输出选项 (#5048)
[AIRFLOW-4396] 在 UI 中提供指向外部 Elasticsearch 日志的链接。 (#5164)
[AIRFLOW-1381] 允许在 DockerOperator 中设置主机临时目录 (#5369)
[AIRFLOW-4598] K8s 执行器的任务重试未耗尽 (#5347)
[AIRFLOW-4218] 在调用 k8 Python 客户端库 API 时,支持为 K8executor 提供 http 参数 (#5060)
[AIRFLOW-4159] 为 K8sExecutor 添加对其他静态 pod 标签的支持 (#5134)
[AIRFLOW-4720] 允许在 .airflowignore 文件中使用注释。 (#5355)
[AIRFLOW-4486] 在 MySqlHook 中添加 AWS IAM 身份验证 (#5334)
[AIRFLOW-4417] 为 PostgresHook 添加 AWS IAM 身份验证 (#5223)
[AIRFLOW-3990] 编译正则表达式。 (#4813)
[AIRFLOW-4572] 将 prepare_classpath() 重命名为 prepare_syspath() (#5328)
[AIRFLOW-3869] 在 AirflowConfigParser.getboolean 中引发一致的异常 (#4692)
[AIRFLOW-4571] 为 SimpleHttpOperator 的模板字段添加 header (#5326)
[AIRFLOW-3867] 重命名 GCP 的子包 (#4690)
[AIRFLOW-3725] 将 private_key 添加到 bigquery_hook 的 get_pandas_df 方法 (#4549)
[AIRFLOW-4546] 升级 google-cloud-bigtable。 (#5307)
[AIRFLOW-4519] 优化视图中操作符类名称的排序 (#5282)
[AIRFLOW-4503] 支持完整的 pig 选项 (#5271)
[AIRFLOW-4468] 添加 sql_alchemy_max_overflow 参数 (#5249)
[AIRFLOW-4467] 将 dataproc_jars 添加到 Dataproc 操作的模板字段中… (#5248)
[AIRFLOW-4381] 使用 get_direct_relative_ids 获取任务的关联项 (#5147)
[AIRFLOW-3624] 向 MLEngineTrainingOperator 添加 masterType 参数 (#4428)
[AIRFLOW-3143] 支持 DataprocClusterCreateOperator 中的自动区域 (#5169)
[AIRFLOW-3874] 改进 BigQueryHook.run_with_configuration 的位置支持 (#4695)
[AIRFLOW-4399] 避免在 models.dagbag 中重复 os.path.isfile() 检查 (#5165)
[AIRFLOW-4031] 允许在 snowflake hook 中使用密钥对身份验证 (#4875)
[AIRFLOW-3901] 添加 role 作为 SnowflakeHook 的可选配置参数 (#4721)
[AIRFLOW-3455] 在 snowflake 连接器中添加 region (#4285)
[AIRFLOW-4073] 为 AWS Athena 操作符添加 template_ext (#4907)
[AIRFLOW-4093] AWSAthenaOperator:如果作业失败/取消/达到最大重试次数,则抛出异常 (#4919)
[AIRFLOW-4356] 将额外的 RuntimeEnvironment 键添加到 DataFlowHook (#5149)
[AIRFLOW-4337] 修复 CI 中的 docker-compose 弃用警告 (#5119)
[AIRFLOW-3603] QuboleOperator:从 SparkCmd 文档中删除 SQLCommand (#4411)
[AIRFLOW-4328] 修复从 Pool 页面指向任务实例的链接 (#5124)
[AIRFLOW-4255] 使 GCS Hook 向后兼容 (#5089)
[AIRFLOW-4103] 允许在 dataflow 作业名称中使用大写字母 (#4925)
[AIRFLOW-4255] 将基于发现的 API 替换为 GCS 的基于客户端的 API (#5054)
[AIRFLOW-4311] 删除 localexecutor 中的 sleep (#5096)
[AIRFLOW-2836] 少量改进 contrib.sensors.FileSensor (#3674)
[AIRFLOW-4104] 向常用类添加类型注释。 (#4926)
[AIRFLOW-3910] 在 Connection.get_hook() 中显式引发异常 (#4728)
[AIRFLOW-3322] 更新 QuboleHook 以从 qds_sdk 动态获取参数 (#4165)
[AIRFLOW-4565] 记录 celery 执行器 (#5321)
[AIRFLOW-4573] 在 prepare_classpath 之后导入 airflow_local_settings (#5330)
[AIRFLOW-4448] 不要将 ENV 和 _cmd 烘焙到非 sudo 的临时配置中 (#4050)
[AIRFLOW-4295] 使 HttpHook 中的
method
属性不区分大小写 (#5313)[AIRFLOW-3703] 为 KubernetesPodOperator 添加 dnsPolicy 选项 (#4520)
[AIRFLOW-3057] 将 prev_*_date_success 添加到模板上下文 (#5372)
[AIRFLOW-4336] 对于 gcs_download_operator,停止在日志中显示整个 GCS 文件字节 (#5151)
[AIRFLOW-4528] 在超时时取消 DataProc 任务 (#5293)
错误修复¶
[AIRFLOW-5089] 更改 google-cloud-spanner 的版本要求以解决版本不兼容问题 (#5703)
[AIRFLOW-4289] 修复 SparkSubmitHook 中 spark_binary 参数被忽略的问题 (#5564)
[AIRFLOW-5075] 让 HttpHook 处理具有空主机字段的连接 (#5686)
[AIRFLOW-4822] 修复使用子 DAG 时错误清除父 DAG 任务实例的错误 (#5444)
[AIRFLOW-5050] 在
airflow sync_perms
中正确删除 FAB 权限 m2m 对象 (#5679)[AIRFLOW-5030] 修复包含 __ 的配置键的环境变量扩展 (#5650)
[AIRFLOW-4590] 更改日志级别以成为正确的库,以抑制 WinRM 中的警告 (#5337)
[AIRFLOW-4451] 允许将命名元组模板化 (#5673)
[AIRFLOW-XXX] 修复 Kube pod 限制未应用的错误(请求已应用,但限制未应用)(#5657)
[AIRFLOW-4775] 修复 GceHook 中的错误参数顺序 (#5613)
[AIRFLOW-4995] 修复 MySQL >=8.0.16 上的数据库初始化 (#5614)
[AIRFLOW-4934] 由于 Werkzeug 升级修复 ProxyFix (#5563) (#5571)
[AIRFLOW-4136] 修复 hook 的 key_file 被 SSHHook 连接覆盖的问题 (#5558)
[AIRFLOW-4587] 在 AWSAthenaHook 中将 self.conn 替换为 self.get_conn() (#5545)
[AIRFLOW-1740] 修复通过 UI 创建和更新 xcom 的问题 (#5530) (#5531)
[AIRFLOW-4900] 解决 Werkzeug 的不兼容版本问题 (#5535)
[AIRFLOW-4510] 在 DAG 初始化期间不要更改 default_args (#5277)
[AIRFLOW-3360] 使 DAG 搜索使用 url-search-params-polyfill 来支持 IE,同时遵循其他查询字符串参数 (#5503)
[AIRFLOW-4896] 使 KubernetesExecutorConfig 的默认参数不可变 (#5534)
[AIRFLOW-4494] 在 DaskExecutor 中删除
shell=True
(#5273)[AIRFLOW-4890] 修复非 RBAC 的 TaskInstance 视图中的日志链接 (#5525)
[AIRFLOW-4892] 修复通过 UI 创建连接的问题 (#5527)
[AIRFLOW-4406] 修复方法名称中的错别字:NullFernet.decrpyt 改为 decrypt (#5509)
[AIRFLOW-4849] 将 gcp_conn_id 添加到 cloudsqldatabehook 类,以正确使用 CloudSqlProxyRunner 类 (#5478)
[AIRFLOW-4769] 将 gcp_conn_id 传递给 BigtableHook (#5445)
[AIRFLOW-4524] 修复标记成功/失败视图中的错误字段名称 (#5486)
[AIRFLOW-3671] 从
kwargs
中删除 MongoToS3Operator 的replace
参数 (#4480)[AIRFLOW-4845] 修复 k8s 安全上下文中 runAsUser 0 未被设置的错误 (#5474)
[AIRFLOW-4354] 修复经典 UI 中“between”日期过滤器中的异常 (#5480)
[AIRFLOW-4587] 在 AWSAthenaHook 中用 self.get_conn() 替换 self.conn (#5462)
[AIRFLOW-4516] K8s runAsUser 和 fsGroup 不能是字符串 (#5429)
[AIRFLOW-4298] 停止调度器重复警告“连接失效” (#5470)
[AIRFLOW-4559] JenkinsJobTriggerOperator 错误修复 (#5318)
[AIRFLOW-4841] 将 Sphinx AutoApi 固定到 1.0.0 (#5468)
[AIRFLOW-4479] 在 load_bytes 方法中包含 s3_overwrite kwarg (#5312)
[AIRFLOW-3746] 修复 DockerOperator 缺少容器退出的问题 (#4583)
[AIRFLOW-4233] 从 Bq 到 GCS 操作符中删除模板扩展 (#5456)
[AIRFLOW-2141][AIRFLOW-3157][AIRFLOW-4170] 导入变量时通过 JSON 序列化非字符串值 (#4991)
[AIRFLOW-4826] 删除
airflow resetdb
命令中的警告 (#5447)[AIRFLOW-4148] 修复单击状态列时编辑 DagRuns 的问题 (#5436)
[AIRFLOW-4455] RBAC UI 中子 DAG 的 dag_details 损坏 (#5234)
[AIRFLOW-2955] 修复 Kubernetes pod 操作符以设置任务 pod 的请求和限制 (#4551)
[AIRFLOW-4459] 修复 DAG 计数为零时 /home 页面中 DAG 计数错误的问题 (#5235)
[AIRFLOW-3876] AttributeError: 模块
distutils
没有属性 'util'[AIRFLOW-4146] 修复 CgroupTaskRunner 错误 (#5224)
[AIRFLOW-4524] 修复 RBAC 模式下“忽略 *”切换的错误 (#5378)
[AIRFLOW-4765] 修复 DataProcPigOperator 执行方法 (#5426)
[AIRFLOW-4798] 消除 dagbag 和 TI 测试的相互依赖性 (#5422)
[AIRFLOW-4800] 修复 GKEClusterHook ctor 调用 (#5424)
[AIRFLOW-4799] 不要在 BashOperator 执行方法中修改 self.env (#5421)
[AIRFLOW-4393] 在 KubernetesPodOperator 中添加在获取 pod 状态和/或日志时的重试逻辑 (#5284)
[AIRFLOW-4174] 修复 HttpHook 带退避运行的问题 (#5213)
[AIRFLOW-4463] 处理短重试间隔中的除零错误 (#5243)
[AIRFLOW-2614] 在系统中有大量 DAG 时加速 trigger_dag API 调用
[AIRFLOW-4756] 将 ti.state 添加到 ti.start_date 作为甘特图的标准 (#5399)
[AIRFLOW-4760] 修复重新加载时从 DagBag 中消失的 zip 打包的 DAG (#5404)
[AIRFLOW-4731] 修复 google-storage-client 1.16 的 GCS hook (#5368)
[AIRFLOW-3506] 使用 match_phrase 在 elasticsearch 中查询 log_id (#4342)
[AIRFLOW-4084] 修复 ElasticSearch 日志下载 (#5177)
[AIRFLOW-4501] 为 sqla+pymysql 注册 pendulum datetime 转换器 (#5190)
[AIRFLOW-986] HiveCliHook 忽略连接的 extra 参数中的 'proxy_user' 值 (#5305)
[AIRFLOW-4442] 修复 HiveToDruidTransfer 中的 hive_tblproperties (#5211)
[AIRFLOW-4557] 将 gcp_conn_id 参数添加到 CloudSqlDatabaseHook 的 get_sqlproxy_runner() (#5314)
[AIRFLOW-4545] 将 FAB 升级到最新版本 (#4955)
[AIRFLOW-4492] 将 Dataproc 集群操作符更改为轮询操作 (#5269)
[AIRFLOW-4452] Webserver 和 Scheduler 因 slackclient 更新而持续崩溃 (#5225)
[AIRFLOW-4450] 修复 has_dag_access 中的请求参数 (#5220)
[AIRFLOW-4434] 支持带有 HiveServer2Hook 的 Impala (#5206)
[AIRFLOW-3449] 在启用远程日志记录时写入本地 dag 解析日志。 (#5175)
[AIRFLOW-4300] 修复 DAG 尚未运行时图表模式调用 (#5185)
[AIRFLOW-4401] 使用管理器进行队列同步 (#5200)
[AIRFLOW-3626] 修复触发 zip 文件中包含的 DAG (#4439)
[AIRFLOW-3720] 修复比较 GCS 和 S3 文件时的不匹配 (#4766)
[AIRFLOW-4403] 在 UI 中按
dag_id
或owners
搜索 (#5184)[AIRFLOW-4308] 修复 Python 3.6+ 上 DST 周围的 TZ 循环 (#5095)
[AIRFLOW-4324] 修复 RBAC UI 中的 DAG 模糊搜索 (#5131)
[AIRFLOW-4297] 针对 1.10.4 版本的 manage_slas() 的临时热修复 (#5150)
[AIRFLOW-4299] 升级到 Celery 4.3.0 以修复崩溃的工作进程 (#5116)
[AIRFLOW-4291] 正确渲染 DAG 图表页面中的 doc_md (#5121)
[AIRFLOW-4310] 修复 Dag 详细信息页面上的不正确链接 (#5122)
[AIRFLOW-4331] 从 Dag 详细信息页面更正 Null 状态运行的筛选器 (#5123)
[AIRFLOW-4294] 修复 UI 中 dag_id 包含点号时缺少 dag 和任务运行的问题 (#5111)
[AIRFLOW-4332] 升级 sqlalchemy 以消除安全漏洞 (#5113)
[AIRFLOW-4312] 将 template_fields 和 template_ext 添加到 BigQueryCheckO… (#5097)
[AIRFLOW-4293] 修复 d4ecb8fbee3_add_schedule_interval_to_dag.py 中的降级 (#5086)
[AIRFLOW-4267] 修复图表视图中的 TI 持续时间 (#5071)
[AIRFLOW-4163] IntervalCheckOperator 支持相对差异且不忽略 0 (#4983)
[AIRFLOW-3938] QuboleOperator 修复和对 SqlCommand 的支持 (#4832)
[AIRFLOW-2903] 将默认所有者更改为
airflow
(#4151)[AIRFLOW-4136] 修复构造函数覆盖 key_file 的问题 (#5155)
[AIRFLOW-3241] 删除 GCS 传感器中无效的模板扩展 (#4076)
其他/内部¶
[AIRFLOW-4338] 更改 k8s pod_request_factory 以使用 yaml safe_load (#5120)
[AIRFLOW-4869] 重新组织 sql 到 gcs 操作符。 (#5504)
[AIRFLOW-5021] 将 gitpython 移入 setup_requires (#5640)
[AIRFLOW-4583] 修复 GKEPodOperator 中的类型错误 (#5612)
[AIRFLOW-4116] Dockerfile 现在支持 DockerHub 上的 CI 镜像构建 (#4937)
[AIRFLOW-4115] 多阶段 Airflow Docker 镜像 (#4936)
[AIRFLOW-4963] 避免重新创建任务上下文 (#5596)
[AIRFLOW-4865] 添加上下文管理器以在测试中设置临时配置值。 (#5569)
[AIRFLOW-4937] 修复版本低于 4.17.13 的 lodash 安全问题 (#5572)(仅在构建管道中使用,不在运行时使用)
[AIRFLOW-4868] 修复 kubernetes/docker/build.sh 中的拼写错误 (#5505)
[AIRFLOW-4211] 为 WebHDFSHook 添加测试 (#5015)
[AIRFLOW-4320] 为 SegmentTrackEventOperator 添加测试 (#5104)
[AIRFLOW-4319] 为 Bigquery 相关操作符添加测试 (#5101)
[AIRFLOW-4014] 更改 DatastoreHook 并添加测试 (#4842)
[AIRFLOW-4322] 为 VerticaOperator 添加测试 (#5107)
[AIRFLOW-4323] 为 WinRMOperator 添加 2 个测试 (#5108)
[AIRFLOW-3677] 提高 CheckOperator 的测试覆盖率 (#4756)
[AIRFLOW-4659] 修复 api 模块的 pylint 问题 (#5398)
[AIRFLOW-4358] 通过不运行任务来加速 test_jobs (#5162)
[AIRFLOW-4394] 不要从 CLI 测试中测试 BackfillJob 的行为 (#5160)
[AIRFLOW-3471] 将 XCom 移出 models.py (#4629)
[AIRFLOW-4379] 删除重复代码并在 gcs_to_gcs.py 中添加验证 (#5145)
[AIRFLOW-4259] 将模型移出 models.py (#5056)
[AIRFLOW-XXX] 加速 Travis 上 Cassanda 模块的构建 (#5233)
[AIRFLOW-4535] 将 jobs.py 分割成多个文件 (#5303)
[AIRFLOW-1464] 批量更新 task_instance 状态 (#5323)
[AIRFLOW-4554] sudo 命令测试,添加一些其他测试文档 (#5310)
[AIRFLOW-4419] 改进调度器中的并发检查 (#5194)
[AIRFLOW-4269] 稍微加速 jobs._process_task_instances() (#5076)
[AIRFLOW-4341] 删除 fab.BaseView 中已存在的
View.render()
(#5125)[AIRFLOW-4342] 使用 @cached_property 而不是每次都重新实现它 (#5126)
[AIRFLOW-4256] 从迁移中删除 noqa (#5055)
[AIRFLOW-4034] 删除使用
**locals()
的不必要的字符串格式化 (#4861)[AIRFLOW-3944] 删除代码异味 (#4762)
仅限文档的更改¶
[AIRFLOW-XXX] 为 KubernetesPodOperator 的 annotations 参数添加缺失的文档 (#5666)
[AIRFLOW-XXX] 修复 CONTRIBUTING.md 中的拼写错误 (#5626)
[AIRFLOW-XXX] 更正 BaseSensorOperator 文档 (#5562)
[AIRFLOW-4926] 修复示例 dag 的 start_date 为 datetime.utcnow() 的问题 (#5553)
[AIRFLOW-4860] 删除示例 Dag 中的冗余信息 (#5497)
[AIRFLOW-4767] 修复 Dataproc 操作符文档中的错误 (#5487)
[AIRFLOW-1684] 基于 XCom 变量的分支(文档) (#4365)
[AIRFLOW-3341] FAQ 返回 DAG 对象示例 (#4605)
[AIRFLOW-4433] 在 DockerOperator 文档字符串中添加缺失的类型 (#5205)
[AIRFLOW-4321] 替换 GCS 对象大小的最大大小限制的不正确信息 (#5106)
[AIRFLOW-XXX] 添加有关用户列表的信息 (#5341)
[AIRFLOW-XXX] 澄清 GCS_to_BQ Op 中与 autodetect 参数相关的文档 (#5294)
[AIRFLOW-XXX] 从时区文档中删除有关 pytz 兼容性的提及 (#5316)
[AIRFLOW-XXX] 为 GoogleCloudStorageDeleteOperator 添加缺失的文档 (#5274)
[AIRFLOW-XXX] 删除有关 GCP 连接范围的不正确注释 (#5242)
[AIRFLOW-XXX] 修复 Dataproc 操作符文档中的错误 (#5192)
[AIRFLOW-XXX] 链接到 macros.rst 中 timedelta 的正确类 (#5226)
[AIRFLOW-XXX] 添加 Kamil 作为提交者 (#5216)
[AIRFLOW-XXX] 添加 Joshua 和 Kevin 作为提交者 (#5207)
[AIRFLOW-XXX] 减少测试中的日志垃圾邮件 (#5174)
[AIRFLOW-XXX] 加速 PythonSensor 的测试 (#5158)
[AIRFLOW-XXX] 将 Bas Harenslak 添加到提交者列表 (#5157)
[AIRFLOW-XXX] 将 Jarek Potiuk 添加到提交者列表 (#5132)
[AIRFLOW-XXX] 更新 SchedulerJob 的文档字符串 (#5105)
[AIRFLOW-XXX] 修复 CassandraToGoogleCloudStorageOperator 的文档字符串 (#5103)
[AIRFLOW-XXX] 更新 SlackWebhookHook 和 SlackWebhookOperator 文档字符串 (#5074)
[AIRFLOW-XXX] 在文档中忽略 node_modules 下的 Python 文件 (#5063)
[AIRFLOW-XXX] 使用 LICNESE 文件构建通用 wheel (#5052)
[AIRFLOW-XXX] 修复 SQSHook 的文档字符串 (#5099)
[AIRFLOW-XXX] 在 readthedocs 上使用 Py3.7
[AIRFLOW-4446] 修复拼写错误 (#5217)
Airflow 1.10.3 (2019-04-09)¶
重大更改¶
新的 dag_discovery_safe_mode
配置选项¶
如果启用了 dag_discovery_safe_mode
,则仅当文件包含字符串“airflow”和“DAG”时,才检查文件是否包含 DAG。为了向后兼容,默认情况下启用此选项。
RedisPy 依赖项更新到 v3 系列¶
如果您正在使用 Redis 传感器或 Hook,您可能需要更新代码。请参阅 redis-py 移植说明,检查您的代码是否可能受到影响(MSET、MSETNX、ZADD 和 ZINCRBY 都受到影响,但请阅读完整文档)。
不再需要 SLUGIFY_USES_TEXT_UNIDECODE 或 AIRFLOW_GPL_UNIDECODE¶
不再需要设置其中一个环境变量来避免 GPL 依赖项。如果之前未安装 unidecode
,则 Airflow 现在将始终使用 text-unidecode
。
[celery]
部分中的新 sync_parallelism
配置选项¶
新的 sync_parallelism
配置选项将控制 CeleryExecutor 并行获取 celery 任务状态的进程数量。默认值为 max(1, 内核数 - 1)
将 BashTaskRunner 重命名为 StandardTaskRunner¶
BashTaskRunner 已重命名为 StandardTaskRunner。它是默认的任务运行程序,因此您可能需要更新配置。
task_runner = StandardTaskRunner
修改配置文件发现¶
如果未设置 AIRFLOW_CONFIG
环境变量,并且存在 ~/airflow/airflow.cfg
文件,则 airflow 之前使用 ~/airflow/airflow.cfg
而不是 $AIRFLOW_HOME/airflow.cfg
。现在,airflow 将使用 $AIRFLOW_CONFIG
和 $AIRFLOW_HOME
环境变量而不是检查文件是否存在来发现其配置文件。
访问变量时使用默认值的行为已更改¶
现在可以在获取变量时,使用 None
作为 default_var
参数的默认值,例如:
foo = Variable.get("foo", default_var=None)
if foo is None:
handle_missing_foo()
(注意:已经存在 Variable.setdefault()
,在某些情况下可能会有所帮助。)
如果您之前显式地提供了 None
作为默认值,则此更改会影响行为。如果您的代码期望抛出 KeyError
,则不要传递 default_var
参数。
删除 airflow_home
配置设置¶
之前有两种方法可以指定 Airflow 的 “home” 目录(默认值为 ~/airflow
):AIRFLOW_HOME
环境变量和 [core]
部分中的 airflow_home
配置设置。
如果它们有两个不同的值,则代码库的不同部分最终会得到不同的值。配置设置已被弃用,您应该从配置文件中删除该值,如果您需要为此使用非默认值,则应设置 AIRFLOW_HOME
环境变量。
(由于此设置用于计算要加载的配置文件,因此不可能只保留配置选项)
GCPTransferServiceHook
中两个方法签名的更改¶
GCPTransferServiceHook
类中 create_transfer_job
方法的签名已更改。此更改不会改变方法的行为。
旧签名
def create_transfer_job(self, description, schedule, transfer_spec, project_id=None):
...
新签名
def create_transfer_job(self, body):
...
有必要重写对方法的调用。新的调用如下所示
body = {
"status": "ENABLED",
"projectId": project_id,
"description": description,
"transferSpec": transfer_spec,
"schedule": schedule,
}
gct_hook.create_transfer_job(body)
此更改是由于所有 hook 的统一以及根据 官方建议 对 Google Cloud 进行调整。
GCPTransferServiceHook
中 wait_for_transfer_job
方法的签名已更改。
旧签名
def wait_for_transfer_job(self, job):
...
新签名
def wait_for_transfer_job(self, job, expected_statuses=(GcpTransferOperationStatus.SUCCESS,)):
...
wait_for_transfer_job
的行为已更改
旧的行为
wait_for_transfer_job
将等待指定作业操作中的 SUCCESS 状态。
新的行为
现在您可以指定一个预期状态的数组。wait_for_transfer_job
现在会等待其中任何一个状态。
expected_statuses
的默认值为 SUCCESS,因此此更改向后兼容。
将两个类移动到不同的模块¶
GoogleCloudStorageToGoogleCloudStorageTransferOperator
类已从 airflow.contrib.operators.gcs_to_gcs_transfer_operator
移动到 airflow.contrib.operators.gcp_transfer_operator
S3ToGoogleCloudStorageTransferOperator
类已从 airflow.contrib.operators.s3_to_gcs_transfer_operator
移动到 airflow.contrib.operators.gcp_transfer_operator
进行此更改是为了将所有与 GCS 传输服务相关的操作符保存在一个文件中。
之前的导入将继续工作,直到 Airflow 2.0
修复 SparkSubmitHook 中 –driver-class-path 的拼写错误¶
SparkSubmit Hook 和 Operator 的 driver_classapth
参数在 spark 命令行中生成 --driver-classpath
,但这不是 spark 的有效选项。
该参数已重命名为 driver_class_path
,并且它生成的选项已修复。
新功能¶
[AIRFLOW-4232] 添加
none_skipped
触发规则 (#5032)[AIRFLOW-3971] 添加 Google Cloud Natural Language 操作符 (#4980)
[AIRFLOW-4069] 添加 Opsgenie 警报 Hook 和操作符 (#4903)
[AIRFLOW-3552] 修复 ImapAttachmentToS3Operator 中的编码问题 (#5040)
[AIRFLOW-3552] 添加 ImapAttachmentToS3Operator (#4476)
[AIRFLOW-1526] 添加钉钉 hook 和操作符 (#4895)
[AIRFLOW-3490] 添加 BigQueryHook 的修补表/视图功能 (#4299)
[AIRFLOW-3918] 为 KubernetesExecutor 的 git-sync 添加 SSH 私钥支持 (#4777)
[AIRFLOW-3659] 创建 Google Cloud 传输服务操作符 (#4792)
[AIRFLOW-3939] 添加 Google Cloud 翻译操作符 (#4755)
[AIRFLOW-3541] 将 Avro 逻辑类型转换添加到 bigquery hook (#4553)
[AIRFLOW-4106] 检测池中的饥饿任务 (#4927)
[AIRFLOW-2568] Azure 容器实例操作符 (#4121)
[AIRFLOW-4107] 检测执行器 (#4928)
[AIRFLOW-4033] 记录任务持续时间的统计信息 (#4858)
[AIRFLOW-3892] 创建 Redis 发布订阅传感器 (#4712)
[AIRFLOW-4124] 在 aws_glue_hook 和测试中添加 get_table 和 get_table_location (#4942)
[AIRFLOW-1262] 添加电子邮件配置的缺失文档 (#4557)
[AIRFLOW-3701] 添加 Google Cloud Vision 产品搜索操作符 (#4665)
[AIRFLOW-3766] 添加对 Kubernetes 注释的支持 (#4589)
[AIRFLOW-3741] 向 Oracle hook 添加额外配置 (#4584)
[AIRFLOW-1262] 允许配置电子邮件警报的主题和正文 (#2338)
[AIRFLOW-2985] 用于 S3 对象复制/删除的操作符 (#3823)
[AIRFLOW-2993] s3_to_sftp 和 sftp_to_s3 操作符 (#3828)
[AIRFLOW-3799] 将 compose 方法添加到 GoogleCloudStorageHook (#4641)
[AIRFLOW-3218] 添加对探测整个 DAG 的支持 (#4058)
[AIRFLOW-3315] 添加 ImapAttachmentSensor (#4161)
[AIRFLOW-3556] 添加交叉连接设置依赖关系函数 (#4356)
改进¶
[AIRFLOW-3823] 将分支的下游任务从要跳过的任务中排除 (#4666)
[AIRFLOW-3274] 为 Kubernetes 添加 run_as_user 和 fs_group 选项 (#4648)
[AIRFLOW-4247] 在 DataprocOperators 上模板化 Region (#5046)
[AIRFLOW-4008] 为 Kubernetes Executor 添加 envFrom (#4952)
[AIRFLOW-3947] 为没有 DAG 级别访问权限错误添加 Flash 消息 (#4767)
[AIRFLOW-3287] 将数据库清理代码移到 CoreTest.tearDown() 中 (#4122)
[AIRFLOW-4058] 将模型测试文件命名为自动拾取 (#4901)
[AIRFLOW-3830] 从 /dag_details 中删除 DagBag (#4831)
[AIRFLOW-3596] 清理未定义的模板变量。 (#4401)
[AIRFLOW-3573] 删除 DagStat 表 (#4378)
[AIRFLOW-3623] 修复下载任务日志中的错误 (#5005)
[AIRFLOW-4173] 改进 SchedulerJob.process_file() (#4993)
[AIRFLOW-3540] 如果找到旧的 airflow.cfg 文件,则发出警告 (#5006)
[AIRFLOW-4000] 当没有文件时返回响应 (#4822)
[AIRFLOW-3383] 轮换 fernet 密钥。 (#4225)
[AIRFLOW-3003] 拉取 krb5 镜像而不是构建 (#3844)
[AIRFLOW-3862] 使用 mypy 检查类型。 (#4685)
[AIRFLOW-251] 添加选项 SQL_ALCHEMY_SCHEMA 参数以指定元数据的架构 (#4199)
[AIRFLOW-1814] 模板化 PythonOperator {op_args,op_kwargs} 字段 (#4691)
[AIRFLOW-3730] 日志机制的标准化使用 (#4556)
[AIRFLOW-3770] 验证 CI 上的文档] (#4593)
[AIRFLOW-3866] 在 CI 中静默运行 docker-compose pull (#4688)
[AIRFLOW-3685] 移动许可证标头检查 (#4497)
[AIRFLOW-3670] 将阶段添加到 Travis 构建 (#4477)
[AIRFLOW-3937] KubernetesPodOperator 支持 envFrom configMapRef 和 secretRef (#4772)
[AIRFLOW-3408] 从 Systemd 说明中删除过时的信息 (#4269)
[AIRFLOW-3202] 为 AWS hook/操作符添加缺失的文档 (#4048)
[AIRFLOW-3908] 添加更多 Google Cloud Vision 操作符 (#4791)
[AIRFLOW-2915] 为 GoogleCloudStorageToBigQueryOperator 添加示例 DAG (#3763)
[AIRFLOW-3062] 在集成文档中添加 Qubole (#3946)
[AIRFLOW-3288] 添加 SNS 集成 (#4123)
[AIRFLOW-3148] 删除 RedshiftToS3Transfer 中不必要的参数 “parameters” (#3995)
[AIRFLOW-3049] 为 Mongo hook 添加额外操作 (#3890)
[AIRFLOW-3559] 将缺失的选项添加到 DatadogHook。 (#4362)
[AIRFLOW-1191] 简化 spark submit 命令的覆盖。 (#4360)
[AIRFLOW-3155] 添加在 GCS 操作符中按上次修改时间进行过滤的功能 (#4008)
[AIRFLOW-2864] 修复 SubDagOperator 的文档字符串 (#3712)
[AIRFLOW-4062] 改进有关安装额外软件包命令的文档 (#4966)
[AIRFLOW-3743] 统一计算 AIRFLOW_HOME 的不同方法 (#4705)
[AIRFLOW-4002] 在
airflow test
中出现错误时打开调试器的选项。 (#4828)[AIRFLOW-3997] 扩展 Variable.get,以便在找不到变量时可以返回 None (#4819)
[AIRFLOW-4009] 修复 GCSToBQOperator 中的文档字符串问题 (#4836)
[AIRFLOW-3980] 统一日志记录器 (#4804)
[AIRFLOW-4076] 更正 init_db 中 beeline_default 的端口类型 (#4908)
[AIRFLOW-4046] 为 Sensor 添加 poke_interval 和超时的验证 (#4878)
[AIRFLOW-3744] 放弃使用已过时的方法别名 (#4568)
[AIRFLOW-3865] 添加 API 端点以按 ID 获取 DAG 的 Python 代码 (#4687)
[AIRFLOW-3516] 支持批量创建 k8 工作程序 pod (#4434)
[AIRFLOW-2843] 在 ExternalTaskSensor 中添加标志以检查外部 DAG/任务是否存在 (#4547)
[AIRFLOW-2224] 在 MySqlToGoogleCloudStorageOperator 中添加对 CSV 文件的支持 (#4738)
[AIRFLOW-3895] GoogleCloudStorageHook/Op create_bucket 接受可选的资源参数 (#4717)
[AIRFLOW-3950] 改进 AirflowSecurityManager.update_admin_perm_view (#4774)
[AIRFLOW-4006] 在 AirflowSecurityManager 中更好地使用 Set (#4833)
[AIRFLOW-3917] 在集群外运行时指定备用 kube 配置文件/上下文 (#4859)
[AIRFLOW-3911] 将收集 DAG 解析结果更改为 DEBUG 日志级别 (#4729)
[AIRFLOW-3584] 为索引视图使用 ORM DAG。 (#4390)
[AIRFLOW-2821] 改进文档 “插件” (#3664)
[AIRFLOW-3561] 改进查询 (#4368)
[AIRFLOW-3600] 从触发器中移除 dagbag (#4407)
[AIRFLOW-3713] 更新 GCP 可选 project_id 的文档 (#4541)
[AIRFLOW-2767] 将 gunicorn 升级到 19.5.0,以避免中等严重性的 CVE (#4795)
[AIRFLOW-3795] 现在使用 provide_context 参数 (#4735)
[AIRFLOW-4012] 将 tabulate 升级到 0.8.3 (#4838)
[AIRFLOW-3623] 支持从 UI 按尝试次数下载日志 (#4425)
[AIRFLOW-2715] 启动 Dataflow 模板时使用区域设置 (#4139)
[AIRFLOW-3932] 更新单元测试和安全模式标志的文档。 (#4760)
[AIRFLOW-3932] 可选地跳过 DAG 发现启发式方法。 (#4746)
[AIRFLOW-3258] K8S 执行器环境变量部分。 (#4627)
[AIRFLOW-3931] 启动 dataflow 模板时设置网络和子网 (#4744)
[AIRFLOW-4095] 为 S3CopyObjectOperator 和 S3DeleteObjectsOperator 添加 template_fields (#4920)
[AIRFLOW-2798] 从 models.py 中删除不必要的代码
[AIRFLOW-3731] 将 mysqlclient 约束到 <1.4 (#4558)
[AIRFLOW-3139] 如果有参数,则在 SQL 操作符的 log.info 中包含参数 (#3986)
[AIRFLOW-3174] 改进 SQL 操作符和钩子的文档字符串 (#4043)
[AIRFLOW-3933] 修复各种拼写错误 (#4747)
[AIRFLOW-3905] 允许在 SqlSensor 中使用“参数” (#4723)
[AIRFLOW-2761] 在 Celery 执行器中并行化入队操作 (#4234)
[AIRFLOW-3540] 查找配置文件时遵循环境配置。 (#4340)
[AIRFLOW-2156] 并行化 Celery 执行器任务状态获取 (#3830)
[AIRFLOW-3702] 添加向后运行的回填选项 (#4676)
[AIRFLOW-3821] 将副本逻辑添加到 GCP SQL 示例 DAG (#4662)
[AIRFLOW-3547] 修复 SparkSubmitOperator 中的 Jinja 模板 (#4347)
[AIRFLOW-3647] 将 archives 配置选项添加到 SparkSubmitOperator (#4467)
[AIRFLOW-3802] 更新 HiveServer2Hook 的文档 (#4647)
[AIRFLOW-3817] 将 BranchPythonOperator 返回的任务 ID 更正为与虚拟操作符 ID 匹配 (#4659)
[AIRFLOW-3782] 澄清 default_airflow.cfg 中关于 celery worker_autoscale 的文档 (#4609)
[AIRFLOW-1945] 为 Celery 工作程序添加自动缩放配置 (#3989)
[AIRFLOW-3590] 更改执行器退出状态的日志消息 (#4616)
[AIRFLOW-3591] 修复重新调度的任务的开始日期、结束日期和持续时间 (#4502)
[AIRFLOW-3709] 验证 ExternalTaskSensor 的
allowed_states
(#4536)[AIRFLOW-3522] 添加发送 Slack 附件的支持 (#4332)
[AIRFLOW-3569] 在 DAG 页面中添加“触发 DAG”按钮 (#4373)
[AIRFLOW-3044] Dataflow 操作符接受模板化的 job_name 参数 (#3887)
[AIRFLOW-3023] 修复文档字符串数据类型
[AIRFLOW-2928] 使用 uuid4 而不是 uuid1 (#3779)
[AIRFLOW-2988] 专门为 dataflow 运行 python2 (#3826)
[AIRFLOW-3697] 供应商化 nvd3 和 slugify (#4513)
[AIRFLOW-3692] 删除 ENV 变量以避免 GPL (#4506)
[AIRFLOW-3907] 升级 flask 并设置 cookie 安全标志。 (#4725)
[AIRFLOW-3698] 添加 AWS 连接的文档 (#4514)
[AIRFLOW-3616][AIRFLOW-1215] 添加带下划线的模式别名 (#4523)
[AIRFLOW-3375] 支持使用 BranchPythonOperator 返回多个任务 (#4215)
[AIRFLOW-3742] 修复 AirflowConfigParsxer.getint/boolean 对“fallback”的处理 (#4674)
[AIRFLOW-3742] 遵循 airflow.configuration.get 中的
fallback
参数 (#4567)[AIRFLOW-3789] 修复 flake8 3.7 错误。 (#4617)
[AIRFLOW-3602] 改进 ImapHook 对检索不到附件的处理 (#4475)
[AIRFLOW-3631] 更新 flake8 并修复 lint。 (#4436)
Bug 修复¶
[AIRFLOW-4248] 修复 file_processor_handler 中
FileExistsError
makedirs 竞争条件 (#5047)[AIRFLOW-4240] 更改状态的操作应为 POST 请求 (#5039)
[AIRFLOW-4246] Flask-Oauthlib 需要下游依赖项固定,因为存在重大更改 (#5045)
[AIRFLOW-3887] 将 dagre-d3 降级到 0.4.18 (#4713)
[AIRFLOW-3419] 修复 Python3 上的 S3Hook.select_key (#4970)
[AIRFLOW-4127] 更正 AzureContainerInstanceHook._get_instance_view 的返回值 (#4945)
[AIRFLOW-4172] 修复 Spark Submit 中驱动程序类路径选项的更改 (#4992)
[AIRFLOW-3615] 在连接中保留 UNIX 套接字路径的大小写 (#4591)
[AIRFLOW-3417] ECSOperator:仅针对 FARGATE 启动类型传递 platformVersion (#4256)
[AIRFLOW-3884] 修复文档检查器,不再允许警告并修复当前的... (#4702)
[AIRFLOW-2652] 实现/增强 baseOperator 深拷贝
[AIRFLOW-4001] 更新有关如何运行测试的文档 (#4826)
[AIRFLOW-3699] 加快 Flake8 的速度 (#4515)
[AIRFLOW-4160] 修复 DAG 页面中“触发 DAG”按钮的重定向 (#4982)
[AIRFLOW-3650] 跳过为不稳定的测试在 mysql 上运行 (#4457)
[AIRFLOW-3423] 修复 mongo 钩子以使用匿名访问 (#4258)
[AIRFLOW-3982] 修复 CI 测试中的竞争条件 (#4968)
[AIRFLOW-3982] 根据 DagRun 自己的任务更新 DagRun 状态 (#4808)
[AIRFLOW-3737] Kubernetes 执行器无法处理较长的 DAG/任务名称 (#4636)
[AIRFLOW-3945] 当权限视图未更改时停止插入行 (#4764)
[AIRFLOW-4123] 为 K8 执行器中的 _change_state 方法添加异常处理 (#4941)
[AIRFLOW-3771] 稍微重构 securityManager (#4594)
[AIRFLOW-987] 将 kerberos cli 参数 keytab 和 principal 传递给 kerberos.run() (#4238)
[AIRFLOW-3736] 允许 SqoopOperator.extra_import_options 中使用 int 值 (#4906)
[AIRFLOW-4063] 修复 BigQueryHook 中的异常字符串 [2/2] (#4902)
[AIRFLOW-4063] 修复 BigQueryHook 中的异常字符串 (#4899)
[AIRFLOW-4037] 即使响应检查失败,也在 SimpleHttpOperator 中记录响应
[AIRFLOW-4044]
BigQueryOperator
中query_params
的文档是错误的。 (#4876)[AIRFLOW-4015] 使缺失的 API 端点在经典模式下可用
[AIRFLOW-3153] 将 DAG 处理统计信息发送到 StatsD (#4748)
[AIRFLOW-2966] 在 Kubernetes 执行器中捕获 ApiException (#4209)
[AIRFLOW-4129] 转义生成的工具提示中的 HTML (#4950)
[AIRFLOW-4070] AirflowException -> 对重复的任务依赖关系记录 log.warning (#4904)
[AIRFLOW-4054] 修复 assertEqualIgnoreMultipleSpaces 实用程序并添加测试 (#4886)
[AIRFLOW-3239] 进一步修复测试恢复 (#4074)
[AIRFLOW-4053] 修复 Kube 1.13.0 上的 KubePodOperator Xcom (#4883)
[AIRFLOW-2961] 重构 tests.BackfillJobTest.test_backfill_examples 测试 (#3811)
[AIRFLOW-3606] 修复 Flake8 测试并修复自 Flake8 测试中断以来引入的 Flake8 错误 (#4415)
[AIRFLOW-3543] 修复删除重新调度的任务的 DAG (#4646)
[AIRFLOW-2548] 将插件导入错误输出到 Web UI (#3930)
[AIRFLOW-4019] 修复 AWS Athena Sensor 对象没有属性“mode”的问题 (#4844)
[AIRFLOW-3758] 修复 WasbTaskHandler 中的循环导入 (#4601)
[AIRFLOW-3706] 通过更正 CSS 文件的顺序修复工具提示的最大宽度 (#4947)
[AIRFLOW-4100] 正确转义树/图形视图的数据的 JSON (#4921)
[AIRFLOW-3636] 修复在 #4425 中引入的测试 (#4446)
[AIRFLOW-3977] 在文档中添加触发规则的示例 (#4805)
[AIRFLOW-2511] 修复不正确的失败会话提交处理导致的死锁 (#4769)
[AIRFLOW-3962] 为没有任务的 DAG 的 dag_run 创建添加了优雅的处理 (#4781)
[AIRFLOW-3881] 更正 to_csv 行号 (#4699)
[AIRFLOW-3875] 简化 SlackWebhookHook 代码并更改文档字符串 (#4696)
[AIRFLOW-3733] 当未返回任何行时,不要在 HQL 钩子 to_csv 中引发 NameError (#4560)
[AIRFLOW-3734] 修复当分区为 None 时 hql 不运行的问题 (#4561)
[AIRFLOW-3767] 更正批量插入函数 (#4773)
[AIRFLOW-4087] 删除 basetaskrunner on_finish 中的 sudo (#4916)
[AIRFLOW-3768] 转义分页控件中的搜索参数 (#4911)
[AIRFLOW-4045] 修复基于 FAB 的 UI 中的硬编码 URL (#4914)
[AIRFLOW-3123] 使用堆栈进行 DAG 上下文管理 (#3956)
[AIRFLOW-3060] DAG 上下文管理器在某些情况下无法正确退出
[AIRFLOW-3924] 修复警报电子邮件中的尝试次数 (#4741)
[AIRFLOW-4083] 为链接生成实用程序添加测试 (#4912)
[AIRFLOW-2190] 为找不到的 base_url 发送正确的 HTTP 状态 (#4910)
[AIRFLOW-4015] 将 get_dag_runs GET 端点添加到“经典”API (#4884)
[AIRFLOW-3239] 启用现有的 CI 测试 (#4131)
[AIRFLOW-1390] 将 Alembic 更新到 0.9 (#3935)
[AIRFLOW-3885] 修复调度程序测试中的竞争条件 (#4737)
[AIRFLOW-3885] 将 SchedulerJobTest 套件加速约 10 倍 (#4730)
[AIRFLOW-3780] 修复使用 base_url 时的一些不正确之处 (#4643)
[AIRFLOW-3807] 修复任务的图形视图突出显示 (#4653)
[AIRFLOW-3009] 从 collection.abc 导入 Hashable 以修复 Python 3.7 弃用警告 (#3849)
[AIRFLOW-2231] 修复 relativedelta DAG schedule_interval (#3174)
[AIRFLOW-2641] 修复 MySqlToHiveTransfer 以正确处理 MySQL DECIMAL
[AIRFLOW-3751] 允许 LDAP 身份验证使用格式错误的架构的选项 (#4574)
[AIRFLOW-2888] 为 task_runner 配置更改添加弃用路径 (#4851)
[AIRFLOW-2930] 修复 Celery 执行器调度程序崩溃 (#3784)
[AIRFLOW-2888] 从任务启动中删除 shell=True 和 bash (#3740)
[AIRFLOW-3885] 将回填测试加速约 2.5 倍 (#4731)
[AIRFLOW-3885] 将最慢的单元测试加速约 20 倍 (#4726)
[AIRFLOW-2508] 处理操作符模板化字段中的非字符串类型 (#4292)
[AIRFLOW-3792] 修复 BQ 中 useLegacySQL 和 queryParameters 的验证 (#4626)
[AIRFLOW-3749] 修复使用 RBAC 时编辑 DAG 运行页面 (#4613)
[AIRFLOW-3801] 修复 DagBag 收集 DAG 调用以防止加载示例 (#4677)
[AIRFLOW-3774] 将蓝图注册到 RBAC Web 应用程序 (#4598)
[AIRFLOW-3719] 处理 CloudWatch 日志检索中的 StopIteration (#4516)
[AIRFLOW-3108] 为 MsSqlHook 定义 get_autocommit 方法 (#4525)
[AIRFLOW-3074] 将相关的 ECS 选项添加到 ECS 操作符。 (#3908)
[AIRFLOW-3353] 升级 Redis 客户端 (#4834)
[AIRFLOW-3250] 修复 Redis 钩子未经授权的连接调用 (#4090)
[AIRFLOW-2009] 修复 dataflow 钩子 connection-id (#4563)
[AIRFLOW-2190] 修复返回 404 时的 TypeError (#4596)
[AIRFLOW-2876] 将 Tenacity 更新到 4.12 (#3723)
[AIRFLOW-3923] 将 flask-admin 依赖项更新到 1.5.3,以解决安全漏洞 (#4739)
[AIRFLOW-3683] 修复无效 TriggerRule 的错误消息的格式 (#4490)
[AIRFLOW-2787] 允许 is_backfill 处理 NULL DagRun.run_id (#3629)
[AIRFLOW-3639] 修复 Jenkins 操作符中的请求创建 (#4450)
[AIRFLOW-3779] 在不需要时不要安装 enum34 向后移植 (#4620)
[AIRFLOW-3079] 改进迁移脚本以支持 MSSQL Server (#3964)
[AIRFLOW-2735] 使用相等而不是标识检查来检测 AWS Batch 失败 []
[AIRFLOW-2706] AWS Batch 操作符应使用顶级作业状态来确定状态
[AIRFLOW-XXX] 修复 http_operator.py 中的拼写错误
[AIRFLOW-XXX] 解决 lodash 安全警告 (#4820)
[AIRFLOW-XXX] 固定 celery 引入的 tornado 版本。 (#4815)
[AIRFLOW-XXX] 将 FAB 升级到 1.12.3 (#4694)
[AIRFLOW-XXX] 固定 pinodb 依赖项 (#4704)
[AIRFLOW-XXX] 固定测试中 Pip 的版本,以解决 pypa/pip#6163 (#4576)
[AIRFLOW-XXX] 修复 spark submit 钩子 KeyError (#4578)
[AIRFLOW-XXX] 由于重大更改,固定 psycopg2 (#5036)
[AIRFLOW-XXX] 固定 Sendgrid 依赖项。 (#5031)
[AIRFLOW-XXX] 修复不稳定的测试 - test_execution_unlimited_parallelism (#4988)
其他/内部¶
[AIRFLOW-4144] 添加 is_delete_operator_pod 的描述 (#4943)
[AIRFLOW-3476][AIRFLOW-3477] 将 Kube 类移出 models.py (#4443)
[AIRFLOW-3464] 将 SkipMixin 移出 models.py (#4386)
[AIRFLOW-3463] 将 Log 移出 models.py (#4639)
[AIRFLOW-3458] 移动连接测试 (#4680)
[AIRFLOW-3461] 将 TaskFail 移出 models.py (#4630)
[AIRFLOW-3462] 将 TaskReschedule 移出 models.py (#4618)
[AIRFLOW-3474] 将 SlaMiss 移出 models.py (#4608)
[AIRFLOW-3475] 将 ImportError 移出 models.py (#4383)
[AIRFLOW-3459] 将 DagPickle 移动到单独的文件中 (#4374)
[AIRFLOW-3925] 不要在预测试中拉取 docker 镜像 (#4740)
[AIRFLOW-4154] 修正 jobs.py 中的字符串格式 (#4972)
[AIRFLOW-3458] 移动 models.Connection 的弃用路径
[AIRFLOW-3458] 将 models.Connection 移动到单独的文件中 (#4335)
[AIRFLOW-XXX] 删除 nose 忽略的旧的/非测试文件 (#4930)
仅文档更改¶
[AIRFLOW-3996] 添加查看源代码链接到包含的片段
[AIRFLOW-3811] 在文档中自动生成 API 参考 (#4788)
[AIRFLOW-3810] 删除重复的 autoclass 指令 (#4656)
[AIRFLOW-XXX] 提及必须安装 StatsD 才能收集指标 (#5038)
[AIRFLOW-XXX] 向 cli 添加内容 (#4825)
[AIRFLOW-XXX] 修复 CI 上的 check docs 失败 (#4998)
[AIRFLOW-XXX] 修复文档语法错误 (#4789)
[AIRFLOW-XXX] 文档渲染改进 (#4684)
[AIRFLOW-XXX] 在文档的更改日志页面上自动链接 Jira/GH (#4587)
[AIRFLOW-XXX] 在额外的软件包文档中提及 Oracle (#4987)
[AIRFLOW-XXX] 删除已弃用的 sudo 选项;在 Travis 上使用默认的 docker compose。 (#4732)
[AIRFLOW-XXX] 更新 kubernetes.rst 文档 (#3875)
[AIRFLOW-XXX] 改进文档中格式化内容 (#4835)
[AIRFLOW-XXX] 将 Daniel 添加到提交者列表 (#4961)
[AIRFLOW-XXX] 将 Xiaodong Deng 添加到提交者列表
[AIRFLOW-XXX] 添加历史记录,成为 ASF 顶级项目 (#4757)
[AIRFLOW-XXX] 将示例从 integration.rst 中移出 (#4672)
[AIRFLOW-XXX] 将反向代理信息提取到单独的文件中 (#4657)
[AIRFLOW-XXX] 减少文档中的警告数量 (#4585)
[AIRFLOW-XXX] 修复 GCS Operator 文档字符串 (#4054)
[AIRFLOW-XXX] 修复 Hooks、Sensors 和 Operators 中的文档字符串 (#4137)
[AIRFLOW-XXX] 将 operators 指南拆分为多个文件 (#4814)
[AIRFLOW-XXX] 将连接指南拆分为多个文件 (#4824)
[AIRFLOW-XXX] 从构建文档中删除几乎所有警告 (#4588)
[AIRFLOW-XXX] 在 operator 和集成之间的文档中添加反向引用 (#4671)
[AIRFLOW-XXX] 改进类链接 (#4655)
[AIRFLOW-XXX] 构建文档时模拟可选模块 (#4586)
[AIRFLOW-XXX] 更新插件宏文档 (#4971)
[AIRFLOW-XXX] 在 GCS to BQ Operator 中为 “autodetect” 添加缺失的文档字符串 (#4979)
[AIRFLOW-XXX] 向文档添加缺失的 GCP operators (#4260)
[AIRFLOW-XXX] 修复文档中的问题 (#3756)
[AIRFLOW-XXX] 在用户定义的宏中添加提示 (#4885)
[AIRFLOW-XXX] 修正 Scheduler 文档中的 schedule_interval (#4157)
[AIRFLOW-XXX] 改进 airflow-jira 脚本,使 RelManager 的工作更容易 (#4857)
[AIRFLOW-XXX] 向文档添加缺失的类引用 (#4644)
[AIRFLOW-XXX] 修复错别字 (#4564)
[AIRFLOW-XXX] 添加有关 fab 安全性的文档 (#4595)
[AIRFLOW-XXX] 加快 DagBagTest 用例的速度 (#3974)
Airflow 1.10.2 (2019-01-19)¶
重大更改¶
新的 dag_processor_manager_log_location
配置选项¶
DAG 解析管理器日志现在默认将记录到一个文件中,其位置由核心部分中新的 dag_processor_manager_log_location
配置选项控制。
新 RBAC UI 的 DAG 级访问控制¶
扩展并增强新的 Airflow RBAC UI 以支持 DAG 级别的 ACL。现在,每个 dag 都有两个权限(一个用于写入,一个用于读取)关联(‘can_dag_edit’,‘can_dag_read’)。管理员将创建新角色,将 dag 权限与目标 dag 关联,并将该角色分配给用户。该用户只能访问/查看他拥有权限的 UI 上的特定 dag。如果新角色想要访问所有 dag,管理员可以将人工视图(all_dags
)上的 dag 权限与该角色关联。
我们还提供了一个新的 cli 命令(sync_perm
)以允许管理员自动同步权限。
修改 ts_nodash
宏¶
ts_nodash
以前包含时区信息以及执行日期。例如:20150101T000000+0000
。这对于文件名或文件夹名不友好,这是 ts_nodash
的流行用例。因此,此行为已更改,并且使用 ts_nodash
将不再包含时区信息,从而恢复此宏的 1.10 之前的行为。并且添加了一个新的宏 ts_nodash_with_tz
,可用于获取包含执行日期和时区信息的字符串,且没有破折号。
示例
ts_nodash
:20150101T000000
ts_nodash_with_tz
:20150101T000000+0000
手动触发运行的 next_ds/prev_ds 语义已更改¶
next_ds/prev_ds 现在映射到 execution_date,而不是在 UI 中触发的 DAG 的下一个/上一个与计划对齐的执行日期。
用户模型更改¶
此补丁将 User.superuser
字段从硬编码的布尔值更改为 Boolean()
数据库列。User.superuser
将默认为 False
,这意味着必须手动将此权限授予任何可能需要它的用户。
例如,打开 Python shell 并
from airflow import models, settings
session = settings.Session()
users = session.query(models.User).all() # [admin, regular_user]
users[1].superuser # False
admin = users[0]
admin.superuser = True
session.add(admin)
session.commit()
自定义身份验证后端接口更改¶
我们已更新我们依赖的 flask-login 版本,因此任何自定义身份验证后端可能都需要进行一些小更改:is_active
、is_authenticated
和 is_anonymous
现在应该是属性。这意味着如果您以前在用户类中拥有此内容
def is_active(self):
return self.active
那么你需要像这样更改它
@property
def is_active(self):
return self.active
支持 GoogleCloudStorageToBigQueryOperator 的自动检测模式¶
GoogleCloudStorageToBigQueryOperator 现在支持在将数据加载到 BigQuery 时进行模式自动检测。不幸的是,可能需要进行更改。
如果 BigQuery 表是在 airflow 外部创建的,并且该模式未在任务中定义,则可以使用多种选项
定义 schema_fields
gcs_to_bq.GoogleCloudStorageToBigQueryOperator(
# ...
schema_fields={...}
)
或定义 schema_object
gcs_to_bq.GoogleCloudStorageToBigQueryOperator(
# ...
schema_object="path/to/schema/object"
)
或启用模式的自动检测
gcs_to_bq.GoogleCloudStorageToBigQueryOperator(
# ...
autodetect=True
)
新功能¶
[AIRFLOW-2658] 添加 GCP 特定的 k8s pod operator (#3532)
[AIRFLOW-2440] Google Cloud SQL 导入/导出 operator (#4251)
[AIRFLOW-3212] 添加 AwsGlueCatalogPartitionSensor (#4112)
[AIRFLOW-2750] 添加用于删除和列出用户的子命令
[AIRFLOW-3480] 添加 GCP Spanner 数据库 Operators (#4353)
[AIRFLOW-3560] 添加 DayOfWeek Sensor (#4363)
[AIRFLOW-3371] BigQueryHook 创建视图的能力 (#4213)
[AIRFLOW-3332] 添加允许将行插入 BQ 表的方法 (#4179)
[AIRFLOW-3055] 向 bigquery_hook 添加 get_dataset 和 get_datasets_list (#3894)
[AIRFLOW-2887] 添加 BigQueryCreateEmptyDatasetOperator 并向 bigquery_hook 添加 create_empty_dataset (#3876)
[AIRFLOW-2758] 为 MongoDB 添加传感器
[AIRFLOW-2640] 添加 Cassandra 表传感器
[AIRFLOW-3398] Google Cloud Spanner 实例数据库查询 operator (#4314)
[AIRFLOW-3310] Google Cloud Spanner 部署/删除 operators (#4286)
[AIRFLOW-3406] 实现 Azure CosmosDB operator (#4265)
[AIRFLOW-3434] 允许在 SFTPOperator 中创建中间目录 (#4270)
[AIRFLOW-3345] 为 ACL 添加 Google Cloud Storage (GCS) operators (#4192)
[AIRFLOW-3266] 添加 AWS Athena Hook 和 Operator (#4111)
[AIRFLOW-3346] 为 GCP 传输服务添加 hook 和 operator (#4189)
[AIRFLOW-2983] 添加 prev_ds_nodash 和 next_ds_nodash 宏 (#3821)
[AIRFLOW-3403] 添加 AWS Athena Sensor (#4244)
[AIRFLOW-3323] 支持 Airflow Flower 的 HTTP 基本身份验证 (#4166)
[AIRFLOW-3410] 添加允许 SSH Op 的主机密钥更改的功能 (#4249)
[AIRFLOW-3275] 添加 Google Cloud SQL 查询 operator (#4170)
[AIRFLOW-2691] 通过 npm 管理 JS 依赖项
[AIRFLOW-2795] Oracle 到 Oracle 传输 Operator (#3639)
[AIRFLOW-2596] 添加 Oracle 到 Azure Datalake 传输 Operator
[AIRFLOW-3220] 为 GCE 添加实例组管理器 Operators (#4167)
[AIRFLOW-2882] 添加使用 JSON 导入和导出池的 cli
[AIRFLOW-2965] 用于显示下一个执行时间日期的 CLI 工具 (#3834)
[AIRFLOW-2874] 启用 FAB 的主题支持 (#3719)
[AIRFLOW-3336] 为 0 个上游失败添加新的 TriggerRule (#4182)
改进¶
[AIRFLOW-3680] 所有 GCP 相关 operator 的测试中的一致性更新 (#4493)
[AIRFLOW-3675] 为 google api 使用 googleapiclient (#4484)
[AIRFLOW-3205] 支持上传到 GCS 的多部分上传 (#4084)
[AIRFLOW-2826] 添加 GoogleCloudKMSHook (#3677)
[AIRFLOW-3676] 向 CloudSQL 导出/导入示例添加所需权限 (#4489)
[AIRFLOW-3679] 向文档添加 Google Cloud Base Hook (#4487)
[AIRFLOW-3594] 统一不同的许可证标头
[AIRFLOW-3197] 在示例 DAG 中删除无效参数 KeepJobFlowAliveWhenNoSteps (#4404)
[AIRFLOW-3504] 改进“/health”端点的功能 (#4309)
[AIRFLOW-3103][AIRFLOW-3147] 更新 flask-appbuilder (#3937)
[AIRFLOW-3168] 在 CI 中更具弹性的数据库使用 (#4014)
[AIRFLOW-3076] 删除 MySQL 测试数据的预加载 (#3911)
[AIRFLOW-3035] 允许在 dataproc ops 中自定义 ‘job_error_states’ (#3884)
[AIRFLOW-3246] 使 airflow.hooks.hive_hooks 中的 hmsclient 可选 (#4080)
[AIRFLOW-3059] 记录从 Postgres 读取的行数 (#3905)
[AIRFLOW-2463] 使任务实例上下文可用于 hive 查询
[AIRFLOW-3190] 使 flake8 兼容 (#4035)
[AIRFLOW-1998] 为 jobs/run-now 实施 DatabricksRunNowOperator… (#3813)
[AIRFLOW-2267] Airflow DAG 级别访问 (#3197)
[AIRFLOW-2359] 在树视图中为 DagRun 和任务添加 set failed (#3255)
[AIRFLOW-3008] 将 Kubernetes 示例 DAG 移至 contrib
[AIRFLOW-3402] 支持全局 k8s affinity 和 toleration 配置 (#4247)
[AIRFLOW-3610] 为 EMR 作业流创建添加 region 参数 (#4418)
[AIRFLOW-3531] 修复 GCS 到 GCS 传输 Hook 的测试 (#4452)
[AIRFLOW-3531] 添加 gcs 到 gcs 传输 operator。 (#4331)
[AIRFLOW-3034] 自述文件更新:添加 Slack 和 Twitter,删除 Gitter
[AIRFLOW-3028] 更新 Readme.md 中的文本和图像
[AIRFLOW-208] 添加徽章以显示支持的 Python 版本 (#3839)
[AIRFLOW-2238] 更新 PR 工具以直接推送到 GitHub
[AIRFLOW-2238] dev/airflow-pr 上的 Flake8 修复
[AIRFLOW-2238] 更新 PR 工具以删除过时信息 (#3978)
[AIRFLOW-3005] 将 ‘Airbnb Airflow’ 替换为 ‘Apache Airflow’ (#3845)
[AIRFLOW-3150] 使 TriggerDagRunOperator 中的 execution_date 可模板化 (#4359)
[AIRFLOW-1196][AIRFLOW-2399] 在 TriggerDagRunOperator 中添加可模板化的字段 (#4228)
[AIRFLOW-3340] 连接表单中的占位符支持 (#4185)
[AIRFLOW-3446] 添加 Google Cloud BigTable 操作符 (#4354)
[AIRFLOW-1921] 添加对 https 和用户身份验证的支持 (#2879)
[AIRFLOW-2770] 将
dags_in_image
配置值读取为布尔值 (#4319)[AIRFLOW-3022] 将卷挂载添加到 KubernetesExecutorConfig (#3855)
[AIRFLOW-2917] 仅在需要时设置 AIRFLOW__CORE__SQL_ALCHEMY_CONN (#3766)
[AIRFLOW-2712] 将注解传递给 KubernetesExecutorConfig
[AIRFLOW-461] 在 BigQuery run_load 中支持自动检测模式 (#3880)
[AIRFLOW-2997] 支持 bigquery 中的集群字段 (#3838)
[AIRFLOW-2916] 为 AwsHook() & S3 传感器/操作符添加参数
verify
(#3764)[AIRFLOW-491] 添加将额外 API 配置传递给 BQ Hook 的功能 (#3733)
[AIRFLOW-2889] 修复 github.com/client9/misspell 检测到的拼写错误 (#3732)
[AIRFLOW-850] 添加 PythonSensor (#4349)
[AIRFLOW-2747] 显式重新调度传感器 (#3596)
[AIRFLOW-3392] 在 sla_miss 表中添加 dag_id 的索引 (#4235)
[AIRFLOW-3001] 向 taskinstance 添加索引 ‘ti_dag_date’ (#3885)
[AIRFLOW-2861] 在日志表中添加索引 (#3709)
[AIRFLOW-3518] 修复 Tasks 的 topological_sort 性能问题 (#4322)
[AIRFLOW-3521] 在
airflow-jira compare
脚本中获取 50 个以上的项目 (#4300)[AIRFLOW-1919] 添加选项以查询给定 DAG ID 的 DAG 运行
[AIRFLOW-3444] 显式设置传输操作符的描述。 (#4279)
[AIRFLOW-3411] 添加 OpenFaaS 钩子 (#4267)
[AIRFLOW-2785] 将上下文管理器入口点添加到 mongoHook
[AIRFLOW-2524] 将 SageMaker 文档添加到 AWS 集成部分 (#4278)
[AIRFLOW-3479] 在 DAG 删除时保持日志表中的记录 (#4287)
[AIRFLOW-2948] 参数检查和更好的文档 - SSHOperator & SFTPOperator (#3793)
[AIRFLOW-2245] 添加 SSH/SFTP 操作符的 remote_host 作为模板字段 (#3765)
[AIRFLOW-2670] 更新 SSH 操作符的 Hook 以遵循超时 (#3666)
[AIRFLOW-3380] 添加指标文档 (#4219)
[AIRFLOW-3361] 从 BaseOperator 中记录 PendingDeprecationWarning 中的 task_id (#4030)
[AIRFLOW-3213] 创建 ADLS 到 GCS 操作符 (#4134)
[AIRFLOW-3395] 将 REST API 端点添加到文档 (#4236)
[AIRFLOW-3294] 更新连接表单和集成文档 (#4129)
[AIRFLOW-3236] 创建 AzureDataLakeStorageListOperator (#4094)
[AIRFLOW-3062] 在集成文档中添加 Qubole (#3946)
[AIRFLOW-3306] 禁用 flask-sqlalchemy 修改跟踪。 (#4146)
[AIRFLOW-2867] 重构代码以符合标准 (#3714)
[AIRFLOW-2753] 添加 dataproc_job_id 实例变量,持有实际 DP jobId
[AIRFLOW-3132] 为 DockerOperator 启用指定 auto_remove 选项 (#3977)
[AIRFLOW-2731] 将 psutil 限制提高到 <6.0.0
[AIRFLOW-3384] 允许更高版本的 Sqlalchemy 和 Jinja2 (#4227)
[Airflow-2760] 将 DAG 解析循环与调度程序循环分离 (#3873)
[AIRFLOW-3004] 添加禁用调度程序 cron 的配置 (#3899)
[AIRFLOW-3175] 修复 airflow/jobs.py 中的文档字符串格式 (#4025)
[AIRFLOW-3589] 在所有视图中可视化重新调度状态 (#4408)
[AIRFLOW-2698] 简化 Kerberos 代码 (#3563)
[AIRFLOW-2499] Docker 化 CI 管道 (#3393)
[AIRFLOW-3432] 为 “在 UI 中删除 DAG” 功能添加测试 (#4266)
[AIRFLOW-3301] 更新 DockerOperator CI 测试以进行 PR #3977 (#4138)
[AIRFLOW-3478] 确保会话已关闭
[AIRFLOW-3687] 添加缺失的 @apply_defaults 装饰器 (#4498)
[AIRFLOW-3691] 将通知更新为 2019 (#4503)
[AIRFLOW-3689] 更新在 RBAC UI 中删除 DAG 时的弹出消息 (#4505)
[AIRFLOW-2801] 在 CI 上跳过 PostgreSQL 中的 test_mark_success_no_kill (#3642)
[AIRFLOW-3693] 用 psycopg2 替换 psycopg2-binary (#4508)
[AIRFLOW-3700] 更改 “requests” 的最低允许版本 (#4517)
[AIRFLOW-3704] 当 Redis 用作 CeleryExecutor 的代理时支持 SSL 保护 (#4521)
[AIRFLOW-3681] 所有 GCP 操作符现在都具有可选的 GCP 项目 ID (#4500)
[Airflow 2782] 将 Dagre D3 版本升级到最新的可能版本
[Airflow 2783] 为 JS 代码检查实施 eslint (#3641)
[AIRFLOW-2805] 在 UI 上显示多个时区 (#3687)
[AIRFLOW-3302] 小的 CSS 修复 (#4140)
[Airflow-2766] 尊重跨选项卡的共享日期时间
[AIRFLOW-2776] 压缩树形视图 JSON
[AIRFLOW-2407] 使用功能检测进行 reload() (#3298)
[AIRFLOW-3452] 删除了未使用的/危险的 display-none (#4295)
[AIRFLOW-3348] 在 dag 刷新时更新运行统计信息 (#4197)
[AIRFLOW-3125] 监视任务实例的创建速率 (#3966)
错误修复¶
[AIRFLOW-3191] 修复在创建 dagrun 时无法指定 execution_date 的问题 (#4037)
[AIRFLOW-3657] 修复 zendesk 集成 (#4466)
[AIRFLOW-3605] 从 entry_points 加载插件 (#4412)
[AIRFLOW-3646] 将 plugins_manager.py 重命名为 test_xx 以触发测试 (#4464)
[AIRFLOW-3655] 转义模型视图中生成的链接 (#4463)
[AIRFLOW-3662] 添加 Enum 的依赖项 (#4468)
[AIRFLOW-3630] 清理 GCP Cloud SQL 连接 (#4451)
[AIRFLOW-1837] 尊重与 dag 的 start_date 不同的任务 start_date (#4010)
[AIRFLOW-2829] 改进 minikube 的 CI 脚本
[AIRFLOW-3519] 修复示例 http 操作符 (#4455)
[AIRFLOW-2811] 修复 scheduler_ops_metrics.py 以使其工作 (#3653)
[AIRFLOW-2751] 在 hive to druid 操作符中添加作业属性更新。
[AIRFLOW-2918] 删除未使用的导入
[AIRFLOW-2918] 修复 Flake8 违规 (#3931)
[AIRFLOW-2771] 将 except 类型添加到 broad S3Hook try catch 子句
[AIRFLOW-2918] 修复 Flake8 违规 (#3772)
[AIRFLOW-2099] 优雅地处理 getsource() 调用
[AIRFLOW-3397] 修复 rbac AirflowSecurityManager 中的完整性错误 (#4305)
[AIRFLOW-3281] 修复使用 git-sync 的 Kubernetes 操作符 (#3770)
[AIRFLOW-2615] 将 DAG 解析限制为仅一次
[AIRFLOW-2952] 修复 Kubernetes CI (#3922)
[AIRFLOW-2933] 在 Docker-CI 构建上启用 Codecov (#3780)
[AIRFLOW-2082] 解决将 password_auth 添加到 api 作为身份验证方法的错误 (#4343)
[AIRFLOW-3612] 删除 incubation/incubator 的提及 (#4419)
[AIRFLOW-3581] 修复手动运行的 next_ds/prev_ds 语义 (#4385)
[AIRFLOW-3527] 更新 Cloud SQL Proxy 以使 UNIX 套接字的路径更短 (#4350)
[AIRFLOW-3316] 对于 gcs_to_bq:添加 schema_fields 变量的缺失初始化 (#4430)
[AIRFLOW-3583] 修复 AirflowException 导入 (#4389)
[AIRFLOW-3578] 修复 BigQueryOperator 的类型错误 (#4384)
[AIRFLOW-2755] 添加
kubernetes.worker_dags_folder
配置 (#3612)[AIRFLOW-2655] 修复 Kubernetes 工作程序默认配置的不一致性
[AIRFLOW-2645][AIRFLOW-2617] 添加 worker_container_image_pull_policy
[AIRFLOW-2661] 修复配置 dags_volume_subpath 和 logs_volume_subpath
[AIRFLOW-3550] 标准化 GKE 钩子 (#4364)
[AIRFLOW-2863] 修复 GKEClusterHook 捕获错误异常的问题 (#3711)
[AIRFLOW-2939][AIRFLOW-3568] 修复 GCSToS3Op 和 S3ToGCSOp 中的 TypeError (#4371)
[AIRFLOW-3327] 在 BigQueryHook 中添加对 location 的支持 (#4324)
[AIRFLOW-3438] 修复 BigQuery Hook & BigQueryOperator 中的默认值 (…)
[AIRFLOW-3355] 修复 BigQueryCursor.execute 以使其与 Python3 一起使用 (#4198)
[AIRFLOW-3447] 为 ts_nodash Macro 添加 2 个选项 (#4323)
[AIRFLOW-1552] Airflow Filter_by_owner 在使用 password_auth 时不起作用 (#4276)
[AIRFLOW-3484] 修复 k8s 执行器中的过度日志记录 (#4296)
[AIRFLOW-3309] 添加 MongoDB 连接 (#4154)
[AIRFLOW-3414] 修复 DagFileProcessorAgent 中的 reload_module (#4253)
[AIRFLOW-1252] 在调用触发 dag 时,API 接受 JSON (#2334)
[AIRFLOW-3425] 修复在 hook 中设置默认范围 (#4261)
[AIRFLOW-3416] 修复 Python 3 与 CloudSqlQueryOperator 的兼容性 (#4254)
[AIRFLOW-3263] 当 “run” 杀死已杀死的作业时忽略异常 (#4108)
[AIRFLOW-3264] 解析连接的 URI 时进行 URL 解码 (#4109)
[AIRFLOW-3365][AIRFLOW-3366] 允许使用环境变量设置 celery_broker_transport_options (#4211)
[AIRFLOW-2642] 修复错误的 git-sync initcontainer env GIT_SYNC_ROOT 值 (#3519)
[AIRFLOW-3353] 固定 redis 版本 (#4195)
[AIRFLOW-3251] KubernetesPodOperator 现在在创建 Pod 时使用 ‘image_pull_secrets’ 参数 (#4188)
[AIRFLOW-2705] 将类级别的 moto 装饰器移动到方法级别
[AIRFLOW-3233] 修复 UI 中 DAG 的删除 (#4069)
[AIRFLOW-2908] 允许使用 KubernetesExecutor 进行重试。 (#3758)
[AIRFLOW-1561] 修复调度程序以选择示例 DAG 而无需其他 DAG (#2635)
[AIRFLOW-3352] 修复在 RBAC UI 上不遵守 expose_config (#4194)
[AIRFLOW-3592] 修复任务处于重新调度状态时的日志 (#4492)
[AIRFLOW-3634] 修复 GCP Spanner 测试 (#4440)
[AIRFLOW-XXX] 修复 PythonVirtualenvOperator 测试 (#3968)
[AIRFLOW-3239] 修复/改进 api/common/experimental/ 的测试 (#4255)
[AIRFLOW-2951] 当状态更改时更新 dag_run 表 end_date (#3798)
[AIRFLOW-2756] 修复设置 DAG 运行状态工作流程中的错误 (#3606)
[AIRFLOW-3690] 修复为手动触发的 DAG 设置任务状态的错误 (#4504)
[AIRFLOW-3319] KubernetsExecutor:如果稍后获取,则需要在标签中使用 try_number (#4163)
[AIRFLOW-3724] 修复 RBAC UI 中图形视图上的损坏的刷新按钮
[AIRFLOW-3732] 修复尝试在 RBAC UI 中编辑连接时的问题
[AIRFLOW-2866] 修复使用 RBAC UI 时缺少 CSRF 令牌头的问题 (#3804)
[AIRFLOW-3259] 修复显示图表时的内部服务器错误 (#4114)
[AIRFLOW-3271] 修复通过 UI 修改的 RBAC 权限的持久性问题 (#4118)
[AIRFLOW-3141] 处理缺少 dag 的持续时间视图 (#3984)
[AIRFLOW-2766] 尊重跨选项卡的共享日期时间
[AIRFLOW-1413] 修复 FTPSensor 在出现意外错误消息时失败的问题 (#2450)
[AIRFLOW-3378] KubernetesPodOperator 在超时失败时不会删除 (#4218)
[AIRFLOW-3245] 修复 resolve_template_files 中的列表处理 (#4086)
[AIRFLOW-2703] 捕获来自调度程序心跳的瞬态 DB 异常,避免其崩溃 (#3650)
[AIRFLOW-1298] 使用 clean cli 清除 UPSTREAM_FAILED (#3886)
仅文档更改¶
[AIRFLOW-XXX] GCP 操作符文档说明 (#4273)
[AIRFLOW-XXX] 文档:修复 GCS 传输操作符的路径 (#4479)
[AIRFLOW-XXX] 向文档添加缺失的 GCP operators (#4260)
[AIRFLOW-XXX] 修复操作符的文档字符串 (#3820)
[AIRFLOW-XXX] 修复 example_python_operator.py 中不一致的注释 (#4337)
[AIRFLOW-XXX] 修复 SFTPOperator 示例中不正确的参数 (#4344)
[AIRFLOW-XXX] 添加缺失的远程日志记录字段 (#4333)
[AIRFLOW-XXX] 修改模板变量文档 (#4172)
[AIRFLOW-XXX] 修复 gcs_to_bq 的文档字符串中的拼写错误 (#3833)
[AIRFLOW-XXX] 修复 SageMaker 操作符/钩子文档的显示 (#4263)
[AIRFLOW-XXX] Airflow flower 的更好说明 (#4214)
[AIRFLOW-XXX] 使 pip 安装命令保持一致 (#3752)
[AIRFLOW-XXX] 将
BigQueryGetDataOperator
添加到集成文档 (#4063)[AIRFLOW-XXX] 不要用“错误的 cron 表达式”消息刷屏测试日志 (#3973)
[AIRFLOW-XXX] 根据最新的 TLP 讨论更新提交者列表 (#4427)
[AIRFLOW-XXX] 修复贡献指南中的错误陈述 (#4104)
[AIRFLOW-XXX] 修复 CONTRIBUTING.md 中的断开链接
[AIRFLOW-XXX] 更新贡献指南 - Git Hooks (#4120)
[AIRFLOW-3426] 更正 Python 版本文档参考 (#4259)
[AIRFLOW-2663] 添加安装 SSH 依赖项的说明
[AIRFLOW-XXX] 清理安装额外软件包表 (#3750)
[AIRFLOW-XXX] 删除 Kerberos 中多余的空格 (#3866)
[AIRFLOW-3086] 将 google auth 的 extras 组添加到 setup.py (#3917)
[AIRFLOW-XXX] 在额外软件包文档中添加 Kubernetes 依赖项 (#4281)
[AIRFLOW-3696] 将版本信息添加到 Airflow 文档 (#4512)
[AIRFLOW-XXX] 更正传感器异常中的拼写错误 (#4545)
[AIRFLOW-XXX] 修复配置中的拼写错误 (#4544)
[AIRFLOW-XXX] 修复 BashOperator 文档字符串 (#4052)
[AIRFLOW-3018] 修复文档中的小问题
[AIRFLOW-XXX] 修复 Azure Cosmos Operator 的小问题 (#4289)
[AIRFLOW-3382] 修复 DatastoreHook 中不正确的文档字符串 (#4222)
[AIRFLOW-XXX] 修复复制粘贴错误 (#4212)
[AIRFLOW-3260] 更正 BigQuery 中误导性的错误 (#4098)
[AIRFLOW-XXX] 修复 SFTPOperator 文档字符串中的拼写错误 (#4016)
[AIRFLOW-XXX] 修复文档中的问题 (#3998)
[AIRFLOW-XXX] 修复 S3_hook 中未记录的参数
[AIRFLOW-XXX] 修复 SlackWebhookOperator execute 方法注释 (#3963)
[AIRFLOW-3070] 改进 Web UI 身份验证相关文档 (#3863)
Airflow 1.10.1 (2018-11-13)¶
重大变更¶
min_file_parsing_loop_time 配置选项暂时禁用¶
由于某些错误,scheduler.min_file_parsing_loop_time 配置选项已暂时删除。
StatsD 指标¶
scheduler_heartbeat
指标已从仪表更改为计数器。调度程序的每个循环将计数器加 1。这提供了更高的可见性,并允许使用 StatsD Exporter 更好地与 Prometheus 集成。可以通过绘制图表并使用计数器变化率发出警报来确定调度程序的活动状态。如果调度程序关闭,则速率将降至 0。
EMRHook 现在将连接的所有额外信息传递给 CreateJobFlow API¶
EMRHook.create_job_flow 已更改为将所有键传递给 create_job_flow API,而不仅仅是特定的已知键,以提高灵活性。
但是,在此版本之前,“emr_default”示例连接创建的配置无效,因此创建 EMR 集群可能会失败,直到您的连接更新。(Ec2KeyName、Ec2SubnetId、TerminationProtection 和 KeepJobFlowAliveWhenNoSteps 都是顶级键,当它们应该位于“Instances”字典中时)
LDAP 身份验证后端现在需要 TLS¶
不再支持通过纯文本连接到 LDAP 服务器。LDAP 服务器提供的证书必须由受信任的证书签名,或者您必须在配置文件中的 [ldap]
下提供 cacert
选项。
如果想要在没有 TLS 的情况下使用 LDAP 身份验证后端,则必须基于 https://github.com/apache/airflow/blob/1.10.0/airflow/contrib/auth/backends/ldap_auth.py 创建自定义身份验证后端
新功能¶
[AIRFLOW-2524] Airflow 与 AWS Sagemaker 的集成
[AIRFLOW-2657] 添加从 Web UI 删除 DAG 的功能
[AIRFLOW-2780] 添加 IMAP Hook 以与邮件服务器交互
[AIRFLOW-2794] 添加对 Azure blob 的删除支持
[AIRFLOW-2912] 添加 Google Cloud Functions 的运算符
[AIRFLOW-2974] 添加 Databricks Hook 的启动/重启/终止方法
[AIRFLOW-2989] 没有参数来更改 DataprocClusterCreateOperator 的 bootDiskType
[AIRFLOW-3078] Google Compute Engine 的基本运算符
[AIRFLOW-3147] 更新 Flask-AppBuilder 版本
[AIRFLOW-3231] Google Cloud SQL 的基本运算符(部署/修补/删除)
[AIRFLOW-3276] Google Cloud SQL 数据库创建/修补/删除运算符
改进¶
[AIRFLOW-393] 添加 FTP 下载的进度回调
[AIRFLOW-520] 在网页上显示 Airflow 版本
[AIRFLOW-843] 异常现在在 on_failure_callback 期间在上下文中可用
[AIRFLOW-2476] 将 tabulate 依赖项更新到 v0.8.2
[AIRFLOW-2592] 提升 Bleach 依赖项
[AIRFLOW-2622] 向 SFTPOperator 添加 “confirm=False” 选项
[AIRFLOW-2662] 支持 kubernetes 执行器/运算符的亲和性和 nodeSelector 策略
[AIRFLOW-2709] 改进 Databricks hook 中的错误处理
[AIRFLOW-2723] 将 lxml 依赖项更新到 >= 4.0.
[AIRFLOW-2763] 在工作程序初始化期间,没有用于连接到元数据数据库的预检查机制
[AIRFLOW-2789] 添加在 DataprocClusterCreateOperator 中创建单节点集群的功能
[AIRFLOW-2797] 添加使用自定义映像创建 Google Dataproc 集群的功能
[AIRFLOW-2854] kubernetes_pod_operator 添加更多配置项
[AIRFLOW-2855] 需要在处理 DAG 文件/压缩文件时检查 Cron 表达式的有效性
[AIRFLOW-2904] 清理 airflow/executors/celery_executor.py 中不必要的行
[AIRFLOW-2921] CeleryExecutor() 中的一个微不足道的不正确之处
[AIRFLOW-2922] CeleryExecutor() 中潜在的死锁错误
[AIRFLOW-2932] GoogleCloudStorageHook - 允许压缩文件
[AIRFLOW-2949] 单引号的语法高亮
[AIRFLOW-2951] DAG 完成后,dag_run end_date 为 Null
[AIRFLOW-2956] pod 运算符的 Kubernetes 容错
[AIRFLOW-2997] 在 Bigquery hooks/operators 中支持集群表
[AIRFLOW-3006] 修复 schedule_interval=”None” 时的错误
[AIRFLOW-3008] 将 Kubernetes 相关示例 DAG 移动到 contrib/example_dags
[AIRFLOW-3025] 允许为 DockerOperator 指定 dns 和 dns-search 参数
[AIRFLOW-3067] (www_rbac) Flask 闪现消息未正确显示(无背景颜色)
[AIRFLOW-3069] 解码 S3 文件转换运算符的输出
[AIRFLOW-3072] 将权限 get_logs_with_metadata 分配给查看者角色
[AIRFLOW-3090] INFO 日志太详细
[AIRFLOW-3103] 更新 flask-login
[AIRFLOW-3112] 使 SFTP hook 与 SSH hook 对齐
[AIRFLOW-3119] 在 celery 工作程序上启用日志级别并从 airflow.cfg 继承
[AIRFLOW-3137] 使 ProxyFix 中间件成为可选
[AIRFLOW-3173] 为更多密码配置选项添加 _cmd 选项
[AIRFLOW-3177] 将 scheduler_heartbeat 指标从仪表更改为计数器
[AIRFLOW-3193] 将 docker 要求版本固定为 v3
[AIRFLOW-3195] Druid Hook:日志提取规范和任务 ID
[AIRFLOW-3197] EMR Hook 缺少一些在 AWS API 上有效的参数
[AIRFLOW-3232] 使 GCF Functions 运算符的文档更具可读性
[AIRFLOW-3262] 使用 SimpleHttpOperator 时,无法获取包含 Response 的日志
[AIRFLOW-3265] 添加对 Mysql Hook 的连接额外信息中“unix_socket”的支持
仅限文档的更改¶
[AIRFLOW-1441] 示例管道定义和回顾之间的教程不一致
[AIRFLOW-2682] 添加有关如何使用 BashOperator 和 PythonOperator 等基本运算符的操作指南
[AIRFLOW-3104] 文档中根本没有提及 .airflowignore 功能
[AIRFLOW-3237] 重构示例 DAG
[AIRFLOW-3187] 使用较慢的版本更新 Airflow.gif 文件
[AIRFLOW-3159] 更新 GCP 日志记录上的 Airflow 文档
[AIRFLOW-3030] 命令行文档不正确的子目录
[AIRFLOW-2990] Hook/Operator 的文档字符串格式不正确
[AIRFLOW-3127] Celery SSL 文档已过时
[AIRFLOW-2779] 将许可证标头添加到 doc 文件
[AIRFLOW-2779] 将项目版本添加到许可证
错误修复¶
[AIRFLOW-839] docker_operator.py 尝试记录状态键,而没有首先检查是否存在
[AIRFLOW-1104] 调度程序中的并发检查应同时计算排队任务和正在运行的任务
[AIRFLOW-1163] 添加对 x-forwarded-* 标头的支持,以支持在 AWS ELB 后面的访问
[AIRFLOW-1195] SubDagOperator 中清除的任务不会触发父 dag_runs
[AIRFLOW-1508] 跳过状态不是 State.task_states 的一部分
[AIRFLOW-1762] 在 SSHHook.create_tunnel() 中使用 key_file
[AIRFLOW-1837] 调度程序不遵守任务上不同的 start_dates。
[AIRFLOW-1874] 在 Check、ValueCheck 和 IntervalCheck BigQuery 运算符中支持标准 SQL
[AIRFLOW-1917] Python 运算符中的 print() 会以额外的换行符结束
[AIRFLOW-1970] 如果提供了无效的 fernet 密钥,则无法初始化数据库
[AIRFLOW-2145] 清除正在运行的任务后死锁
[AIRFLOW-2216] 无法为 AWS Hook 指定要使用 s3 配置文件加载的配置文件
[AIRFLOW-2574] 当 mysql 密码包含百分号时,initdb 失败
[AIRFLOW-2707] 从 Web UI 访问日志文件时出错
[AIRFLOW-2716] 替换新的 Python 3.7 关键字
[AIRFLOW-2744] RBAC 应用程序不集成插件(蓝图等)
[AIRFLOW-2772] BigQuery hook 不允许同时指定分区字段名称和表名称
[AIRFLOW-2778] DagBag 中的 collect_dag 中导入错误
[AIRFLOW-2786] 如果变量具有空键,则变量视图无法呈现
[AIRFLOW-2799] 按日期时间过滤 UI 对象已损坏
[AIRFLOW-2800] 删除 airflow/ 中容易出现的 linting 错误
[AIRFLOW-2825] S3ToHiveTransfer 运算符可能无法处理 S3 中带有大写扩展名的 GZIP 文件
[AIRFLOW-2848] LocalTaskJob 的元数据表“job”中缺少 dag_id
[AIRFLOW-2860] DruidHook:检查超时时,时间变量未正确更新
[AIRFLOW-2865] on_success_callback 和 LocalTaskJob 的清理之间的竞争条件
[AIRFLOW-2893] 由于 jobName 不匹配,导致数据流作业卡住。
[AIRFLOW-2895] 防止调度程序刷屏心跳/日志
[AIRFLOW-2900] 打包的 DAG 的代码不可见
[AIRFLOW-2905] 切换到区域数据流作业服务。
[AIRFLOW-2907] Sendgrid - 附件 - 错误 - “bytes”类型的对象不可 JSON 序列化
[AIRFLOW-2938] 尝试编辑时,连接中无效的“extra”字段可能会引发 AttributeError
[AIRFLOW-2979] 选项列表中没有弃用的 Celery 选项
[AIRFLOW-2981] 在使用 GCS jar 或 py_file 时,数据流运算符中出现 TypeError
[AIRFLOW-2984] 当任务具有朴素的 start_date/end_date 时,无法转换 naive_datetime
[AIRFLOW-2994] BigQueryOperator/BigQueryHook 中的 flatten_results 应默认为 None
[AIRFLOW-3002] 在使用 GCS jar 或 py_file 时,数据流运算符中出现 ValueError
[AIRFLOW-3012] SLA 未命中时发送的电子邮件仅发送到列表中的第一个地址
[AIRFLOW-3046] 当由于 EC2 主机终止而导致任务被终止时,ECS 运算符错误地报告成功
[AIRFLOW-3064] 由于默认日志配置,
airflow test
没有输出[AIRFLOW-3072] 只有管理员才能在 RBAC UI 中查看日志
[AIRFLOW-3079] 改进 initdb 以支持 MSSQL Server
[AIRFLOW-3089] Google 认证在 http 下无法工作
[AIRFLOW-3099] 当 airflow.cfg 中缺少某些块时会引发错误
[AIRFLOW-3109] 默认用户权限应包含 ‘can_clear’
[AIRFLOW-3111] UPDATING.md 和 default_airflow.cfg 中关于日志模板的注释和说明令人困惑
[AIRFLOW-3124] Webserver 调试模式(RBAC)已损坏
[AIRFLOW-3136] 调度器在处理执行器事件时,任务重试失败
[AIRFLOW-3138] 迁移 cc1e65623dc7 在 postgres 中创建问题
[AIRFLOW-3161] 日志 URL 链接在 RBAC UI 中不链接到任务实例日志
[AIRFLOW-3162] 当指定端口时,HttpHook 无法解析 URL
[AIRFLOW-3183] utils/dag_processing/DagFileProcessorManager.max_runs_reached() 中潜在的错误
[AIRFLOW-3203] DockerOperator 中的错误 & 一些操作符测试脚本命名不正确
[AIRFLOW-3238] 从文件系统中删除的 DAG 在 initdb 上不会被禁用
[AIRFLOW-3268] 无法通过 URL 将 SSL 字典传递给 mysql 连接
[AIRFLOW-3277] cron 计划的无效时区转换处理
[AIRFLOW-3295] 当配置证书时,DaskExecutor 中需要加密。
[AIRFLOW-3297] EmrStepSensor 将已取消的步骤标记为成功
Airflow 1.10.0 (2018-08-03)¶
重大变更¶
安装和升级需要在您的环境中设置 SLUGIFY_USES_TEXT_UNIDECODE=yes
或 AIRFLOW_GPL_UNIDECODE=yes
。 如果使用后者,则会由于依赖关系 (python-nvd3 -> python-slugify -> unidecode)
安装 GPL 运行时依赖项。
将 DataProcHook.await 调用替换为 DataProcHook.wait¶
为了与 Python 3.7 async/await 关键字兼容,方法名称已更改
在电子邮件实用程序中将 UTF-8 设置为默认 mime_charset¶
添加一个配置变量 (default_dag_run_display_number) 来控制显示的 DAG 运行次数¶
在 webserver 部分下添加一个配置变量 (default_dag_run_display_number) 来控制 UI 中显示的 DAG 运行次数。
SubDagOperator 的默认执行器更改为 SequentialExecutor¶
具有基于角色的访问控制的新 Webserver UI¶
当前的 webserver UI 使用 Flask-Admin 扩展。新的 webserver UI 使用 Flask-AppBuilder (FAB) 扩展。 FAB 具有内置的身份验证支持和基于角色的访问控制 (RBAC),为各个用户提供可配置的角色和权限。
要启用此功能,请在您的 airflow.cfg 文件中(在 [webserver] 下),将配置变量 rbac = True
设置为 True,然后运行 airflow
命令,这将在您的 $AIRFLOW_HOME 中生成 webserver_config.py
文件。
设置身份验证¶
FAB 具有对 DB、OAuth、OpenID、LDAP 和 REMOTE_USER 的内置身份验证支持。默认的身份验证类型是 AUTH_DB
。
对于任何其他身份验证类型(OAuth、OpenID、LDAP、REMOTE_USER),请参阅 FAB 文档的身份验证部分,了解如何在 webserver_config.py 文件中配置变量。
修改配置文件后,运行 airflow db init
为 RBAC 支持生成新表(这些表将具有前缀 ab_
)。
创建管理员帐户¶
更新配置设置并生成新表后,使用 airflow create_user
命令创建管理员帐户。
使用新的 UI¶
运行 airflow webserver
启动新的 UI。 这将弹出一个登录页面,输入最近创建的管理员用户名和密码。
默认情况下,为 Airflow 创建了五个角色:管理员、用户、操作员、查看器和公共。要配置角色/权限,请转到 Security
选项卡,然后在新的 UI 中单击 List Roles
。
重大更改¶
AWS Batch Operator 将属性 queue 重命名为 job_queue,以防止与 CeleryExecutor 的内部队列冲突 - AIRFLOW-2542
在旧的用户表中创建和存储的用户不会自动迁移。必须重新配置 FAB 的内置身份验证支持。
Airflow DAG 主页现在是
/home
(而不是/admin
)。Flask-AppBuilder 中的所有 ModelView 都遵循与 Flask-Admin 不同的模式。URL 路径的
/admin
部分将不再存在。例如:/admin/connection
变为/connection/list
,/admin/connection/new
变为/connection/add
,/admin/connection/edit
变为/connection/edit
,等等。由于安全问题,新的 webserver 将不再支持旧 UI 的
Data Profiling
菜单中的功能,包括Ad Hoc Query
、Charts
和Known Events
。根据 Python API 2,HiveServer2Hook.get_results() 始终返回元组列表,即使查询的是单列也是如此。
UTC 现在是默认时区:要么在 UTC 中重新配置您的工作流程调度,要么按照 https://airflow.apache.org/timezone.html#default-time-zone 中所述设置
default_timezone
airflow.contrib.sensors.hdfs_sensors 重命名为 airflow.contrib.sensors.hdfs_sensor¶
为了保持一致性,我们现在将 airflow.contrib.sensors.hdfs_sensors 重命名为 airflow.contrib.sensors.hdfs_sensor。
需要 MySQL 设置¶
为了获得合理的默认值,我们现在在 MySQL 中依赖更严格的 ANSI SQL 设置。请确保在 my.cnf 的 [mysqld]
下指定了 explicit_defaults_for_timestamp=1
Celery 配置¶
为了使 Airflow 的配置与 Celery 兼容,一些属性已重命名
celeryd_concurrency -> worker_concurrency
celery_result_backend -> result_backend
celery_ssl_active -> ssl_active
celery_ssl_cert -> ssl_cert
celery_ssl_key -> ssl_key
结果与 Celery 4 的配置参数相同,并且更加透明。
GCP Dataflow 运算符¶
Dataflow 作业标签现在在 Dataflow{Java,Python}Operator 中受支持,并带有默认的“airflow-version”标签,请将您的 google-cloud-dataflow 或 apache-beam 版本升级到 2.2.0 或更高版本。
BigQuery Hooks 和 Operator¶
传递给 BigQueryOperator
和 BigQueryBaseCursor.run_query
的 bql
参数已弃用,为了保持一致性,已重命名为 sql
。使用 bql
仍然有效(并引发 DeprecationWarning
),但不再受支持,并且将在 Airflow 2.0 中完全删除
Redshift to S3 Operator¶
在 Airflow 1.9 或更低版本中,Unload 操作始终包含标题行。为了包含标题行,我们需要关闭并行卸载。最好使用所有节点执行卸载操作,这样对于较大的表来说会更快。因此,添加了一个名为 include_header
的参数,默认设置为 False。只有当此参数设置为 True 时才会添加标题行,并且在这种情况下,并行将自动关闭 (PARALLEL OFF
)
Google 云连接字符串¶
在 Airflow 1.9 或更低版本中,Google Cloud 运算符有两个连接字符串,分别是 google_cloud_storage_default
和 google_cloud_default
。这可能会让人感到困惑,因此 google_cloud_storage_default
连接 ID 已被替换为 google_cloud_default
,以使连接 ID 在 Airflow 中保持一致。
日志配置¶
在 Airflow 1.9 或更低版本中,FILENAME_TEMPLATE
、PROCESSOR_FILENAME_TEMPLATE
、LOG_ID_TEMPLATE
、END_OF_LOG_MARK
在 airflow_local_settings.py
中配置。这些已被移动到配置文件中,因此如果您使用的是自定义配置文件,则需要添加以下默认值。
[core]
fab_logging_level = WARN
log_filename_template = {{{{ ti.dag_id }}}}/{{{{ ti.task_id }}}}/{{{{ ts }}}}/{{{{ try_number }}}}.log
log_processor_filename_template = {{{{ filename }}}}.log
[elasticsearch]
elasticsearch_log_id_template = {{dag_id}}-{{task_id}}-{{execution_date}}-{{try_number}}
elasticsearch_end_of_log_mark = end_of_log
现在,当使用带有远程存储的默认日志配置时,在许多情况下不再需要之前的 log_task_reader
设置。(以前需要将其设置为 s3.task
或类似的值。使用默认配置时不再需要这样做)
每个任务日志路径的更改¶
随着 Airflow 核心更改为支持时区,任务实例的默认日志路径现在将包含时区信息。默认情况下,这意味着将找不到所有以前的任务日志。您可以通过设置以下配置选项来恢复旧的行为
[core]
log_filename_template = {{ ti.dag_id }}/{{ ti.task_id }}/{{ execution_date.strftime("%%Y-%%m-%%dT%%H:%%M:%%S") }}/{{ try_number }}.log
变更日志¶
[AIRFLOW-2870] 使用抽象 TaskInstance 进行迁移
[AIRFLOW-2859] 实现自己的 UtcDateTime (#3708)
[AIRFLOW-2140] SparkSubmit hook 不需要 kubernetes
[AIRFLOW-2869] 从默认配置中删除智能引号
[AIRFLOW-2857] 修复 Read the Docs env
[AIRFLOW-2817] 强制对 GPL 依赖项进行显式选择
[AIRFLOW-2716] 替换 async 和 await py3.7 关键字
[AIRFLOW-2810] 修复 Xcom 模型时间戳中的拼写错误
[AIRFLOW-2710] 在文档中澄清 fernet 键值
[AIRFLOW-2606] 修复数据库模式和 SQLAlchemy 模型
[AIRFLOW-2646] 修复 setup.py 以不在 Python3 上安装 snakebite
[AIRFLOW-2604] 为 task_fail 添加索引
[AIRFLOW-2650] 当按下 Ctrl-c 时,将 SchedulerJob 标记为成功
[AIRFLOW-2678] 修复数据库模式单元测试,以删除对 fab 模型的检查
[AIRFLOW-2624] 修复 Web 服务器以匿名身份登录
[AIRFLOW-2654] 修复 FAB UI 的 Graph View 中的刷新 URL 不正确
[AIRFLOW-2668] 处理缺少可选的 cryptography 依赖项
[AIRFLOW-2681] 在 UI 中包含外部触发的 DAG 的上次 DAG 运行
[AIRFLOW-1840] 支持旧的 celery 配置上的向后兼容
[AIRFLOW-2612][AIRFLOW-2534] 清理与 Hive 相关的测试
[AIRFLOW-2608] 为实验性 API 实现/标准化自定义异常
[AIRFLOW-2607] 修复 TestLocalClient 失败
[AIRFLOW-2638] dbapi_hook:支持 REPLACE INTO
[AIRFLOW-2542][AIRFLOW-1790] 将 AWS Batch Operator 队列重命名为 job_queue
[AIRFLOW-2567] 从 kubernetes pod 中提取结果作为 Xcom
[AIRFLOW-XXX] 将 REA Group 添加到自述文件中
[AIRFLOW-2601] 允许用户指定 k8s 配置
[AIRFLOW-2559] Azure 文件共享 hook
[AIRFLOW-1786] 对软失败传感器强制执行正确的行为
[AIRFLOW-2355] Subdag 中的 Airflow 触发标签参数
[AIRFLOW-2613] 修复 Airflow 搜索 .zip 文件的错误
[AIRFLOW-2627] 为 Cassandra 添加传感器
[AIRFLOW-2634][AIRFLOW-2534] 删除 impyla 的依赖项
[AIRFLOW-2611] 修复 kubernetes 执行器的错误 dag 卷挂载路径
[AIRFLOW-2562] 添加 Google Kubernetes Engine 运算符
[AIRFLOW-2630] 修复 test_sql_sensor.py 中的类名
[AIRFLOW-2534] 修复 HiveServer2Hook 中的错误
[AIRFLOW-2586] 停止从 bash 运算符中的配置文件中获取 AIRFLOW_HOME 值
[AIRFLOW-2605] 修复 MySqlHook 的自动提交
[AIRFLOW-2539][AIRFLOW-2359] 将剩余的日志配置移动到配置文件
[AIRFLOW-1656] 更改树视图 dag 查询
[AIRFLOW-2617] 为 kubernetes 执行器添加 imagePullPolicy 配置
[AIRFLOW-2429] 修复 security/task/sensors/ti_deps 文件夹的 flake8 错误
[AIRFLOW-2550] 实现列出 DAG 运行的 API 端点
[AIRFLOW-2512][AIRFLOW-2522] 使用 google-auth 而不是 oauth2client
[AIRFLOW-2429] 修复 operators 文件夹的 flake8 错误
[AIRFLOW-2585] 修复 CassandraHook 和 CassandraToGCSOperator 中的几个错误
[AIRFLOW-2597] 恢复原始的 dbapi.run() 行为
[AIRFLOW-2590] 修复 DbApiHook.run() 中非自动提交数据库的提交
[AIRFLOW-1115] 修复 github oauth api URL
[AIRFLOW-2587] 将 TIMESTAMP 类型映射添加到 MySqlToHiveTransfer
[AIRFLOW-2591][AIRFLOW-2581] 在 DbApiHook.run() 中将自动提交的默认值设置为 False
[AIRFLOW-59] 为 Postgres hook 实现 bulk_dump 和 bulk_load
[AIRFLOW-2533] 修复 kubernetes 执行器工作程序上 DAG 的路径
[AIRFLOW-2581] RFLOW-2581] 修复 DbApiHook 自动提交
[AIRFLOW-2578] 添加在 JiraHook 中使用代理的选项
[AIRFLOW-2575] 使 gcs to gcs 运算符可以处理大型文件
[AIRFLOW-437] 在 kill zombies 中发送 TI 上下文
[AIRFLOW-2566] 将回填更改为重新运行失败的任务
[AIRFLOW-1021] 修复 LDAP 新用户的双重登录问题
[AIRFLOW-XXX] 修复拼写错误
[AIRFLOW-2561] 修复 EmailOperator 中的拼写错误
[AIRFLOW-2573] 将 BigQuery TIMESTAMP 字段转换为浮点数
[AIRFLOW-2560] 为 DataprocClusterCreateOperator 添加对 internalIpOnly 的支持
[AIRFLOW-2565] 模板化 cluster_label
[AIRFLOW-83] 添加 mongo hook 和运算符
[AIRFLOW-2558] 清除任务/dag 会清除所有执行
[AIRFLOW-XXX] 修复文档中的拼写错误
[AIRFLOW-2513] 将 BigQuery Hooks 和 Ops 的
bql
更改为sql
[AIRFLOW-2557] 修复 s3 的分页
[AIRFLOW-2545] 消除 DeprecationWarning
[AIRFLOW-2500] 修复 MySqlToHiveTransfer 以正确传输无符号类型
[AIRFLOW-2462] 将 PasswordUser setter 更改为正确的语法
[AIRFLOW-2525] 修复提交
dabf1b9
引入的错误[AIRFLOW-2553] 将 webserver.pid 添加到 .gitignore
[AIRFLOW-1863][AIRFLOW-2529] 向甘特图视图添加 dag 运行选择小部件
[AIRFLOW-2504] 正确记录用户名并将 extra 添加到搜索列
[AIRFLOW-2551] 使用 base64 标准而不是 base64 url 对二进制数据进行编码
[AIRFLOW-2537] 向回填命令添加 reset-dagrun 选项
[AIRFLOW-2526] dag_run.conf 可以覆盖参数
[AIRFLOW-2544][AIRFLOW-1967] 防范 Celery 和 Flower 的下一个主要版本
[AIRFLOW-XXX] 将 Yieldr 添加到谁在使用 airflow 的列表中
[AIRFLOW-2547] 描述如何使用 Docker 运行测试
[AIRFLOW-2538] 更新关于如何减少 Airflow 调度程序延迟的常见问题解答文档
[AIRFLOW-2529] 提高图形视图的性能和可用性
[AIRFLOW-2517] 回填支持通过 CLI 传递键值
[AIRFLOW-2532] 支持 KubernetesExecutor 的 logs_volume_subpath
[AIRFLOW-2466] 在 _change_state_for_tis_without_dagrun 中考虑 task_id
[AIRFLOW-2519] 修复带有 SQLAlchemy 的 CeleryExecutor
[AIRFLOW-2402] 修复 RBAC 任务日志
[AIRFLOW-XXX] 将 M4U 添加到用户列表中
[AIRFLOW-2536] 关于如何处理 Airflow initdb 失败的文档
[AIRFLOW-2530] KubernetesOperator 支持多个集群
[AIRFLOW-1499] 消除重复和不需要的代码
[AIRFLOW-2521] 回填 - 使变量名称和日志消息更准确
[AIRFLOW-2429] 修复 hook、macros 文件夹的 flake8 错误
[Airflow-XXX] 将 Prime 添加到公司列表中
[AIRFLOW-2525] 修复 PostgresHook.copy_expert 以使用“COPY FROM”
[AIRFLOW-2515] 将 thrift_sasl 的依赖项添加到 hive extra
[AIRFLOW-2523] 添加有关管理 GCP 连接的操作指南
[AIRFLOW-2510] 引入新宏:prev_ds 和 next_ds
[AIRFLOW-1730] 反序列化从数据库查询的 XCom 值
[AIRFLOW-2518] 修复 integration.rst 中损坏的 ToC 链接
[AIRFLOW-1472] 修复在跳过任务时触发的 SLA 未命中
[AIRFLOW-2520] CLI - 使回填不那么冗长
[AIRFLOW-2107] 在 BigQueryBaseCursor 上为 run_query 添加 time_partitioning
[AIRFLOW-1057][AIRFLOW-1380][AIRFLOW-2362][2362] AIRFLOW 将 DockerOperator 更新到新 API
[AIRFLOW-2415] 使 Airflow DAG 模板呈现数字
[AIRFLOW-2473] 修复 TransferTests 的错误跳过条件
[AIRFLOW-2472] 实现 MySqlHook.bulk_dump
[AIRFLOW-2419] 对 subdag 运算符使用默认视图
[AIRFLOW-2498] 修复 SFTP 传感器中的意外参数
[AIRFLOW-2509] 将配置文档分成操作指南
[AIRFLOW-2429] 将 BaseExecutor 添加回去
[AIRFLOW-2429] 修复 dag、example_dags、executors 的 flake8 错误
[AIRFLOW-2502] 将单引号三重引号更改为双引号以用于文档字符串
[AIRFLOW-2503] 修复 CONTRIBUTING.md 中的断开链接
[AIRFLOW-2501] 在 docs contrib 指南中引用 devel 说明
[AIRFLOW-2429] 修复 contrib 文件夹的 flake8 错误
[AIRFLOW-2471] 修复 HiveCliHook.load_df 以使用未使用的参数
[AIRFLOW-2495] 将 celery 更新到 4.1.1
[AIRFLOW-2429] 修复 api、bin、config_templates 文件夹的 flake8 错误
[AIRFLOW-2493] 将 API 文档中所有运算符的 template_fields 标记为“模板化”
[AIRFLOW-2489] 将 FlaskAppBuilder 更新到 1.11.1
[AIRFLOW-2448] 增强 HiveCliHook.load_df 以使用日期时间
[AIRFLOW-2487] 增强 druid 提取 hook
[AIRFLOW-2397] 支持 Kubernetes 执行器/运算符的亲和性策略
[AIRFLOW-2482] 为 GCS Hook 中的 rewrite 方法添加测试
[AIRFLOW-2481] 修复不稳定的 Kubernetes 测试
[AIRFLOW-2479] 改进文档常见问题解答部分
[AIRFLOW-2485] 修复 Qubole 传感器的错误日志记录
[AIRFLOW-2486] 删除端口后不必要的斜杠
[AIRFLOW-2429] 使 Airflow 符合 flake8 标准
[AIRFLOW-2491] 解决 flask 版本冲突
[AIRFLOW-2484] 删除 MySQL 到 GCS Op 中的重复键
[AIRFLOW-2458] 添加 cassandra-to-gcs 运算符
[AIRFLOW-2477] 改进 RBAC UI 的任务持续时间和落地时间图的时间单位
[AIRFLOW-2474] 仅在使用 py2 时导入 snakebite
[AIRFLOW-48] 解析连接 uri 查询字符串
[AIRFLOW-2467][AIRFLOW-2] 将导入直接警告消息更新为使用模块名称
[AIRFLOW-XXX] 修复公司顺序
[AIRFLOW-2452] 文档 field_dict 必须是 OrderedDict
[AIRFLOW-2420] Azure 数据湖 Hook
[AIRFLOW-2213] 添加 Qubole 检查运算符
[AIRFLOW-2465] 修复文档中错误的模块名称
[AIRFLOW-1929] 修改 TriggerDagRunOperator 以接受 execution_date
[AIRFLOW-2460] 用户现在可以使用卷挂载和卷
[AIRFLOW-2110][AIRFLOW-2122] 增强 Http Hook
[AIRFLOW-XXX] 更新的贡献者列表
[AIRFLOW-2435] 为 ECSOperator 添加 launch_type 以允许 FARGATE
[AIRFLOW-2451] 在 gcs_to_gcs 运算符中使用通配符时删除多余的斜杠 ('/') 字符
[AIRFLOW-2461] 添加对 dataproc 运算符上集群缩放的支持
[AIRFLOW-2376] 修复没有 hive 部分错误
[AIRFLOW-2425] 添加沿袭支持
[AIRFLOW-2430] 将查询批处理扩展到其他慢查询
[AIRFLOW-2453] 为 kubernetes/git_subpath 添加默认 nil 值
[AIRFLOW-2396] 添加对 kubernetes 运算符中资源的支持
[AIRFLOW-2169] 在导入到 BigQuery 之前使用 base64 对二进制数据进行编码
[AIRFLOW-XXX] 将 spotahome 添加到用户列表中
[AIRFLOW-2457] 更新 FAB 版本要求
[AIRFLOW-2454][Airflow 2454] 支持 k8s 的 imagePullPolicy
[AIRFLOW-2450] 将支持的 k8s 版本更新为 1.9 和 1.10
[AIRFLOW-2333] 添加 Segment Hook 和 TrackEventOperator
[AIRFLOW-2442][AIRFLOW-2] Airflow 运行命令使数据库连接保持打开状态
[AIRFLOW-2016] 为 Dataproc 工作流模板子类分配 template_fields,而不是基类
[AIRFLOW-2446] 将 S3ToRedshiftTransfer 添加到“集成”文档中
[AIRFLOW-2449] 修复 operators.py 以运行所有测试用例
[AIRFLOW-2424] 添加 dagrun 状态端点并增加 k8s 测试覆盖率
[AIRFLOW-2441] 修复 HiveCliHook.load_df 中的错误
[AIRFLOW-2358][AIRFLOW-201804] 使 Kubernetes 示例成为可选
[AIRFLOW-2436] 在 initdb 中移除 cli_logger
[AIRFLOW-2444] 在 cli 回填命令中删除未使用的选项 (include_adhoc)
[AIRFLOW-2447] 修复 TestHiveMetastoreHook 以运行所有用例
[AIRFLOW-2445] 允许在 kubernetes 运算符中使用模板
[AIRFLOW-2086][AIRFLOW-2393] 在树视图中自定义默认的 dagrun 编号
[AIRFLOW-2437] 将 PubNub 添加到当前 Airflow 用户列表
[AIRFLOW-XXX] 将 Quantopian 添加到 Airflow 用户列表
[AIRFLOW-1978] 添加 WinRM windows 运算符和钩子
[AIRFLOW-2427] 为命名的 hive 传感器添加测试
[AIRFLOW-2412] 修复 HiveCliHook.load_file 以解决 HIVE-10541
[AIRFLOW-2431] 为 RBAC UI 添加导航栏颜色参数
[AIRFLOW-2407] 解决 Python 未定义的名称
[AIRFLOW-1952] 添加导航栏颜色参数
[AIRFLOW-2222] 实现 GoogleCloudStorageHook.rewrite
[AIRFLOW-2426] 添加 Google Cloud Storage Hook 测试
[AIRFLOW-2418] 更新 Flask-WTF
[AIRFLOW-2417] 等待 pod 不再运行以结束任务
[AIRFLOW-1914] 为电子邮件工具添加其他字符集支持
[AIRFLOW-XXX] 使用 Craig@Work 更新 README.md
[AIRFLOW-1899] 修复 Kubernetes 测试
[AIRFLOW-1812] 更新日志记录示例
[AIRFLOW-2313] 为 Dataproc 添加 TTL 参数
[AIRFLOW-2411] 将 dataproc_jars 添加到 templated_fields
[AIRFLOW-XXX] 将 Reddit 添加到 Airflow 用户
[AIRFLOW-XXX] 修复 scheduler.rst 中错误的表头
[AIRFLOW-2409] 将密码作为参数提供
[AIRFLOW-2410][AIRFLOW-75] 在 RBAC Web UI 中设置时区
[AIRFLOW-2394] kubernetes 运算符中的默认 cmds 和 arguments
[AIRFLOW-2406] 将 Apache2 许可徽章添加到自述文件
[AIRFLOW-2404] 为未入队的任务添加额外的文档
[AIRFLOW-2400] 添加为 K8s 设置环境变量的功能
[AIRFLOW-XXX] 将 Twine Labs 添加为 Airflow 用户
[AIRFLOW-1853] 在树视图中仅显示所需数量的运行
[AIRFLOW-2401] 记录 Jinja 模板中变量的使用
[AIRFLOW-2403] 修复许可标头
[AIRFLOW-1313] 修复许可标头
[AIRFLOW-2398] 将 BounceX 添加到当前 Airflow 用户列表
[AIRFLOW-2363] 修复 TaskHandler 中的返回类型错误
[AIRFLOW-2389] 创建 pinot db api 钩子
[AIRFLOW-2390] 解决 FlaskWTFDeprecationWarning
[AIRFLOW-1933] 修复一些拼写错误
[AIRFLOW-1960] 添加对 kubernetes 运算符中 secret 的支持
[AIRFLOW-1313] 添加 vertica_to_mysql 运算符
[AIRFLOW-1575] 添加 AWS Kinesis Firehose 钩子以插入批量记录
[AIRFLOW-2266][AIRFLOW-2343] 删除 google-cloud-dataflow 依赖项
[AIRFLOW-2370] 在 create_user 中实现 –use_random_password
[AIRFLOW-2348] 当 source_object 包含通配符 [] 时,从 destination_object 中剥离路径前缀
[AIRFLOW-2391] 修复为 Flask 0.12.2
[AIRFLOW-2381] 修复不稳定的 ApiPasswordTests 测试
[AIRFLOW-2378] 将 Groupon 添加到当前用户列表
[AIRFLOW-2382] 修复分隔符的错误描述
[AIRFLOW-2380] 添加对 Spark 提交运算符中环境变量的支持。
[AIRFLOW-2377] 改进 Sendgrid 发送者支持
[AIRFLOW-2331] 支持在 dataproc 集群创建时设置初始化操作超时
[AIRFLOW-1835] 更新文档:变量文件是 json
[AIRFLOW-1781] 使 LDAP 组中的搜索不区分大小写
[AIRFLOW-2042] 修复浏览器菜单出现在自动完成菜单之上
[AIRFLOW-XXX] 从 travis 中删除不属于 travis 的 wheelhouse 文件
[AIRFLOW-2336] 在 hive_hook 中使用 hmsclient
[AIRFLOW-2041] 纠正 Python 示例中的语法
[AIRFLOW-74] SubdagOperators 可以消耗所有 celeryd 工作进程
[AIRFLOW-2369] 修复 gcs 测试
[AIRFLOW-2365] 修复 autocommit 属性检查
[AIRFLOW-2068] MesosExecutor 允许可选的 Docker 镜像
[AIRFLOW-1652] 将 DatabricksRunSubmitOperator 元数据推送到 XCOM
[AIRFLOW-2234] 为 PrestoHook 启用 insert_rows
[AIRFLOW-2208][Airflow-22208] 从 TaskInstance 视图链接到相同的 DagRun 图
[AIRFLOW-1153] 允许 HiveOperators 接受 hiveconfs
[AIRFLOW-775] 修复 Jdbc 钩子的自动提交设置
[AIRFLOW-2364] 在不支持自动提交的连接上设置自动提交时发出警告
[AIRFLOW-2357] 为日志添加持久卷
[AIRFLOW-766] 在自动提交时跳过 conn.commit()
[AIRFLOW-2351] 检查有效的 default_args start_date
[AIRFLOW-1433] 将默认的 rbac 设置为 initdb
[AIRFLOW-2270] 处理回填中已删除的任务
[AIRFLOW-2344] 修复
connections -l
以使用管道/重定向[AIRFLOW-2300] 将 S3 Select 功能添加到 S3ToHiveTransfer
[AIRFLOW-1314] 清理配置
[AIRFLOW-1314] 完善一些 Kubernetes 文档/配置
[AIRFLOW-1314] 改进错误处理
[AIRFLOW-1999] 添加每个任务的 GCP 服务帐户支持
[AIRFLOW-1314] 基于 master 进行 rebase
[AIRFLOW-1314] 小型清理以解决 PR 注释 (#24)
[AIRFLOW-1314] 添加 executor_config 和测试
[AIRFLOW-1314] 改进 k8s 支持
[AIRFLOW-1314] 使用 VolumeClaim 来传输 DAG
[AIRFLOW-1314] 创建集成测试环境
[AIRFLOW-1314] Git 模式,用于拉取 Kubernetes Executor 的 DAG
[AIRFLOW-1314] 添加对 Kubernetes Executor 中卷挂载和 Secret 的支持
[AIRFLOW=1314] 基本 Kubernetes 模式
[AIRFLOW-2326][AIRFLOW-2222] 删除 contrib.gcs_copy_operator
[AIRFLOW-2328] 修复 S3ToGoogleCloudStorageOperator 中空的 GCS blob
[AIRFLOW-2350] 修复 UPDATING.md 中的语法
[AIRFLOW-2302] 修复文档
[AIRFLOW-2345] pip 未在此 setup.py 中使用
[AIRFLOW-2347] 将 Banco de Formaturas 添加到自述文件
[AIRFLOW-2346] 将 Investorise 添加为 Airflow 的官方用户
[AIRFLOW-2330] 如果未给出,则不要附加目标前缀
[AIRFLOW-2240][DASK] 为 dask-distributed 调度器添加 TLS/SSL 支持。
[AIRFLOW-2309] 修复 TaskFail 的持续时间计算
[AIRFLOW-2335] 修复 ci 的 jdk8 下载问题
[AIRFLOW-2184] 添加 druid_checker_operator
[AIRFLOW-2299] 将 S3 Select 功能添加到 S3FileTransformOperator
[AIRFLOW-2254] 将标头作为第一行放入卸载中
[AIRFLOW-610] 优先使用配置中的 _cmd 选项,然后再使用默认值
[AIRFLOW-2287] 修复不正确的 ASF 标头
[AIRFLOW-XXX] 将 Zego 添加为 Apache Airflow 用户
[AIRFLOW-952] 修复在 UI 中保存空额外字段的问题
[AIRFLOW-1325] 添加 ElasticSearch 日志处理程序和读取器
[AIRFLOW-2301] 将 S3 密钥的文件与 GCS 路径同步
[AIRFLOW-2293] 修复 S3FileTransformOperator 以使用 boto3
[AIRFLOW-3212][AIRFLOW-2314] 仅删除 GCS 路径中的前导斜杠
[AIRFLOW-1509][AIRFLOW-442] SFTP 传感器
[AIRFLOW-2291] 为 ML Engine 添加可选参数
[AIRFLOW-1774] 允许 MLEngineBatchPredictionOperator 中参数的一致模板化
[AIRFLOW-2302] 添加缺少的运算符和钩子
[AIRFLOW-2312] 文档拼写错误更正:对应的
[AIRFLOW-1623] 触发运算符中的 on_kill 方法
[AIRFLOW-2162] 当模拟另一个用户时,将环境变量传递给 sudo
[AIRFLOW-2304] 更新快速入门文档以提及调度器部分
[AIRFLOW-1633] docker_operator 需要一种设置 shm_size 的方法
[AIRFLOW-1340] 添加 S3 到 Redshift 传输运算符
[AIRFLOW-2303] 列出 S3 存储桶内的密钥
[AIRFLOW-2209] 恢复 flask_login 导入
[AIRFLOW-2306] 将 Bonnier Broadcasting 添加到当前用户列表
[AIRFLOW-2305][AIRFLOW-2027] 修复由 [] 引起的 CI 故障
[AIRFLOW-2281] 添加对 Sendgrid 类别的支持
[AIRFLOW-2027] 仅在所有文件都已解析后才在调度器中触发休眠
[AIRFLOW-2256] SparkOperator:添加客户端独立模式和重试机制
[AIRFLOW-2284] GCS 到 S3 运算符
[AIRFLOW-2287] 更新许可声明
[AIRFLOW-2296] 将 Cinimex DataLab 添加到自述文件
[AIRFLOW-2298] 将 Kalibrr 添加到谁使用 Airflow
[AIRFLOW-2292] 修复 S3Hook.get_wildcard_key 的文档字符串
[AIRFLOW-XXX] 更新 PR 模板
[AIRFLOW-XXX] 删除过时的 migrations.sql
[AIRFLOW-2287] 将许可标头添加到 docs/Makefile
[AIRFLOW-2286] 将 tokopedia 添加到自述文件
[AIRFLOW-2273] 添加 Discord webhook 运算符/钩子
[AIRFLOW-2282] 修复 UPDATING.md 中的语法
[AIRFLOW-2200] 添加带有测试的 snowflake 运算符
[AIRFLOW-2178] 添加对 SLA 丢失错误的处理
[AIRFLOW-2169] 修复 python3 中类型“bytes”不可 JSON 序列化的问题
[AIRFLOW-2215] 将环境传递给 base_task_runner 中的 subprocess.Popen
[AIRFLOW-2253] 添加 Airflow CLI 检测
[AIRFLOW-2274] 修复 Dataflow 测试
[AIRFLOW-2269] 添加 Custom Ink 作为 Airflow 用户
[AIRFLOW-2259] Dataflow 钩子索引超出范围
[AIRFLOW-2233] 更新 updating.md 以包含 hdfs_sensors 重命名的信息
[AIRFLOW-2217] 添加 Slack webhook 运算符
[AIRFLOW-1729] 改进 DagBag 时间
[AIRFLOW-2264] 改进 create_user cli 帮助消息
[AIRFLOW-2260][AIRFLOW-2260] SSHOperator 添加命令模板 .sh 文件
[AIRFLOW-2261] 检查 config/env 中的远程基本日志文件夹
[AIRFLOW-2258] 允许将 Parquet 格式的文件导入 BigQuery
[AIRFLOW-1430] 包括安装说明以避免 GPL
[AIRFLOW-1430] 解决 GPL 依赖项
[AIRFLOW-2251] 添加 Thinknear 作为 Airflow 用户
[AIRFLOW-2244] bugfix:从 models.py 中删除旧的 LongText 代码
[AIRFLOW-2247] 修复 RedshiftToS3Transfer 不会因 ValueError 而失败
[AIRFLOW-2249] 为 Zendesk 钩子添加侧加载支持
[AIRFLOW-XXX] 将 Qplum 添加到 Airflow 用户
[AIRFLOW-2228] ValueCheckOperator 中的增强功能
[AIRFLOW-1206] 拼写错误
[AIRFLOW-2060] 将 pendulum 版本更新为 1.4.4
[AIRFLOW-2248] 修复 RedshiftToS3Transfer 文档中错误的参数名称
[AIRFLOW-1433][AIRFLOW-85] 带有 RBAC 支持的新 Airflow Webserver UI
[AIRFLOW-1235] 修复 Web 服务器的奇怪行为
[AIRFLOW-1460] 允许恢复已删除的 TI
[AIRFLOW-2235] 修复两个运算符中错误的文档字符串
[AIRFLOW-XXX] 修复使用 Airflow 的公司的按时间顺序排列
[AIRFLOW-2124] 将 Python 文件上传到 Dataproc 的存储桶
[AIRFLOW-2212] 修复未生成的传感器 API 参考
[AIRFLOW-2226] 将 google_cloud_storage_default 重命名为 google_cloud_default
[AIRFLOW-2211] 为了保持一致性,将 hdfs_sensors.py 重命名为 hdfs_sensor.py
[AIRFLOW-2225] 更新文档以包含 DruidDbApiHook
[Airflow-2202] 在 HiveMetastoreHook().max_partition() 中添加过滤器支持
[AIRFLOW-2220] 删除 security.rst 中重复的数字列表条目
[AIRFLOW-XXX] 更新教程文档
[AIRFLOW-2215] 更新 celery 任务以保留环境变量并改进异常时的日志记录
[AIRFLOW-2185] 使用状态而不是查询参数
[AIRFLOW-2183] 重构 DruidHook 以启用 sql
[AIRFLOW-2203] 延迟循环检测
[AIRFLOW-2203] 删除无用的命令。
[AIRFLOW-2203] 在 apply_defaults 中缓存签名
[AIRFLOW-2203] 加快运算符资源
[AIRFLOW-2203] 缓存静态规则(触发/权重)
[AIRFLOW-2203] 将任务 id 存储为集合而不是列表
[AIRFLOW-2205] 从 JdbcHook 文档中删除不受支持的 args
[AIRFLOW-2207] 修复使用 app.cached_app() 的不稳定测试
[AIRFLOW-2206] 从 JdbcOperator 文档中删除不受支持的 args
[AIRFLOW-2140] 将 Kubernetes 调度器添加到 SparkSubmitOperator
[AIRFLOW-XXX] 将 Xero 添加到用户列表
[AIRFLOW-2204] 修复 Web 服务器调试模式
[AIRFLOW-102] 修复 test_complex_template 总是成功的问题
[AIRFLOW-442] 添加 SFTPHook
[AIRFLOW-2169] 将 schema 添加到 MySqlToGoogleCloudStorageOperator
[AIRFLOW-2184][AIRFLOW-2138] Google Cloud Storage 允许通配符
[AIRFLOW-1588] 将变量值转换为字符串
[AIRFLOW-2199] 修复对 logger 的无效引用
[AIRFLOW-2191] 将调度器心跳日志从信息更改为调试
[AIRFLOW-2106] SalesForce 钩子沙盒选项
[AIRFLOW-2197] 静默 hostname_callable 配置错误消息
[AIRFLOW-2150] 在 HiveMetastoreHook().max_partition() 中使用更轻量的调用
[AIRFLOW-2186] 更改在少数 ops 中进行日志记录的方式
[AIRFLOW-2181] 将 password_auth 和 test_password_endpoints 从 DOS 转换为 UNIX
[AIRFLOW-2187] 修复由于 AIRFLOW-2123 导致的 Travis CI 损坏
[AIRFLOW-2175] 检查 filepath 是否不为 None
[AIRFLOW-2173] 不要检查任务 ID 是否达到并发限制
[AIRFLOW-2168] 用于 Azure Blob Storage 的远程日志记录
[AIRFLOW-XXX] 将 DocuTAP 添加到用户列表
[AIRFLOW-2176] 更改在 BQ Get Data Operator 中进行日志记录的方式
[AIRFLOW-2177] 为 GCS 下载操作添加模拟测试
[AIRFLOW-2123] 从 setup.py 安装 CI 依赖项
[AIRFLOW-2129] Presto hook 调用 _parse_exception_message 但定义了 _get_pretty_exception_message
[AIRFLOW-2174] 修复拼写错误和错误渲染的文档
[AIRFLOW-2171] 存储委托凭据
[AIRFLOW-2166] 恢复 BQ run_query 方言参数
[AIRFLOW-2163] 将 HBC Digital 添加到 Airflow 用户列表
[AIRFLOW-2065] 修复创建记录器时的竞争条件
[AIRFLOW-2147] 插件管理器:添加了 ‘sensors’ 属性
[AIRFLOW-2059] taskinstance 查询非常糟糕,未索引,且无法扩展
[AIRFLOW-2159] 修复 salesforce_hook 中的一些拼写错误
[AIRFLOW-2132] 添加初始化数据库的步骤
[AIRFLOW-2160] 修复错误的 rowid 反序列化
[AIRFLOW-2161] 将 Vevo 添加到使用 Airflow 的公司列表
[AIRFLOW-2149] 添加指向 Apache Beam 文档的链接以创建自执行 Jar
[AIRFLOW-2151] 允许从 AwsHook 获取会话
[AIRFLOW-2097] tz 在赋值前被引用
[AIRFLOW-2152] 将 Multiply 添加到使用 Airflow 的公司列表
[AIRFLOW-1551] 添加触发 Jenkins 作业的操作符
[AIRFLOW-2034] 修复使用 str.format 时 %s 和 {} 之间的混淆
[AIRFLOW-2102] 将 custom_args 添加到 Sendgrid 个性化设置
[AIRFLOW-1035][AIRFLOW-1053] 导入 unicode_literals 以解析 HQL 中的 Unicode
[AIRFLOW-2127] 在数据库迁移期间保留记录器
[AIRFLOW-2146] 解决 BQ 使用 DbApiHook 方法的问题
[AIRFLOW-2087] 调度器报告显示不正确的任务总数
[AIRFLOW-2139] 删除使用 pandas_gbq 获取 DataFrame 的不必要的样板代码
[AIRFLOW-2125] 使用二进制包 psycopg2-binary
[AIRFLOW-2142] 在 mkdir 失败时包含消息
[AIRFLOW-1615] SSHHook:使用 Connection 指定的端口
[AIRFLOW-2122] 处理 sshHook 中的布尔值
[AIRFLOW-XXX] 将 Tile 添加到用户列表
[AIRFLOW-2130] 将缺失的操作符添加到 API 参考文档
[AIRFLOW-XXX] 添加超时单位(秒)
[AIRFLOW-2134] 将 Alan 添加到使用 Airflow 的公司列表
[AIRFLOW-2133] 删除 CONTRIBUTING 中对 GitHub 问题的引用
[AIRFLOW-2131] 删除令人困惑的 AirflowImport 文档
[AIRFLOW-1852] 允许主机名可被覆盖。
[AIRFLOW-2126] 将 Bluecore 添加到活跃用户
[AIRFLOW-1618] 添加创建 GCS 存储桶的功能
[AIRFLOW-2108] 修复 BashOperator 中的日志缩进
[AIRFLOW-2115] 修复指向 PythonHosted 的文档链接
[AIRFLOW-XXX] 添加来自 Easy 公司的贡献者
[AIRFLOW-1882] 将 ignoreUnknownValues 选项添加到 gcs_to_bq 操作符
[AIRFLOW-2089] 在独立集群中添加对 SparkSubmit 的 on kill 支持
[AIRFLOW-2113] 解决缺失的 DagRun 回调问题。鉴于 handle_callback 方法属于 DAG 对象,我们可以直接使用 get_task 获取任务列表,并减少与数据库的通信,从而使 Airflow 更轻量级。
[AIRFLOW-2112] 修复 UI 上“最近任务”的 SVG 宽度。
[AIRFLOW-2116] 将 CI Cloudant 版本设置为 <2.0
[AIRFLOW-XXX] 将 PMC 添加到使用 Airflow 的公司列表
[AIRFLOW-2100] 修复损坏的文档链接
[AIRFLOW-1404] 将 ‘flatten_results’ & ‘maximum_bytes_billed’ 添加到 BQ 操作符
[AIRFLOW-800] 初始化有效的 Google BigQuery 连接
[AIRFLOW-1319] 修复 SparkSubmitOperator 和 SparkSubmitHook 误导性的文档字符串
[AIRFLOW-1983] 将环境变量参数解析为模板
[AIRFLOW-2095] 添加创建外部 BigQuery 表的操作符
[AIRFLOW-2085] 添加 SparkJdbc 操作符
[AIRFLOW-1002] 添加清理已删除 DAG 的所有依赖项的功能
[AIRFLOW-2094] 在 DataProc{*} 操作符中 Jinjafied project_id,region 和 zone
[AIRFLOW-2092] 修复 FTPHook 文档字符串中不正确的参数
[AIRFLOW-XXX] 将 SocialCops 添加到 Airflow 用户列表
[AIRFLOW-2088] 修复 MySQL 到 GCS 助手函数中的重复键
[AIRFLOW-2091] 修复 BigQuery Hook 中不正确的文档字符串参数
[AIRFLOW-2090] 修复 DataStore Hook 中的拼写错误
[AIRFLOW-1157] 修复缺失的池导致调度器崩溃的问题
[AIRFLOW-713] Jinjafy {EmrCreateJobFlow,EmrAddSteps}Operator 属性
[AIRFLOW-2083] 文档:在适当的地方使用 “its” 而不是 “it’s”
[AIRFLOW-2066] 添加创建空 BQ 表的操作符
[AIRFLOW-XXX] 将 Karmic 添加到公司列表
[AIRFLOW-2073] 当文件不存在时使 FileSensor 失败
[AIRFLOW-2078] 提高 task_stats 和 dag_stats 的性能
[AIRFLOW-2080] 使用注销图标而不是电源按钮
[AIRFLOW-2077] 获取 list_objects_v2 响应的所有页面
[AIRFLOW-XXX] 将 TM 添加到公司列表
[AIRFLOW-1985] 使用
run_as_user
的模拟修复[AIRFLOW-2018][AIRFLOW-2] 使传感器向后兼容
[AIRFLOW-XXX] 修复概念文档中的拼写错误 (dag_md)
[AIRFLOW-2069] 允许将字节上传到 S3
[AIRFLOW-2074] 修复 GHE 身份验证中的日志变量名
[AIRFLOW-1927] 转换 TaskInstances 的天真 datetime
[AIRFLOW-1760] 实验性 API 的密码身份验证
[AIRFLOW-2038] 为 dev 添加缺失的 kubernetes 依赖项
[AIRFLOW-2040] 转义任务实例日志 URL 中的特殊字符
[AIRFLOW-1968][AIRFLOW-1520] 将 role_arn 和 aws_account_id/aws_iam_role 支持添加回 aws hook
[AIRFLOW-2048] 修复任务实例失败字符串格式
[AIRFLOW-2046] 修复 kerberos 错误以使其与 Python 3.x 一起使用
[AIRFLOW-2063] 为 GCP 添加缺失的文档
[AIRFLOW-XXX] 修复文档中的拼写错误
[AIRFLOW-1793] 使用 docker_url 而不是无效的 base_url
[AIRFLOW-2055] 详细说明略有歧义的文档
[AIRFLOW-2039] BigQueryOperator 支持 priority 属性
[AIRFLOW-2053] 修复 BQ hook 中的引号字符错误
[AIRFLOW-2057] 将 Overstock 添加到公司列表
[AIRFLOW-XXX] 将 Plaid 添加到 Airflow 用户列表
[AIRFLOW-2044] 将 SparkSubmitOperator 添加到文档
[AIRFLOW-2037] 添加获取 GCS 对象哈希值的方法
[AIRFLOW-2050] 修复 Travis 权限问题
[AIRFLOW-2043] 将 Intercom 添加到公司列表
[AIRFLOW-2023] 添加围绕排队文件数量的调试日志
[AIRFLOW-XXX] 将 Pernod-ricard 添加为 Airflow 用户
[AIRFLOW-1453] 将 ‘steps’ 添加到 EmrAddSteps 中的 template_fields
[AIRFLOW-2015] 为交互式运行添加标志
[AIRFLOW-1895] 修复 mysql 的主键完整性
[AIRFLOW-2030] 修复 DbApiHook 中用于插入的
KeyError: 'i'
[AIRFLOW-1943] 添加外部 BigQuery 表功能
[AIRFLOW-2033] 添加 Google Cloud Storage 列表操作符
[AIRFLOW-2006] 将本地日志捕获添加到 kubernetes 操作符
[AIRFLOW-2031] 修复 DataFlow 文档字符串示例中缺少 gcp_conn_id 的问题
[AIRFLOW-2029] 修复 BigQueryPandasConnector 中的 AttributeError
[AIRFLOW-2028] 将 JobTeaser 添加到官方用户列表
[AIRFLOW-2016] 添加对 Dataproc Workflow Templates 的支持
[AIRFLOW-2025] 降低日志详细程度
[AIRFLOW-1267][AIRFLOW-1874] 将方言参数添加到 BigQueryHook
[AIRFLOW-XXX] 修复了拼写错误
[AIRFLOW-XXX] 将拼写错误 node 改为 nodes
[AIRFLOW-2019] 更新 DataflowHook 以更新流式类型作业
[AIRFLOW-2017][Airflow 2017] 将查询输出添加到 PostgresOperator
[AIRFLOW-1889] 将传感器拆分为单独的文件
[AIRFLOW-1950] 可选择传递 xcom_pull task_ids
[AIRFLOW-1755] 允许在根目录下挂载
[AIRFLOW-511][Airflow 511] 在 dag 级别添加成功/失败回调
[AIRFLOW-192] 将 weight_rule 参数添加到 BaseOperator
[AIRFLOW-2008] 对 Python 列默认值使用可调用对象
[AIRFLOW-1984] 修复 AWS Batch 操作符
[AIRFLOW-2000] 支持非主 dataflow 作业类
[AIRFLOW-2003] 使用 flask-caching 而不是 flask-cache
[AIRFLOW-2002] 不要吞噬日志导入时的异常
[AIRFLOW-2004] 从 flask 而不是 flask.login 导入 flash
[AIRFLOW-1997] 修复 GCP 操作符文档字符串
[AIRFLOW-1996] 更新 DataflowHook wait_for_done 以用于流式类型作业
[AIRFLOW-1995][Airflow 1995] 将 on_kill 方法添加到 SqoopOperator
[AIRFLOW-1770] 允许 HiveOperator 接收文件
[AIRFLOW-1994] 更改“计划”状态的任务实例的背景颜色
[AIRFLOW-1436][AIRFLOW-1475] EmrJobFlowSensor 将“已取消”步骤视为“成功”
[AIRFLOW-1517] Kubernetes 操作符 PR 修复
[AIRFLOW-1517] 解决了 PR 评论
[AIRFLOW-1517] 开始编写 k8s 操作符的文档
[AIRFLOW-1517] 恢复资源的作者身份
[AIRFLOW-1517] 删除资源的作者身份
[AIRFLOW-1517] 为 kubernetes 集成测试添加 minikube
[AIRFLOW-1517] 恢复资源的作者身份
[AIRFLOW-1517] 修复了许可证问题
[AIRFLOW-1517] 为 kube 集群问题创建了更准确的故障
[AIRFLOW-1517] 删除资源的作者身份
[AIRFLOW-1517] 为 kubernetes 集成测试添加 minikube
[AIRFLOW-1988] 更改“无”状态 TI 的背景颜色
[AIRFLOW-790] 清理没有 DagRuns 的 TaskInstances
[AIRFLOW-1949] 修复 var 上传,str() 产生 “b’…’”,这不是 json
[AIRFLOW-1930] 将 func.now() 转换为 timezone.utcnow()
[AIRFLOW-1688] 在 bigquery_hook 中支持 load.time_partitioning
[AIRFLOW-1975] 使 TriggerDagRunOperator 回调成为可选
[AIRFLOW-1480] 为 ExternalTaskSensor 字段渲染模板属性
[AIRFLOW-1958] 将 kwargs 添加到 send_email
[AIRFLOW-1976] 修复缺失的 log/logger 属性 FileProcessHandler
[AIRFLOW-1982] 修复执行程序事件日志格式
[AIRFLOW-1971] 在模拟时传播 hive 配置
[AIRFLOW-1969] 始终对 Google OAuth2 使用 HTTPS URI
[AIRFLOW-1954] 添加 DataFlowTemplateOperator
[AIRFLOW-1963] 添加 HiveOperator mapred_queue 的配置
[AIRFLOW-1946][AIRFLOW-1855] 创建 BigQuery 获取数据操作符
[AIRFLOW-1953] 将标签添加到 dataflow 操作符
[AIRFLOW-1967] 将 celery 更新到 4.0.2
[AIRFLOW-1964] 将 Upsight 添加到 Airflow 用户列表
[AIRFLOW-XXX] 1.9.0 的更新日志
[AIRFLOW-1470] 实现 BashSensor 操作符
[AIRFLOW-XXX] 钉住 sqlalchemy 依赖项
[AIRFLOW-1955] 不要引用未赋值的变量
[AIRFLOW-1957] 在 Readme 中添加 BalanceHero 的贡献者
[AIRFLOW-1517] 恢复 secrets 和 init 容器的作者身份
[AIRFLOW-1517] 删除 secrets 和 init 容器的作者身份
[AIRFLOW-1935] 将 BalanceHero 添加到 readme
[AIRFLOW-1939] 添加 astronomer 贡献者
[AIRFLOW-1517] Kubernetes 操作符
[AIRFLOW-1928] 修复 catchup=False 时的 @once
[AIRFLOW-1937] 通过批量提交来加速调度
[AIRFLOW-1821] 通过删除额外的记录器来增强默认日志配置
[AIRFLOW-1904] 将 DAG fileloc 更正为正确的 file path
[AIRFLOW-1909] 使用支持的 MySQL 服务器版本更新文档
[AIRFLOW-1915] 放宽 flask-wtf 依赖规范
[AIRFLOW-1920] 更新 CONTRIBUTING.md 以反映强制执行的 linting 规则
[AIRFLOW-1942] 更新 Sphinx 文档以删除已弃用的导入结构
[AIRFLOW-1846][AIRFLOW-1697] 将 Ad Hoc Query 隐藏在 secure_mode 配置之后
[AIRFLOW-1948] 包含 on_kill 失败的详细信息
[AIRFLOW-1938] 清理未使用的异常
[AIRFLOW-1932] 添加 GCP Pub/Sub Pull 和 Ack
[AIRFLOW-XXX] 清理 coveralls
[AIRFLOW-XXX] 删除未使用的 coveralls 令牌
[AIRFLOW-1938] 移除 setup.py 中的标签版本检查
[AIRFLOW-1916] 不要从
run --raw
上传日志到远程[AIRFLOW-XXX] 修复 Python3 上失败的 PubSub 测试
[AIRFLOW-XXX] 升级到 Python 3.5 并禁用 dask 测试
[AIRFLOW-1913] 添加新的 GCP PubSub 操作符
[AIRFLOW-1525] 修复次要的 LICENSE 和 NOTICE 问题
[AIRFLOW-1687] 修复无加密时的 fernet 错误
[AIRFLOW-1912] airflow.processor 不应传播日志
[AIRFLOW-1911] 重命名 celeryd_concurrency
[AIRFLOW-1885] 修复 ready_prefix_on_cmdline 中的 IndexError
[AIRFLOW-1854] 改进独立集群模式下的 Spark 提交操作符
[AIRFLOW-1908] 修复 celery broker 选项配置加载
[AIRFLOW-1907] 将 max_ingestion_time 传递给 Druid hook
[AIRFLOW-1909] 添加用户列表的方法
[AIRFLOW-1893][AIRFLOW-1901] 在使用模拟时传播 PYTHONPATH
[AIRFLOW-1892] 修改 BQ hook 以提取按列过滤的数据
[AIRFLOW-1829] 支持查询作业中的模式更新
[AIRFLOW-1840] 使 celery 配置与 Celery 4 一致
[AIRFLOW-1878] 修复任务的 stderr/stdout 重定向
[AIRFLOW-1897][AIRFLOW-1873] 在 WebUI 中看不到正在运行实例的任务日志
[AIRFLOW-1896] 修复 bleach <> html5lib 不兼容性
[AIRFLOW-1884][AIRFLOW-1059] 重置外部 dagruns 的孤立任务状态
[AIRFLOW-XXX] 修复注释中的拼写错误
[AIRFLOW-1869] 不要对丢失的日志发出虚假警告
[AIRFLOW-1888] 添加 AWS Redshift 集群传感器
[AIRFLOW-1887] 重命名端点 URL 变量
[AIRFLOW-1873] 根据 TI 状态将 TI.try_number 设置为正确的值
[AIRFLOW-1891] 修复默认配置模板中的非 ASCII 拼写错误
[AIRFLOW-1879] 在 ti 内完全处理 ti 日志
[AIRFLOW-1869] 将更多错误消息写入 gcs 和文件日志
[AIRFLOW-1876] 将子任务 ID 写入任务日志头
[AIRFLOW-1554] 修复错误的 DagFileProcessor 终止方法调用
[AIRFLOW-342] 不要使用 amqp、rpc 作为结果后端
[AIRFLOW-966] 使 celery broker_transport_options 可配置
[AIRFLOW-1881] 在任务日志中记录操作符日志
[AIRFLOW-XXX] 将 DataReply 添加到 Airflow 用户列表
[AIRFLOW-1883] 获取 Google Cloud Storage 中对象的文件大小
[AIRFLOW-1872] 为包括父级在内的所有处理程序设置上下文
[AIRFLOW-1855][AIRFLOW-1866] 添加 GCS 复制操作符以复制多个文件
[AIRFLOW-1870] 启用 flake8 测试
[AIRFLOW-1785] 启用 Python 3 测试
[AIRFLOW-1850] 在屏蔽之前复制 cmd
[AIRFLOW-1665] 在数据库错误时重新连接
[AIRFLOW-1559] 在退出时释放 SQLAlchemy 引擎
[AIRFLOW-1559] 关闭子进程中的文件句柄
[AIRFLOW-1559] 使数据库池可选
[AIRFLOW-1848][Airflow-1848] 修复 DataFlowPythonOperator py_file 扩展文档注释
[AIRFLOW-1843] 添加带有前缀的 Google Cloud Storage 传感器
[AIRFLOW-1803] 时区文档
[AIRFLOW-1826] 更新视图以使用时区感知对象
[AIRFLOW-1827] 修复 api 端点日期解析
[AIRFLOW-1806] 在使用 cron 时使用朴素 datetime
[AIRFLOW-1809] 更新测试以使用时区感知对象
[AIRFLOW-1806] 将朴素 datetime 用于 cron 调度
[AIRFLOW-1807] 强制使用时区感知数据库字段
[AIRFLOW-1808] 将所有 utcnow() 转换为时区感知
[AIRFLOW-1804] 添加时区配置选项
[AIRFLOW-1802] 将数据库字段转换为时区感知
[AIRFLOW-XXX] 将 dask 锁文件添加到排除项
[AIRFLOW-1790] 添加对 AWS Batch 操作符的支持
[AIRFLOW-XXX] 更新 README.md
[AIRFLOW-1820] 从指标名称中删除时间戳
[AIRFLOW-1810] 删除迁移中未使用的 mysql 导入。
[AIRFLOW-1838] 正确记录 collect_dags 异常
[AIRFLOW-1842] 修复 gcs 到 gcs 复制操作符的超类名称
[AIRFLOW-1845] 模态背景现在覆盖长页面或高页面
[AIRFLOW-1229] 添加指向 Run Id 的链接,包括 execution_date
[AIRFLOW-1842] 添加 gcs 到 gcs 复制操作符,并在需要时重命名
[AIRFLOW-1841] 在操作符和 hook 中将 False 更改为 None
[AIRFLOW-1839] 修复 S3Hook boto -> boto3 迁移中的更多错误
[AIRFLOW-1830] 在 Google 身份验证后端支持多个域
[AIRFLOW-1831] 添加 driver-classpath spark 提交
[AIRFLOW-1795] 在迁移到 boto3 后正确调用 S3Hook
[AIRFLOW-1811] 修复渲染 Druid 操作符
[AIRFLOW-1819] 修复 slack 操作符单元测试错误
[AIRFLOW-1805] 允许通过连接传递 Slack 令牌
[AIRFLOW-1816] 将 region 参数添加到 Dataproc 操作符
[AIRFLOW-868] 添加 postgres_to_gcs 操作符和单元测试
[AIRFLOW-1613] 使 mysql_to_gcs_operator 与 py3 兼容
[AIRFLOW-1817] 将 boto3 用于 s3 依赖项
[AIRFLOW-1813] 修复 SSH 操作符空缓冲区
[AIRFLOW-1801][AIRFLOW-288] 对执行日期进行 URL 编码
[AIRFLOW-1563] 捕获在符号链接最新日志目录时产生的 OSError
[AIRFLOW-1794] 删除 Python 3 中对 Exception.message 的使用
[AIRFLOW-1799] 修复引发错误的日志行
[AIRFLOW-1102] 升级 gunicorn >=19.4.0
[AIRFLOW-1756] 修复 S3TaskHandler 以使用基于 Boto3 的 S3Hook
[AIRFLOW-1797] S3Hook.load_string 在 Python3 上不起作用
[AIRFLOW-646] 将 docutils 添加到 setup_requires
[AIRFLOW-1792] 缺少 DruidOperator 的间隔
[AIRFLOW-1789][AIRFLOW-1712] 将 SSHOperator stderr 记录到 log.warning
[AIRFLOW-1787] 修复任务实例批量清除和设置状态错误
[AIRFLOW-1780] 修复父级挂起的带有 unicode 的长输出行
[AIRFLOW-387] 正确关闭 SQLAlchemy 会话
[AIRFLOW-1779] 将 keepalive 数据包添加到 ssh hook
[AIRFLOW-1669] 修复 Docker 并将 moto 固定为 1.1.19
[AIRFLOW-71] 添加对私有 Docker 镜像的支持
[AIRFLOW-XXX] 提供 ‘ds’ 变量的线索
[AIRFLOW-XXX] 更正 faq 文档页面中的拼写错误
[AIRFLOW-1571] 添加 AWS Lambda Hook
[AIRFLOW-1675] 修复 API 文档的文档字符串
[AIRFLOW-1712][AIRFLOW-756][AIRFLOW-751] 记录 SSHOperator 输出
[AIRFLOW-1776] 捕获 stdout 和 stderr 以进行日志记录
[AIRFLOW-1765] 使实验性 API 在不需要 Kerberos 的情况下可安全
[AIRFLOW-1764] Web 界面不应使用实验性 API
[AIRFLOW-1771] 重命名 heartbeat 以避免混淆
[AIRFLOW-1769] 添加对 VirtualenvOperator 中模板的支持
[AIRFLOW-1763] 修复 S3TaskHandler 单元测试
[AIRFLOW-1315] 添加 Qubole 文件和分区传感器
[AIRFLOW-1018] 使处理器使用日志框架
[AIRFLOW-1695] 使用 boto3 添加 RedshiftHook
[AIRFLOW-1706] 修复 MSSQL 后端的查询错误
[AIRFLOW-1711] 使用 ldap3 字典进行组成员身份
[AIRFLOW-1723] 使 sendgrid 成为插件
[AIRFLOW-1757] 将缺失的选项添加到 SparkSubmitOperator
[AIRFLOW-1734][Airflow 1734] Sqoop hook/操作符增强
[AIRFLOW-1761] 修复 scheduler.rst 中的类型
[AIRFLOW-1731] 为日志记录设置 pythonpath
[AIRFLOW-1641] 处理调度程序中的执行器事件
[AIRFLOW-1744] 确保可以设置 max_tries
[AIRFLOW-1732] 改进 dataflow hook 日志记录
[AIRFLOW-1736] 将 HotelQuickly 添加到 Who Uses Airflow
[AIRFLOW-1657] 处理失败的 qubole 操作符
[AIRFLOW-1677] 修复 example_qubole_operator 中的拼写错误
[AIRFLOW-926] 修复 JDBC Hook
[AIRFLOW-1520] Boto3 S3Hook, S3Log
[AIRFLOW-1716] 修复 SimpleDag 中的多个 __init__ def
[AIRFLOW-XXX] 修复树视图中的 DateTime
[AIRFLOW-1719] 修复小拼写错误
[AIRFLOW-1432] Y 轴的图表标签不可见
[AIRFLOW-1743] 正确验证 ldap 过滤器
[AIRFLOW-1745] 恢复默认信号处置
[AIRFLOW-1741] 正确隐藏任务持续时间页面上的第二个图表
[AIRFLOW-1728] 将 networkUri、subnet、tags 添加到 Dataproc 操作符
[AIRFLOW-1726] 将 copy_expert psycopg2 方法添加到 PostgresHook
[AIRFLOW-1330] 在添加连接时将 conn_type 参数添加到 CLI
[AIRFLOW-1698] 删除 systemd 中的 SCHEDULER_RUNS 环境变量
[AIRFLOW-1694] 停止使用 itertools.izip
[AIRFLOW-1692] 更改 test_views 文件名以支持 Windows
[AIRFLOW-1722] 修复调度程序自动重启输出文件名中的拼写错误
[AIRFLOW-1723] 在电子邮件后端支持 sendgrid
[AIRFLOW-1718] 在 Dataproc 作业请求执行中设置 num_retries
[AIRFLOW-1727] 为 DataProcHook 添加单元测试
[AIRFLOW-1631] 修复单元测试中的定时问题
[AIRFLOW-1631] 修复本地执行器的无界并行性
[AIRFLOW-1724] 将 Fundera 添加到谁使用 Airflow?
[AIRFLOW-1683] 在超时时取消 BigQuery 作业。
[AIRFLOW-1714] 修复拼写错误:s/separate/separate/
[AIRFLOW-1681] 在任务实例视图中添加批量清除
[AIRFLOW-1696] 修复 dataproc 版本标签错误
[AIRFLOW-1613] 处理 MySqlToGoogleCloudStorageOperator 中的二进制字段
[AIRFLOW-1697] 禁用图表端点的模式
[AIRFLOW-1691] 添加更好的 Google 云日志记录文档
[AIRFLOW-1690] 添加 gcs 错误消息的详细信息
[AIRFLOW-1682] 使 S3TaskHandler 在关闭时写入 S3
[AIRFLOW-1634] 添加 task_concurrency 功能
[AIRFLOW-1676] 使 GCSTaskHandler 在关闭时写入 GCS
[AIRFLOW-1678] 修复函数文档字符串中错误重复的单词
[AIRFLOW-1323] 使 Dataproc 操作符参数名称一致
[AIRFLOW-1590] 修复未使用的模块和变量
[AIRFLOW-1671] 将 @apply_defaults 添加回 gcs 下载操作符
[AIRFLOW-988] 修复重复的 SLA 错过回调
[AIRFLOW-1611] 自定义日志记录
[AIRFLOW-1668] 为 Postgres 连接公开 keepalives_idle
[AIRFLOW-1658] 在超时时终止 Druid 任务
[AIRFLOW-1669][AIRFLOW-1368] 修复 Docker 导入
[AIRFLOW-891] 使 Web 服务器时钟包括日期
[AIRFLOW-1560] 添加 AWS DynamoDB hook 和操作符以插入批量项目
[AIRFLOW-1654] 在 DAG 视图中显示链接图标的工具提示
[AIRFLOW-1660] 将网页宽度更改为全宽
[AIRFLOW-1664] 将文件写为二进制而不是 str
[AIRFLOW-1659] 修复 file_task_handler.py 中的无效 obj 属性错误
[AIRFLOW-1635] 允许创建 GCP 连接而无需 JSON 文件
[AIRFLOW-1650] 修复自定义 celery 配置加载
[AIRFLOW-1647] 修复 Spark-sql hook
[AIRFLOW-1587] 修复 CeleryExecutor 导入错误
[Airflow-1640][AIRFLOW-1640] 添加 qubole 默认连接
[AIRFLOW-1576] 将 region 参数添加到 Dataproc{*}Operators
[AIRFLOW-1643] 将 healthjump 添加到官方使用列表
[AIRFLOW-1626] 将 Azri Solutions 添加到 Airflow 用户
[AIRFLOW-1636] 添加 AWS 和 EMR 连接类型
[AIRFLOW-1527] 重构 celery 配置
[AIRFLOW-1639] 修复 Fernet 错误处理
[AIRFLOW-1637] 修复 Travis CI 构建状态链接
[AIRFLOW-1628] 修复 sqlsensor 的文档字符串
[AIRFLOW-1331] 添加 SparkSubmitOperator 选项
[AIRFLOW-1627] 仅在必要时在 SubDAG 初始化中查询池
[AIRFLOW-1629] 使 extra 成为编辑连接表单中的文本区域
[AIRFLOW-1368] 在退出时自动删除 Docker 容器
[AIRFLOW-289] 使 Airflow 与时区无关
[AIRFLOW-1356] 将
--celery_hostname
添加到airflow worker
[AIRFLOW-1247] 修复 ignore_all_dependencies 参数被忽略
[AIRFLOW-1621] 添加服务器端分页的测试
[AIRFLOW-1591] 避免在渲染日志文件名时出现属性错误
[AIRFLOW-1031] 将硬编码替换为 DagRun.ID_PREFIX
[AIRFLOW-1604] 将 logger 重命名为 log
[AIRFLOW-1512] 添加 PythonVirtualenvOperator
[AIRFLOW-1617] 修复 Variable 端点中的 XSS 漏洞
[AIRFLOW-1497] 在更改连接类型时重置隐藏字段
[AIRFLOW-1619] 将 poll_sleep 参数添加到 GCP dataflow 操作符
[AIRFLOW-XXX] 删除 landscape.io 配置
[AIRFLOW-XXX] 删除无效的服务徽章
[AIRFLOW-1177] 修复 Variable.setdefault w/现有 JSON
[AIRFLOW-1600] 修复 get_fernet 中的异常处理
[AIRFLOW-1614] 将 inspect.stack() 替换为 sys._getframe()
[AIRFLOW-1519] 在 DAG 列表中添加服务器端分页
[AIRFLOW-1309] 允许 hive_to_druid 接受 tblproperties
[AIRFLOW-1613] 使 MySqlToGoogleCloudStorageOperator 与 python3 兼容
[AIRFLOW-1603] 将 PAYMILL 添加到公司列表
[AIRFLOW-1609] 修复 gitignore 以忽略所有 venvs
[AIRFLOW-1601] 添加可配置的任务清理时间
Airflow 1.9.0 (2018-01-02)¶
重大更改¶
SSH Hook 更新,以及新的 SSH 操作符和 SFTP 操作符¶
SSH Hook 现在使用 Paramiko 库来创建 ssh 客户端连接,而不是像以前(<1.9.0)那样基于子进程执行 ssh 命令,因此这是不向后兼容的。
更新 SSHHook 构造函数
使用 SSHOperator 类代替现在已删除的 SSHExecuteOperator。有关用法信息,请参阅 test_ssh_operator.py。
添加了 SFTPOperator 以执行从服务器 A 到服务器 B 的安全文件传输。有关用法信息,请参阅 test_sftp_operator.py。
如果您正在使用
ftpHook
,则无需更新,它将继续按原样工作。
S3Hook 已切换为使用 Boto3¶
airflow.hooks.S3_hook.S3Hook 已切换为使用 boto3 而不是较旧的 boto(又名 boto2)。这导致以下类的几个不向后兼容的更改:S3Hook
构造函数不再接受
s3_conn_id
。现在称为aws_conn_id
。默认连接现在是 “aws_default” 而不是 “s3_default”
get_bucket
返回的对象的返回类型现在是 boto3.s3.Bucketget_key
和get_wildcard_key
的返回类型现在是 boto3.S3.Object。
如果您在 DAG 中使用这些中的任何一个并指定了连接 ID,则需要将连接的参数名称更新为 “aws_conn_id”:S3ToHiveTransfer、S3PrefixSensor、S3KeySensor、RedshiftToS3Transfer。
日志更新¶
Airflow 的日志结构已被重写,以使配置更容易,并且日志系统更加透明。
关于日志的快速回顾¶
记录器是进入日志系统的入口点。每个记录器都是一个命名的存储桶,可以将消息写入其中进行处理。记录器配置为具有日志级别。此日志级别描述了记录器将处理的消息的严重性。Python 定义了以下日志级别:DEBUG、INFO、WARNING、ERROR 或 CRITICAL。
写入记录器的每条消息都是一个日志记录。每个日志记录都包含一个日志级别,指示该特定消息的严重性。日志记录还可以包含描述正在记录的事件的有用元数据。这可以包括诸如堆栈跟踪或错误代码之类的详细信息。
当消息被发送给记录器时,会将消息的日志级别与记录器的日志级别进行比较。如果消息的日志级别达到或超过记录器本身的日志级别,则该消息将进行进一步处理。如果未达到,则该消息将被忽略。
一旦记录器确定需要处理消息,它就会被传递给处理程序。此配置现在更加灵活,并且可以轻松地在单个文件中维护。
Airflow 日志中的更改¶
Airflow 的日志记录机制已被重构为使用 Python 的内置 logging
模块来执行应用程序的日志记录。通过使用现有的 LoggingMixin
扩展类,所有日志记录都将通过中央记录器进行。此外,BaseHook
和 BaseOperator
已经扩展了此类,因此可以轻松进行日志记录。
主要好处是通过设置单个集中的 python 文件来简化日志记录配置。免责声明;仍然有一些内联配置,但这最终将被删除。新的日志类是通过在您的 ~/airflow/airflow.cfg
文件中设置点分路径来定义的
# Logging class
# Specify the class that will specify the logging configuration
# This class has to be on the python classpath
logging_config_class = my.path.default_local_settings.LOGGING_CONFIG
日志配置文件需要在 PYTHONPATH
上,例如 $AIRFLOW_HOME/config
。默认情况下会加载此目录。可以将任何目录添加到 PYTHONPATH
,当配置位于另一个目录中或在 Docker 情况下挂载卷时,这可能很方便。
可以从 airflow/config_templates/airflow_local_settings.py
中获取配置作为起点。将内容复制到 ${AIRFLOW_HOME}/config/airflow_local_settings.py
,并根据需要更改配置。
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
import os
from airflow import configuration as conf
# TODO: Logging format and level should be configured
# in this file instead of from airflow.cfg. Currently
# there are other log format and level configurations in
# settings.py and cli.py. Please see AIRFLOW-1455.
LOG_LEVEL = conf.get('core', 'LOGGING_LEVEL').upper()
LOG_FORMAT = conf.get('core', 'log_format')
BASE_LOG_FOLDER = conf.get('core', 'BASE_LOG_FOLDER')
PROCESSOR_LOG_FOLDER = conf.get('scheduler', 'child_process_log_directory')
FILENAME_TEMPLATE = '{{ ti.dag_id }}/{{ ti.task_id }}/{{ ts }}/{{ try_number }}.log'
PROCESSOR_FILENAME_TEMPLATE = '{{ filename }}.log'
DEFAULT_LOGGING_CONFIG = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'airflow.task': {
'format': LOG_FORMAT,
},
'airflow.processor': {
'format': LOG_FORMAT,
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'airflow.task',
'stream': 'ext://sys.stdout'
},
'file.task': {
'class': 'airflow.utils.log.file_task_handler.FileTaskHandler',
'formatter': 'airflow.task',
'base_log_folder': os.path.expanduser(BASE_LOG_FOLDER),
'filename_template': FILENAME_TEMPLATE,
},
'file.processor': {
'class': 'airflow.utils.log.file_processor_handler.FileProcessorHandler',
'formatter': 'airflow.processor',
'base_log_folder': os.path.expanduser(PROCESSOR_LOG_FOLDER),
'filename_template': PROCESSOR_FILENAME_TEMPLATE,
}
# When using s3 or gcs, provide a customized LOGGING_CONFIG
# in airflow_local_settings within your PYTHONPATH, see UPDATING.md
# for details
# 's3.task': {
# 'class': 'airflow.utils.log.s3_task_handler.S3TaskHandler',
# 'formatter': 'airflow.task',
# 'base_log_folder': os.path.expanduser(BASE_LOG_FOLDER),
# 's3_log_folder': S3_LOG_FOLDER,
# 'filename_template': FILENAME_TEMPLATE,
# },
# 'gcs.task': {
# 'class': 'airflow.utils.log.gcs_task_handler.GCSTaskHandler',
# 'formatter': 'airflow.task',
# 'base_log_folder': os.path.expanduser(BASE_LOG_FOLDER),
# 'gcs_log_folder': GCS_LOG_FOLDER,
# 'filename_template': FILENAME_TEMPLATE,
# },
},
'loggers': {
'': {
'handlers': ['console'],
'level': LOG_LEVEL
},
'airflow': {
'handlers': ['console'],
'level': LOG_LEVEL,
'propagate': False,
},
'airflow.processor': {
'handlers': ['file.processor'],
'level': LOG_LEVEL,
'propagate': True,
},
'airflow.task': {
'handlers': ['file.task'],
'level': LOG_LEVEL,
'propagate': False,
},
'airflow.task_runner': {
'handlers': ['file.task'],
'level': LOG_LEVEL,
'propagate': True,
},
}
}
要自定义日志记录(例如,使用日志轮换),请定义 Python 必须提供的一个或多个日志处理程序。有关 Python 日志记录的更多详细信息,请参阅 官方日志记录文档。
此外,此更改还简化了 DAG 本身内的日志记录
root@ae1bc863e815:/airflow# python
Python 3.6.2 (default, Sep 13 2017, 14:26:54)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from airflow.settings import *
>>>
>>> from datetime import datetime
>>> from airflow.models.dag import DAG
>>> from airflow.operators.dummy import DummyOperator
>>>
>>> dag = DAG('simple_dag', start_date=datetime(2017, 9, 1))
>>>
>>> task = DummyOperator(task_id='task_1', dag=dag)
>>>
>>> task.log.error('I want to say something..')
[2017-09-25 20:17:04,927] {<stdin>:1} ERROR - I want to say something..
file_task_handler 的模板路径¶
file_task_handler
记录器已变得更加灵活。可以通过在 FILENAME_TEMPLATE
配置变量中提供 Jinja 模板来更改默认格式,{dag_id}/{task_id}/{execution_date}/{try_number}.log
。有关更多信息,请参阅 file_task_handler
。
我正在使用 S3Log 或 GCSLogs,我该怎么办?!¶
如果您正在记录到 Google Cloud Storage,请参阅 Google Cloud Platform 文档以获取日志记录说明。
如果您正在使用 S3,则说明应与上面的 Google Cloud Platform 说明基本相同。您将需要一个自定义日志配置。您 Airflow 配置中的 REMOTE_BASE_LOG_FOLDER
配置键已删除,因此您需要执行以下步骤
从 airflow/config_templates/airflow_logging_settings.py 复制日志配置。
将其放在 Python 导入路径
PYTHONPATH
内的目录中。如果您使用的是 Python 2.7,请确保存在任何__init__.py
文件,以便可以导入它。通过在配置中显式设置
REMOTE_BASE_LOG_FOLDER
的路径来更新配置。不再使用REMOTE_BASE_LOG_FOLDER
键。将
logging_config_class
设置为文件名和字典。例如,如果您将custom_logging_config.py
放在您的PYTHONPATH
的基础上,则需要在您的配置中将logging_config_class = custom_logging_config.LOGGING_CONFIG
设置为 Airflow 1.8。
已弃用的功能¶
这些功能被标记为已弃用。它们可能仍然有效(并引发 DeprecationWarning
),但不再受支持,并且将在 Airflow 2.0 中完全删除
如果您在
contrib.operators.Dataproc{*}Operator
(s) 中显式使用google_cloud_conn_id
或dataproc_cluster
参数名称,请务必将它们分别重命名为gcp_conn_id
或cluster_name
。我们已重命名这些参数以保持一致性。(AIRFLOW-1323)post_execute()
挂钩现在接受两个参数,context
和result
(AIRFLOW-886)以前,post_execute() 只接受一个参数
context
。contrib.hooks.gcp_dataflow_hook.DataFlowHook
开始使用--runner=DataflowRunner
而不是DataflowPipelineRunner
,后者已从包google-cloud-dataflow-0.6.0
中删除。XCom 消息的 pickle 类型已替换为 json,以防止 RCE 攻击。请注意,JSON 序列化比 pickle 更严格,因此,如果要通过 XCom 传递原始字节,则必须使用 base64 之类的编码对其进行编码。默认情况下,pickle 仍然启用,直到 Airflow 2.0。要禁用它,请在 Airflow 配置中设置 enable_xcom_pickling = False。
更新日志¶
[AIRFLOW-1525] 修复次要的 LICENSE 和 NOTICE 问题
[AIRFLOW-XXX] 将版本提升至 1.9.0
[AIRFLOW-1897][AIRFLOW-1873] 在 WebUI 中看不到正在运行实例的任务日志
[AIRFLOW-XXX] 确保会话已提交
[AIRFLOW-1896] 修复 bleach <> html5lib 不兼容性
[AIRFLOW-XXX] 修复日志处理程序测试
[AIRFLOW-1873] 根据 TI 状态将 TI.try_number 设置为正确的值
[AIRFLOW-1554] 修复错误的 DagFileProcessor 终止方法调用
[AIRFLOW-1872] 为包括父级在内的所有处理程序设置上下文
[AIRFLOW-XXX] 将 dask 锁文件添加到排除项
[AIRFLOW-1839] 修复 S3Hook boto -> boto3 迁移中的更多错误
[AIRFLOW-1795] 在迁移到 boto3 后正确调用 S3Hook
[AIRFLOW-1813] 修复 SSH 操作符空缓冲区
[AIRFLOW-1794] 删除 Python 3 中对 Exception.message 的使用
[AIRFLOW-1799] 修复引发错误的日志行
[AIRFLOW-1102] 升级 gunicorn >=19.4.0
[AIRFLOW-1756] 修复 S3TaskHandler 以使用基于 Boto3 的 S3Hook
[AIRFLOW-1797] S3Hook.load_string 在 Python3 上不起作用
[AIRFLOW-1792] 缺少 DruidOperator 的间隔
[AIRFLOW-1789][AIRFLOW-1712] 将 SSHOperator stderr 记录到 log.warning
[AIRFLOW-1669] 修复 Docker 并将 Moto 固定为 1.1.19
[AIRFLOW-71] 添加对私有 Docker 镜像的支持
[AIRFLOW-1779] 将 keepalive 数据包添加到 ssh hook
[AIRFLOW-XXX] 提供 ‘ds’ 变量的线索
[AIRFLOW-XXX] 更正 faq 文档页面中的拼写错误
[AIRFLOW-1571] 添加 AWS Lambda Hook
[AIRFLOW-1675] 修复 API 文档的文档字符串
[AIRFLOW-1712][AIRFLOW-756][AIRFLOW-751] 记录 SSHOperator 输出
[AIRFLOW-1776] 捕获 stdout 和 stderr 以进行日志记录
[AIRFLOW-1765] 使实验性 API 在不需要 Kerberos 的情况下可安全
[AIRFLOW-1764] Web 界面不应使用实验性 API
[AIRFLOW-1634] 添加 task_concurrency 功能
[AIRFLOW-1018] 使处理器使用日志框架
[AIRFLOW-1695] 使用 boto3 添加 RedshiftHook
[AIRFLOW-1706] 修复 MSSQL 后端的查询错误
[AIRFLOW-1711] 使用 ldap3 字典进行组成员身份
[AIRFLOW-1757] 将缺失的选项添加到 SparkSubmitOperator
[AIRFLOW-1734][Airflow 1734] Sqoop hook/操作符增强
[AIRFLOW-1731] 为日志记录设置 pythonpath
[AIRFLOW-1641] 处理调度程序中的执行器事件
[AIRFLOW-1744] 确保可以设置 max_tries
[AIRFLOW-1330] 在添加连接时将 conn_type 参数添加到 CLI
[AIRFLOW-926] 修复 JDBC Hook
[AIRFLOW-1520] Boto3 S3Hook, S3Log
[AIRFLOW-XXX] 修复树视图中的 DateTime
[AIRFLOW-1432] Y 轴的图表标签不可见
[AIRFLOW-1743] 正确验证 ldap 过滤器
[AIRFLOW-1745] 恢复默认信号处置
[AIRFLOW-1741] 正确隐藏任务持续时间页面上的第二个图表
[AIRFLOW-1726] 将 copy_expert psycopg2 方法添加到 PostgresHook
[AIRFLOW-1698] 删除 systemd 中的 SCHEDULER_RUNS 环境变量
[AIRFLOW-1694] 停止使用 itertools.izip
[AIRFLOW-1692] 更改 test_views 文件名以支持 Windows
[AIRFLOW-1722] 修复调度程序自动重启输出文件名中的拼写错误
[AIRFLOW-1691] 添加更好的 Google Cloud 日志记录文档
[AIRFLOW-1690] 添加 gcs 错误消息的详细信息
[AIRFLOW-1682] 使 S3TaskHandler 在关闭时写入 S3
[AIRFLOW-1676] 使 GCSTaskHandler 在关闭时写入 GCS
[AIRFLOW-1635] 允许创建 GCP 连接而无需 JSON 文件
[AIRFLOW-1323] 使 Dataproc 操作符参数名称一致
[AIRFLOW-1590] 修复未使用的模块和变量
[AIRFLOW-988] 修复重复的 SLA 错过回调
[AIRFLOW-1611] 自定义日志记录
[AIRFLOW-1668] 为 Postgres 连接公开 keepalives_idle
[AIRFLOW-1658] 在超时时终止 Druid 任务
[AIRFLOW-1669][AIRFLOW-1368] 修复 Docker 导入
[AIRFLOW-1560] 添加 AWS DynamoDB hook 和操作符以插入批量项目
[AIRFLOW-1654] 在 DAG 视图中显示链接图标的工具提示
[AIRFLOW-1660] 将网页宽度更改为全宽
[AIRFLOW-1664] 将文件写为二进制而不是 str
[AIRFLOW-1659] 修复 file_task_handler.py 中的无效 obj 属性错误
[AIRFLOW-1650] 修复自定义 celery 配置加载
[AIRFLOW-1647] 修复 Spark-sql hook
[AIRFLOW-1587] 修复 CeleryExecutor 导入错误
[AIRFLOW-1636] 添加 AWS 和 EMR 连接类型
[AIRFLOW-1527] 重构 celery 配置
[AIRFLOW-1639] 修复 Fernet 错误处理
[AIRFLOW-1628] 修复 sqlsensor 的文档字符串
[AIRFLOW-1331] 添加 SparkSubmitOperator 选项
[AIRFLOW-1627] 仅在必要时在 SubDAG 初始化中查询池
[AIRFLOW-1629] 使 extra 成为编辑连接表单中的文本区域
[AIRFLOW-1621] 添加服务器端分页的测试
[AIRFLOW-1519] 在 DAG 列表中添加服务器端分页
[AIRFLOW-289] 使 Airflow 与时区无关
[AIRFLOW-1356] 将
--celery_hostname
添加到airflow worker
[AIRFLOW-1591] 避免在渲染日志文件名时出现属性错误
[AIRFLOW-1031] 将硬编码替换为 DagRun.ID_PREFIX
[AIRFLOW-1604] 将 logger 重命名为 log
[AIRFLOW-1512] 添加 PythonVirtualenvOperator
[AIRFLOW-1617] 修复 Variable 端点中的 XSS 漏洞
[AIRFLOW-1497] 在更改连接类型时重置隐藏字段
[AIRFLOW-1177] 修复 Variable.setdefault w/现有 JSON
[AIRFLOW-1600] 修复 get_fernet 中的异常处理
[AIRFLOW-1614] 将 inspect.stack() 替换为 sys._getframe()
[AIRFLOW-1613] 使 MySqlToGoogleCloudStorageOperator 与 python3 兼容
[AIRFLOW-1609] 修复 gitignore 以忽略所有 venvs
[AIRFLOW-1601] 添加可配置的任务清理时间
[AIRFLOW-XXX] 提升 airflow 1.9.0alpha0 版本
[AIRFLOW-1608] 处理 GCP Dataflow 挂钩中的待处理作业状态
[AIRFLOW-1606] 使用非静态 DAG.sync_to_db
[AIRFLOW-1606][Airflow-1606][AIRFLOW-1605][AIRFLOW-160] DAG.sync_to_db 现在是一个普通方法
[AIRFLOW-1602] DAG 类中的 LoggingMixin
[AIRFLOW-1593] 在 WasbHook 中公开 load_string
[AIRFLOW-1597] 添加 GameWisp 作为 Airflow 用户
[AIRFLOW-1594] 不要将测试包安装到 Python 根目录中。[]
[AIRFLOW-1582] 改进 Airflow 中的日志记录
[AIRFLOW-1476] 为源版本添加 INSTALL 说明
[AIRFLOW-XXX] 将用户名和密码保存在 airflow-pr 中
[AIRFLOW-1522] 增加 MySQL 变量中 var 字段的文本大小
[AIRFLOW-950] 文档::integrations 上缺少 AWS 集成
[AIRFLOW-XXX] 1.8.2 发行说明
[AIRFLOW-1573] 删除
thrift < 0.10.0
要求[AIRFLOW-1584] 删除不安全的 /headers 端点
[AIRFLOW-1586] 将日期类型映射添加到 mysql_to_gcs 运算符
[AIRFLOW-1579] 为 Bigquery Hook 的 BQ 加载任务添加对不规则行的支持
[AIRFLOW-1577] 向 DatabricksHook 添加令牌支持
[AIRFLOW-1580] 字符串格式化错误
[AIRFLOW-1567] 更新了 Google ML Engine 操作符/钩子的文档
[AIRFLOW-1574] 为 email 操作符的模板变量添加 ‘to’ 属性
[AIRFLOW-1572] 将 carbonite 添加到公司列表中
[AIRFLOW-1568] 修复 BigQueryHook 中的拼写错误
[AIRFLOW-1493][AIRFLOW-XXXX][WIP] 修复了愚蠢的问题
[AIRFLOW-1567][Airflow-1567] 将 cloudml 钩子和操作符重命名为 mlengine
[AIRFLOW-1568] 添加 datastore 导出/导入操作符
[AIRFLOW-1564] 使用 Jinja2 渲染日志文件名
[AIRFLOW-1562] Spark-sql 日志包含死锁
[AIRFLOW-1556][Airflow 1556] 在 BigQueryBaseCursor 中添加对 SQL 参数的支持
[AIRFLOW-108] 将 CreditCards.com 添加到公司列表
[AIRFLOW-1541] 将 channel 添加到 slack_operator 的模板字段
[AIRFLOW-1535] 在 dataproc 中添加服务帐户/作用域
[AIRFLOW-1384] 在 README.md 中添加 CaDC/ARGO
[AIRFLOW-1546] 将 Zymergen 80 添加到 README 中的组织列表
[AIRFLOW-1545] 将 Nextdoor 添加到公司列表
[AIRFLOW-1544] 将 DataFox 添加到公司列表
[AIRFLOW-1529] 添加逻辑以支持 Google BigQuery 加载作业中带引号的换行符
[AIRFLOW-1521] 修复 BigqueryTableDeleteOperator 的模板渲染
[AIRFLOW-1324] 通用化 Druid 操作符和钩子
[AIRFLOW-1516] 修复获取 fernet 时的错误处理
[AIRFLOW-1420][AIRFLOW-1473] 修复死锁检查
[AIRFLOW-1495] 修复 job_id 索引的迁移
[AIRFLOW-1483] 使列表中的页面大小一致
[AIRFLOW-1495] 在 job_id 上添加 TaskInstance 索引
[AIRFLOW-855] 在 XCom 中用 LargeBinary 替换 PickleType
[AIRFLOW-1505] 记录何时发生 Jinja 替换
[AIRFLOW-1504] 记录 dataproc 集群名称
[AIRFLOW-1239] 修复 base_task_runner 中日志的 unicode 错误
[AIRFLOW-1280] 修复 Gantt 图表高度
[AIRFLOW-1507] file_to_gcs 操作符中的模板参数
[AIRFLOW-1452] 解决方法上的锁
[AIRFLOW-1385] 使 Airflow 任务日志可配置
[AIRFLOW-940] 处理变量解密时的错误
[AIRFLOW-1492] 为任务成功/失败添加仪表
[AIRFLOW-1443] 更新 Airflow 配置文档
[AIRFLOW-1486] 意外的 S3 写入日志错误
[AIRFLOW-1487] 添加了所有正式使用 Airflow 的公司的链接
[AIRFLOW-1489] 修复 BigQueryCheckOperator 中的拼写错误
[AIRFLOW-1349] 修复回填以遵守限制
[AIRFLOW-1478] 图表所有者列应可排序
[AIRFLOW-1397][AIRFLOW-1] Airflow UI 1.8.1 中未显示“上次运行”列数据
[AIRFLOW-1474] 为
airflow clear
命令添加 dag_id 正则表达式功能[AIRFLOW-1445] 将 HivePartitionSensor UI 颜色更改为较浅的阴影
[AIRFLOW-1359] 在 Cloud ML eval 中使用 default_args
[AIRFLOW-1389] 支持 BigQueryOperator 中的 createDisposition
[AIRFLOW-1349] 重构 BackfillJob _execute
[AIRFLOW-1459] 修复了损坏的集成 .rst 格式
[AIRFLOW-1448] 回滚“修复 cli 在内存中读取日志文件”
[AIRFLOW-1398] 允许 ExternalTaskSensor 等待任务的多次运行
[AIRFLOW-1399] 修复 cli 在内存中读取日志文件
[AIRFLOW-1442] 从 ignore_all_deps 生成的命令中删除多余的空格
[AIRFLOW-1438] 更改调度程序中每个查询的批处理大小
[AIRFLOW-1439] 为 BQ 钩子和操作符添加最大计费层
[AIRFLOW-1437] 修改 BigQueryTableDeleteOperator
[Airflow 1332] 根据尝试次数拆分日志
[AIRFLOW-1385] 为 Airflow 任务日志创建抽象
[AIRFLOW-756][AIRFLOW-751] 用基于 paramiko 的方法替换 ssh 钩子、操作符和 sftp 操作符
[AIRFLOW-1393][[AIRFLOW-1393] 在 contrib/spark_submit_hook 中启用 Py3 测试[
[AIRFLOW-1345] 不要每次调度程序循环都使 TI 过期
[AIRFLOW-1059] 在调度程序中批量重置孤立任务
[AIRFLOW-1255] 修复 SparkSubmitHook 输出死锁
[AIRFLOW-1359] 为模型评估添加 Google CloudML 实用程序
[AIRFLOW-1247] 修复忽略所有依赖项参数的问题
[AIRFLOW-1401] 标准化 cloud ml 操作符参数
[AIRFLOW-1394] 向 GCS 钩子和操作符添加 quote_character 参数
[AIRFLOW-1402] 清理 SafeConfigParser DeprecationWarning
[AIRFLOW-1326][[AIRFLOW-1326][AIRFLOW-1184] 不要拆分参数数组 – 它已经是数组了。[
[AIRFLOW-1384] 添加 ARGO/CaDC 作为 Airflow 用户
[AIRFLOW-1357] 修复调度程序 zip 文件支持
[AIRFLOW-1382] 向 DockerOperator 添加工作目录选项
[AIRFLOW-1388] 向集成文档添加 Cloud ML Engine 操作符
[AIRFLOW-1387] 添加 unicode 字符串前缀
[AIRFLOW-1366] 向任务实例添加 max_tries
[AIRFLOW-1300] 启用使用 TBLPROPERTIES 创建表
[AIRFLOW-1271] 添加 Google CloudML 训练操作符
[AIRFLOW-300] 添加 Google Pubsub 钩子和操作符
[AIRFLOW-1343] 修复 dataproc 标签格式
[AIRFLOW-1367] 传递 Content-ID 以引用电子邮件中的内联图像,我们需要能够将 <img src=”cid:{}”/> 添加到 HTML。但是,当前未传递 Content-ID (cid),因此我们需要添加它
[AIRFLOW-1265] 修复 celery 执行器解析 CELERY_SSL_ACTIVE
[AIRFLOW-1272] Google Cloud ML 批量预测操作符
[AIRFLOW-1352][AIRFLOW-1335] 回滚 MemoryHandler 更改 ()[]
[AIRFLOW-1350] 向 Hive/SparkSQL DataProc 操作符添加 query_uri 参数
[AIRFLOW-1334] 在连接中检查调度程序上的任务是否为回填
[AIRFLOW-1343] 向 dataproc 操作符添加 Airflow 默认标签
[AIRFLOW-1273] 添加 Google Cloud ML 版本和模型操作符
[AIRFLOW-1273]AIRFLOW-1273] 添加 Google Cloud ML 版本和模型操作符
[AIRFLOW-1321] 修复隐藏字段键以忽略大小写
[AIRFLOW-1337] 使 log_format 键名小写
[AIRFLOW-1338][AIRFLOW-782] 将 GCP dataflow 钩子运行程序更改添加到 UPDATING.md
[AIRFLOW-801] 删除 BaseOperator 上过时的文档字符串
[AIRFLOW-1344] 修复 Python 3.5 读取日志时的文本编码错误
[AIRFLOW-1338] 修复不兼容的 GCP dataflow 钩子
[AIRFLOW-1333] 为 Google Cloud Storage 钩子启用复制功能
[AIRFLOW-1337] 允许通过 airflow.cfg 自定义日志格式
[AIRFLOW-1320] 更新 README 中的 LetsBonus 用户
[AIRFLOW-1335] 使用 MemoryHandler 进行缓冲日志记录
[AIRFLOW-1339] 将 Drivy 添加到用户列表中
[AIRFLOW-1275] 将 ‘airflow pool’ 放入 API
[AIRFLOW-1296] 将 SKIPPED 传播到所有下游任务
[AIRFLOW-1317] 修复 API 参考中的小问题
[AIRFLOW-1308] 禁用 Dask 的 nanny 使用
[AIRFLOW-1172] 支持每月第 n 个工作日的 cron 表达式
[AIRFLOW-936] 在 UI 中添加 DAG 的清除/标记成功功能
[AIRFLOW-1294] 回填可能会丢失要执行的任务
[AIRFLOW-1299] 在 Google Dataproc 集群中支持 imageVersion
[AIRFLOW-1291] 更新 NOTICE 和 LICENSE 文件以匹配 ASF 要求
[AIRFLOW-1301] 将 New Relic 添加到公司列表
[AIRFLOW-1289] 删除对调度程序线程数的限制
[AIRFLOW-1024] 忽略 celery 执行器错误 (#49)
[AIRFLOW-1265] 修复加载 celery 配置时的异常
[AIRFLOW-1290] 将文档作者设置为 ‘Apache Airflow’
[AIRFLOW-1242] 允许 project_id 中包含冒号。
[AIRFLOW-1282] 修复已知事件列排序
[AIRFLOW-1166] 加快 _change_state_for_tis_without_dagrun 的速度
[AIRFLOW-1208] 加快 cli 测试速度
[AIRFLOW-1192] 对 qubole_operator 进行一些增强
[AIRFLOW-1281] 默认按键字段对变量排序
[AIRFLOW-1277] 禁止使用空字段创建 KE
[AIRFLOW-1276] 禁止创建结束日期早于开始日期的事件
[AIRFLOW-1263] 图表的动态高度
[AIRFLOW-1266] 增加 gantt y 轴的宽度
[AIRFLOW-1244] 禁止创建名称为空的池
[AIRFLOW-1274][HTTPSENSOR] 将参数 params 重命名为 data
[AIRFLOW-654] 为带有 RabbitMQ 的 CeleryExecutor 添加 SSL 配置选项 - 添加 BROKER_USE_SSL 配置以提供通过 SSL 发送 AMQP 消息的选项 - 可以使用常用的 Airflow 选项(例如 airflow.cfg、环境变量等)进行设置
[AIRFLOW-1256] 将 United Airlines 添加到 readme
[AIRFLOW-1251] 将 eRevalue 添加到 Airflow 用户
[AIRFLOW-908] 在 cli 运行开始时打印主机名
[AIRFLOW-1237] 修复 IN-predicate sqlalchemy 警告
[AIRFLOW-1243] DAG 表格没有要显示的默认条目
[AIRFLOW-1245] 修复 test_trigger_dag_for_date 中的随机失败
[AIRFLOW-1248] 修复 worker 超时的错误配置名称
[AIRFLOW-1197] : SparkSubmitHook on_kill 错误
[AIRFLOW-1191] : SparkSubmitHook 自定义 cmd
[AIRFLOW-1234] 使用 UT 覆盖 utils.operator_helpers
[AIRFLOW-1217] 启用 Sqoop 日志记录
[AIRFLOW-645] 在 HttpHook 中支持 HTTPS 连接
[AIRFLOW-1231] 使用 flask_wtf.CSRFProtect
[AIRFLOW-1232] 删除已弃用的 readfp 警告
[AIRFLOW-1233] 使用单元测试覆盖 utils.json
[AIRFLOW-1227] 删除“日志”视图上的空列
[AIRFLOW-1226] 删除“作业”视图上的空列
[AIRFLOW-1221] 修复 DatabricksSubmitRunOperator 的模板错误
[AIRFLOW-1210] 启用 DbApiHook 单元测试
[AIRFLOW-1199] 修复创建模态
[AIRFLOW-1200] 禁止创建具有空键的变量
[AIRFLOW-1207] 启用 utils.helpers 单元测试
[AIRFLOW-1213] 向 sqoop 添加 hcatalog 参数
[AIRFLOW-1201] 更新已弃用的 ‘nose-parameterized’
[AIRFLOW-1186] 按 execution_date 对 dag.get_task_instances 排序
[AIRFLOW-1203] 锁定 Google API 客户端版本以修复 OAuth 问题
[AIRFLOW-1145] 修复 closest_date_partition 函数,如果 before 设置为 True,如果我们正在查找之前的最近日期,我们应该取之前日期列表中最新的日期。
[AIRFLOW-1180] 修复 test_csrf_rejection 的 flask-wtf 版本
[AIRFLOW-993] 更新日期推断逻辑
[AIRFLOW-1170] DbApiHook insert_rows 单独插入参数
[AIRFLOW-1041] 不要覆盖 xcom_push 方法[]
[AIRFLOW-860][AIRFLOW-935] 修复插件执行器导入循环和执行器选择
[AIRFLOW-1189] 修复使用 BigQueryHook 获取 DataFrame 失败的问题
[AIRFLOW-1184] SparkSubmitHook 不拆分 args
[AIRFLOW-1182] SparkSubmitOperator 模板字段
[AIRFLOW-823] 允许在 task_info API 中指定执行日期
[AIRFLOW-1175] 将 Pronto Tools 添加到 Airflow 用户列表
[AIRFLOW-1150] 修复 sparksql 钩子中的脚本执行[]
[AIRFLOW-1141] 删除 crawl_for_tasks
[AIRFLOW-1193] 将 Checkr 添加到使用 Airflow 的公司
[AIRFLOW-1168] 将 closing() 添加到所有连接和游标
[AIRFLOW-1188] 向 GoogleCloudStorageToBigQueryOperator 添加 max_bad_records 参数
[AIRFLOW-1187][AIRFLOW-1185] 修复文档中的 PyPi 包名称
[AIRFLOW-1185] 修复模板中的 PyPi URL
[AIRFLOW-XXX] 在 1.8.1 版本发布后更新 CHANGELOG、README 和 UPDATING
[AIRFLOW-1181] 向 gcs_hook 添加删除和列表功能
[AIRFLOW-1179] 修复 Pandas 0.2x 破坏 Google BigQuery 更改的问题
[AIRFLOW-1167] 在 FTPHook 修改时间中支持微秒
[AIRFLOW-1173] 将 Robinhood 添加到使用 Airflow 的用户
[AIRFLOW-945][AIRFLOW-941] 删除 psycopg2 连接解决方法
[AIRFLOW-1140] DatabricksSubmitRunOperator 应该模板化“json”字段。
[AIRFLOW-1160] 更新 Mesos 的 Spark 参数
[AIRFLOW 1149][AIRFLOW-1149] 允许在 Jinja2 模板中使用自定义过滤器
[AIRFLOW-1036] 随机化指数退避
[AIRFLOW-1155] 将 Tails.com 添加到社区
[AIRFLOW-1142] 不要重置回填的孤立状态
[AIRFLOW-492] 确保统计信息更新不会导致任务失败
[AIRFLOW-1119] 修复卸载查询,以便标题位于第一行[]
[AIRFLOW-1089] 添加 Spark 应用程序参数
[AIRFLOW-1125] 记录加密连接
[AIRFLOW-1122] 增加 UI 中的笔画宽度
[AIRFLOW-1138] 将缺少的许可证添加到 scripts 目录中的文件
[AIRFLOW-11-38][AIRFLOW-1136] 捕获 Sqoop 的无效参数
[AIRFLOW-1127] 将许可证声明移至 LICENSE
[AIRFLOW-1118] 将 evo.company 添加到 Airflow 用户
[AIRFLOW-1121][AIRFLOW-1004] 修复
airflow webserver --pid
以写出 pid 文件[AIRFLOW-1124] 不要将回填中的所有任务设置为已计划
[AIRFLOW-1120] 更新版本视图以包含 Apache 前缀
[AIRFLOW-1091] 添加可将 Jira 目标与合并进行比较的脚本
[AIRFLOW-1107] 添加对 ftps 非默认端口的支持
[AIRFLOW-1000] 将发行版更名为 Apache Airflow
[AIRFLOW-1094] 在 Travis 中对 contrib 下的单元测试进行运行
[AIRFLOW-1112] 在调度程序中,当池满时记录哪个池
[AIRFLOW-1106] 将 Groupalia/Letsbonus 添加到 ReadMe
[AIRFLOW-1109] 使用 kill 信号来终止进程并记录结果
[AIRFLOW-1074] 不要将排队任务计入并发限制
[AIRFLOW-1095] 使 ldap_auth memberOf 来自配置
[AIRFLOW-1090] 添加 HBO
[AIRFLOW-1035] 使用二进制指数退避
[AIRFLOW-1081] 提高持续时间图表的性能
[AIRFLOW-1078] 修复旧版本 flask 的 latest_runs 端点
[AIRFLOW-1085] 增强 SparkSubmitOperator
[AIRFLOW-1050] 不要将 up_for_retry 计数为未就绪
[AIRFLOW-1028] Airflow 的 Databricks 运算符
[AIRFLOW-1075] 安全文档清理
[AIRFLOW-1033][AIFRLOW-1033] 修复无计划 dag 的 ti_deps
[AIRFLOW-1016] 允许 HTTPSensor 上使用 HTTP HEAD 请求方法
[AIRFLOW-970] 在首页上异步加载 latest_runs
[AIRFLOW-111] 在调度程序并发检查中包含排队任务
[AIRFLOW-1001] 修复没有后续计划时的着陆时间
[AIRFLOW-1065] 添加通过 wasb:// 对 Azure Blob Storage 的支持
[AIRFLOW-947] 改进不可用 Presto 集群的异常
[AIRFLOW-1067] 在示例中使用 example.com
[AIRFLOW-1064] 将 TaskInstanceModelView 的默认排序更改为 job_id
[AIRFLOW-1030][AIRFLOW-1] 修复 HttpSensor 的钩子导入
[AIRFLOW-1051] 为 CliTests 添加 resetdb 测试
[AIRFLOW-1004][AIRFLOW-276] 修复
airflow webserver -D
以在后台运行[AIRFLOW-1062] 修复 DagRun#find 以返回正确的结果
[AIRFLOW-1011] 修复 SubDAG 的 BackfillJob._execute() 中的错误
[AIRFLOW-1038] 显式指定 Celery 序列化选项
[AIRFLOW-1054] 修复 test_dag 中损坏的导入
[AIRFLOW-1007] 为 chart_data 端点使用 Jinja 沙箱
[AIRFLOW-719] 修复 ShortCircuit、Branch 和 LatestOnly 中的竞争条件
[AIRFLOW-1043] 修复运算符的文档字符串
[AIRFLOW-840] 使票证更新器与 python3 兼容
[AIRFLOW-985] 扩展 sqoop 运算符和钩子
[AIRFLOW-1034] 使其可以连接到 sigv4 区域中的 S3
[AIRFLOW-1045] 使日志级别可通过 airflow.cfg 配置
[AIRFLOW-1047] 对传递给 Markup 的字符串进行消毒
[AIRFLOW-1040] 修复注释和文档字符串中的一些小拼写错误
[AIRFLOW-1017] 当没有 TI 时,get_task_instance 不应抛出异常
[AIRFLOW-1006] 将 config_templates 添加到 MANIFEST
[AIRFLOW-999] 添加对 Redis 数据库的支持
[AIRFLOW-1009] 从概念页面中删除 SQLOperator
[AIRFLOW-1006] 将配置模板移动到单独的文件
[AIRFLOW-1005] 改进 Airflow 启动时间
[AIRFLOW-1010] 添加用于签署发布的便捷脚本
[AIRFLOW-995] 删除对实际 Airflow 问题的引用
[AIRFLOW-681] 首页文档链接应指向 apache 存储库,而不是 airbnb 存储库
[AIRFLOW-705][AIRFLOW-706] 修复 run_command 错误
[AIRFLOW-990] 修复 DockerOperator 中的 Py27 Unicode 日志记录
[AIRFLOW-963] 修复未呈现的代码示例
[AIRFLOW-969] 捕获错误的 python_callable 参数
[AIRFLOW-984] 启用 SubDagOperator 的子类化
[AIRFLOW-997] 更新 setup.cfg 以指向 Apache
[AIRFLOW-994] 将 MiNODES 添加到官方 Airflow 用户列表
[AIRFLOW-995][AIRFLOW-1] 更新 GitHub PR 模板
[AIRFLOW-989] 如果有未完成的任务,则不要将 dag 运行标记为成功
[AIRFLOW-903] 用于默认 dag 视图的新配置设置
[AIRFLOW-979] 添加 GovTech GDS
[AIRFLOW-933] 将 eval 替换为 literal_eval 以防止 RCE
[AIRFLOW-974] 修复 mkdirs 竞争条件
[AIRFLOW-917] 修复错误消息的格式
[AIRFLOW-770] 重构 BaseHook,以便始终读取 env 变量
[AIRFLOW-900] 双重触发不应终止原始任务实例
[AIRFLOW-900] 修复 LocalTaskJob 中用于双重运行保护的错误
[AIRFLOW-932][AIRFLOW-932][AIRFLOW-921][AIRFLOW-910] 回填时不标记已删除的任务
[AIRFLOW-961] 在 SIGTERMed 时运行 onkill
[AIRFLOW-910] 对回填使用并行任务执行
[AIRFLOW-967] 将字符串包装在 native 中以实现 py2 ldap 兼容性
[AIRFLOW-958] 提高工具提示的可读性
AIRFLOW-959 清理并重新组织 .gitignore
AIRFLOW-960 添加 .editorconfig 文件
[AIRFLOW-931] 不要将 TaskInstances 中的状态设置为 QUEUED
[AIRFLOW-956] 使文档在 readthedocs.org 上工作
[AIRFLOW-954] 修复 configparser ImportError
[AIRFLOW-941] 为 psycopg2 使用定义的参数
[AIRFLOW-943] 更新用户列表中的 Digital First Media
[AIRFLOW-942] 将 mytaxi 添加到 Airflow 用户
[AIRFLOW-939] 将 .swp 添加到 gitignore
[AIRFLOW-719] 防止 DAG 过早结束
[AIRFLOW-938] 在 task_stats 查询中使用 true 的测试
[AIRFLOW-937] 提高 task_stats 的性能
[AIRFLOW-933] 使用 ast.literal_eval 而不是 eval,因为 ast.literal_eval 不执行输入。
[AIRFLOW-925] 恢复 cherry-pick 挑选的 airflow.hooks 更改
[AIRFLOW-919] 没有开始日期的运行任务不应破坏 DAG 的 UI
[AIRFLOW-802][AIRFLOW-1] 添加 spark-submit 运算符/钩子
[AIRFLOW-725] 使用密钥环存储 JIRA 的凭据
[AIRFLOW-916] 删除已弃用的 readfp 函数
[AIRFLOW-911] 为测试添加着色和计时
[AIRFLOW-906] 将代码图标从闪电符号更新为文件
[AIRFLOW-897] 防止 dagruns 因未完成的任务而失败
[AIRFLOW-896] 删除 BigQueryOperator 中的 unicode 到 8 位转换
[AIRFLOW-899] 处于 SCHEDULED 状态的任务在 UI 中应为白色而不是黑色
[AIRFLOW-895] 解决 Apache 发布不合规问题
[AIRFLOW-893][AIRFLOW-510] 修复当 dagrun 没有开始日期时崩溃的 webserver
[AIRFLOW-880] 使 Webserver 以合理的方式为远程日志提供服务
[AIRFLOW-889] 修复 BaseOperator 的文档字符串中的小错误
[AIRFLOW-809][AIRFLOW-1] 在测试布尔值时使用 __eq__ ColumnOperator
[AIRFLOW-875] 将模板添加到 HttpSensor 参数
[AIRFLOW-866] 添加 FTPSensor
[AIRFLOW-881] 检查 SubDagOperator 是否在 DAG 上下文管理器中
[AIRFLOW-885] 将 change.org 添加到用户列表
[AIRFLOW-836] 为状态更改端点使用 POST 和 CSRF
[AIRFLOW-862] 修复 DaskExecutor 的单元测试
[AIRFLOW-887] 支持未来 v0.16
[AIRFLOW-886] 将结果传递给 post_execute() 钩子
[AIRFLOW-871] 将 logging.warn() 更改为 warning()
[AIRFLOW-882] 删除文档中不必要的 dag>>op 分配
[AIRFLOW-861] 使 pickle_info 端点为 login_required
[AIRFLOW-869] 重构标记成功功能
[AIRFLOW-877] 从 GCS 下载运算符中删除 .sql 模板扩展名
[AIRFLOW-826] 添加 Zendesk 钩子
[AIRFLOW-842] 不要使用空 IN 子句查询数据库
[AIRFLOW-834] 将 raise StopIteration 更改为 return
[AIRFLOW-832] 让调试服务器在没有 SSL 的情况下运行
[AIRFLOW-862] 添加 DaskExecutor
[AIRFLOW-858] DB 运算符的可配置数据库名称
[AIRFLOW-863] 示例 DAG 应具有最近的开始日期
[AIRFLOW-853] 对 stdout 行解码使用 utf8 编码
[AIRFLOW-857] 使用库断言语句而不是条件
[AIRFLOW-856] 确保为本地客户端设置执行日期
[AIRFLOW-854] 将 OKI 添加为 Airflow 用户
[AIRFLOW-830][AIRFLOW-829][AIRFLOW-88] 减少 Travis 日志详细程度
[AIRFLOW-814] 修复 Presto*CheckOperator.__init__
[AIRFLOW-793] 在 S3ToHiveTransfer 中启用压缩加载
[AIRFLOW-844] 修复 cgroups 目录创建
[AIRFLOW-831] 恢复导入以修复损坏的测试
[AIRFLOW-794] 仅从设置访问 DAGS_FOLDER 和 SQL_ALCHEMY_CONN
[AIRFLOW-694] 修复空 envvar 的配置行为
[AIRFLOW-365] 显式设置 dag.fileloc 并将其用于代码视图
[AIRFLOW-781] 允许 DataFlowOperators 接受存储在 GCS 中的作业
Airflow 1.8.2 (2017-09-04)¶
重大变更¶
没有重大更改。
更新日志¶
[AIRFLOW-809][AIRFLOW-1] 在测试布尔值时使用 __eq__ ColumnOperator
[AIRFLOW-1296] 将 SKIPPED 传播到所有下游任务
重新启用 hadoop 组件的缓存
将 Hive 和 Hadoop 固定到特定版本,并创建可写仓库目录
[AIRFLOW-1308] 禁用 Dask 的 nanny 使用
正在更新 1.8.2rc1 的 CHANGELOG
[AIRFLOW-1294] 回填可能会丢失要执行的任务
[AIRFLOW-1291] 更新 NOTICE 和 LICENSE 文件以匹配 ASF 要求
[AIRFLOW-XXX] 将版本设置为 1.8.2rc1
[AIRFLOW-1160] 更新 Mesos 的 Spark 参数
[AIRFLOW 1149][AIRFLOW-1149] 允许在 Jinja2 模板中使用自定义过滤器
[AIRFLOW-1119] 修复卸载查询,以便标题位于第一行[]
[AIRFLOW-1089] 添加 Spark 应用程序参数
[AIRFLOW-1078] 修复旧版本 flask 的 latest_runs 端点
[AIRFLOW-1074] 不要将排队任务计入并发限制
[AIRFLOW-1064] 将 TaskInstanceModelView 的默认排序更改为 job_id
[AIRFLOW-1038] 显式指定 Celery 序列化选项
[AIRFLOW-1036] 随机化指数退避
[AIRFLOW-993] 更新日期推断逻辑
[AIRFLOW-1167] 在 FTPHook 修改时间中支持微秒
[AIRFLOW-1179] 修复 pandas 0.2x 破坏 Google BigQuery 更改
[AIRFLOW-1263] 图表的动态高度
[AIRFLOW-1266] 增加 gantt y 轴的宽度
[AIRFLOW-1290] 将文档作者设置为 ‘Apache Airflow’
[AIRFLOW-1282] 修复已知事件列排序
[AIRFLOW-1166] 加快 _change_state_for_tis_without_dagrun 的速度
[AIRFLOW-1192] 对 qubole_operator 进行一些增强
[AIRFLOW-1281] 默认按键字段对变量排序
[AIRFLOW-1244] 禁止创建名称为空的池
[AIRFLOW-1243] DAG 表格没有要显示的默认条目
[AIRFLOW-1227] 删除“日志”视图上的空列
[AIRFLOW-1226] 删除“作业”视图上的空列
[AIRFLOW-1199] 修复创建模态
[AIRFLOW-1200] 禁止创建具有空键的变量
[AIRFLOW-1186] 按 execution_date 对 dag.get_task_instances 排序
[AIRFLOW-1145] 修复 closest_date_partition 函数,如果 before 设置为 True,如果我们正在查找之前的最近日期,我们应该取之前日期列表中最新的日期。
[AIRFLOW-1180] 修复 test_csrf_rejection 的 flask-wtf 版本
[AIRFLOW-1170] DbApiHook insert_rows 单独插入参数
[AIRFLOW-1150] 修复 sparksql 钩子中的脚本执行[]
[AIRFLOW-1168] 将 closing() 添加到所有连接和游标
[AIRFLOW-XXX] 在 1.8.1 版本发布后更新 CHANGELOG、README 和 UPDATING
Airflow 1.8.1 (2017-05-09)¶
重大变更¶
在此版本期间,Airflow 包名称从 airflow
更改为 apache-airflow
。您必须先卸载先前安装的 Airflow 版本,然后再安装 1.8.1。
更新日志¶
[AIRFLOW-1142] 即使所有依赖项都满足,也未执行 SubDAG 任务
[AIRFLOW-1138] 将许可证添加到 scripts 目录中的文件
[AIRFLOW-1127] 将许可证声明移动到 LICENSE 而不是 NOTICE
[AIRFLOW-1124] 不要将所有任务实例设置为在回填时计划
[AIRFLOW-1120] 更新版本视图以包含 Apache 前缀
[AIRFLOW-1062] 如果指定 external_trigger=False,则 DagRun#find 返回错误结果
[AIRFLOW-1054] 修复 test_dag 上损坏的导入
[AIRFLOW-1050] 忽略重试 - 回归
[AIRFLOW-1033] TypeError:无法将 datetime.datetime 与 None 进行比较
[AIRFLOW-1017] get_task_instance 应返回 None,而不是为不存在的 TI 抛出异常
[AIRFLOW-1011] 修复 SubDAG 的 BackfillJob._execute() 中的错误
[AIRFLOW-1004]
airflow webserver -D
在前台运行[AIRFLOW-1001] 着陆时间在 example_subdag_operator 上显示
unsupported operand type(s) for -: 'datetime.datetime' and 'NoneType'
[AIRFLOW-1000] 将品牌重塑为 Apache Airflow 而不是 Airflow
[AIRFLOW-989] 清除任务回归
[AIRFLOW-974] airflow.util.file mkdir 存在竞争条件
[AIRFLOW-906] 将代码图标从闪电符号更新为文件
[AIRFLOW-858] DB 运算符的可配置数据库名称
[AIRFLOW-853] ssh_execute_operator.py stdout 解码默认为 ASCII
[AIRFLOW-832] 修复调试服务器
[AIRFLOW-817] 当使用 CLI + API 时,触发 dag 失败
[AIRFLOW-816] 确保从本地资源中提取 nvd3
[AIRFLOW-815] 将上一个/下一个执行日期添加到可用的默认变量。
[AIRFLOW-813] 修复 tests.job (tests/job.py) 中未终止的单元测试
[AIRFLOW-812] 当没有 dag 文件时,调度程序作业终止
[AIRFLOW-806] 当 DAG doc 为 None 时,UI 应正确忽略
[AIRFLOW-794] 对 DAGS_FOLDER 和 SQL_ALCHEMY_CONN 的一致访问
[AIRFLOW-785] 如果未安装 cgroupspy,则会出现 ImportError
[AIRFLOW-784] 无法安装
funcsigs
> 1.0.0 的版本[AIRFLOW-780] UI 不再显示损坏的 DAG
[AIRFLOW-777] dag_is_running 初始化为 True 而不是 False
[AIRFLOW-719] 跳过的操作导致 DAG 过早完成
[AIRFLOW-694] 空环境变量不会覆盖非空配置值
[AIRFLOW-492] 向 dag_stats 表中插入数据会导致任务失败,即使任务本身成功
[AIRFLOW-139] 使用 PostgresOperator 执行 VACUUM
[AIRFLOW-111] DAG 并发未被遵守
[AIRFLOW-88] 提高 Travis CI 报告的清晰度
Airflow 1.8.0 (2017-03-12)¶
重大更改¶
数据库¶
需要升级数据库模式。请务必关闭 Airflow 并备份数据库。要升级模式,请执行 airflow upgradedb
。
尽管满足依赖关系,但由于更严格的池检查,任务无法启动¶
Airflow 1.7.1 在过度订阅池方面存在问题,即可以使用的槽位多于可用的槽位。这在 Airflow 1.8.0 中已修复,但由于过去的问题,升级后,即使满足依赖关系,作业也可能无法启动。要解决此问题,可以暂时将槽位数增加到高于排队任务的数量,或使用新的池。
在动态 start_date 上,调度程序不太宽容¶
使用动态 start_date (例如 start_date = datetime.now()
) 不被认为是最佳实践。1.8.0 调度程序在这方面不太宽容。如果您遇到 DAG 没有被调度的情 况,您可以尝试使用固定的 start_date 并重命名您的 DAG。最后一步是必须的,以确保您从头开始,否则旧的计划可能会干扰。
新的和更新的调度程序选项¶
请仔细阅读新的调度程序选项,自 1.7.1 以来,默认值已更改。
child_process_log_directory¶
为了提高调度程序的健壮性,DAG 现在在其自己的进程中处理。因此,每个 DAG 都有其自己的调度程序日志文件。这些日志文件放置在 child_process_log_directory
中,默认为 <AIRFLOW_HOME>/scheduler/latest
。您需要确保删除这些日志文件。
DAG 日志或处理器日志会忽略日志文件位置的命令行设置。
run_duration¶
以前,命令行选项 num_runs
用于让调度程序在一定数量的循环后终止。现在,这是时间限制的,默认为 -1
,这意味着持续运行。另请参阅 num_runs。
num_runs¶
以前,num_runs
用于让调度程序在一定数量的循环后终止。现在,num_runs 指定在 run_duration
时间内尝试调度每个 DAG 文件的次数。默认为 -1
,这意味着无限期尝试。这仅在命令行中可用。
min_file_process_interval¶
在多长时间后应从文件系统中拾取更新的 DAG。
min_file_parsing_loop_time¶
当前由于错误而禁用。文件解析循环之间等待多少秒以防止日志被垃圾邮件。
dag_dir_list_interval¶
调度程序应重新列出 DAG 目录内容的频率。如果在开发 +dags 时,它们没有被拾取,请查看此数字,并在必要时减小它。
catchup_by_default¶
默认情况下,调度程序将填充上次执行日期和当前日期之间任何丢失的时间间隔 DAG 运行。此设置将此行为更改为仅执行最新的时间间隔。也可以在每个 DAG 中指定为 catchup = False / True
。命令行回填仍然有效。
有故障的 DAG 不会在 Web UI 中显示错误¶
由于 Airflow 处理 DAG 的方式发生变化,Web UI 在处理有故障的 DAG 时不会显示错误。要查找处理错误,请转到 child_process_log_directory
,该目录默认为 <AIRFLOW_HOME>/scheduler/latest
。
默认情况下,新 DAG 处于暂停状态¶
以前,新的 DAG 会立即被调度。要保留旧的行为,请将其添加到 airflow.cfg 中
[core]
dags_are_paused_at_creation = False
如果指定了配置,Airflow 上下文变量将传递到 Hive 配置¶
如果您在 HiveHook 的 run_cli 命令中指定了 hive conf,Airflow 会将一些方便的变量添加到配置中。如果您运行安全的 Hadoop 设置,则可能需要通过调整 hive 配置以将 airflow\.ctx\..*
添加到用户可编辑配置属性的正则表达式来允许这些变量。有关更多信息,请参阅 关于配置属性的 Hive 文档。
Google Cloud 运算符和 Hook 对齐¶
所有 Google Cloud 运算符和 Hook 都已对齐并使用相同的客户端库。现在,您可以使用一个连接类型来处理各种 Google Cloud 运算符。
如果您在连接运算符时遇到问题,请确保将连接类型设置为“Google Cloud”。
此外,旧的 P12 密钥文件类型不再支持,仅支持新的 JSON 密钥文件作为服务帐户。
已弃用的功能¶
这些功能被标记为已弃用。它们可能仍然有效(并引发 DeprecationWarning
),但不再受支持,并且将在 Airflow 2.0 中完全删除
必须从其各自的子模块导入 Hook 和运算符
airflow.operators.PigOperator
不再受支持;from airflow.operators.pig_operator import PigOperator
是 (AIRFLOW-31, AIRFLOW-200)运算符不再接受任意参数
以前,
Operator.__init__()
接受任何参数(无论是位置参数*args
还是关键字参数**kwargs
)而没有抱怨。现在,无效参数将被拒绝。( https://github.com/apache/airflow/pull/1285 )配置值 secure_mode 将默认为 True,这将禁用一些不安全的端点/功能
已知问题¶
有报告称,num_runs 的默认值“-1”会创建一个在解析任务时报告错误的问题。尚未确认,但通过将默认值更改回 None
找到了解决方法。
要执行此操作,请编辑 cli.py
,找到以下内容
'num_runs': Arg(
("-n", "--num_runs"),
default=-1, type=int,
help="Set the number of runs to execute before exiting"),
并将 default=-1
更改为 default=None
。如果您遇到此问题,请在邮件列表中报告。
更新日志¶
[AIRFLOW-900] 双重触发不应终止原始任务实例
[AIRFLOW-900] 修复 LocalTaskJob 中用于双重运行保护的错误
[AIRFLOW-932] 回填时不标记删除的任务
[AIRFLOW-961] 在 SIGTERMed 时运行 onkill
[AIRFLOW-910] 对回填使用并行任务执行
[AIRFLOW-967] 将字符串包装在 native 中以实现 py2 ldap 兼容性
[AIRFLOW-941] 为 psycopg2 使用定义的参数
[AIRFLOW-719] 防止 DAG 过早结束
[AIRFLOW-938] 在 task_stats 查询中使用 true 的测试
[AIRFLOW-937] 提高 task_stats 的性能
[AIRFLOW-933] 使用 ast.literal_eval 而不是 eval,因为 ast.literal_eval 不执行输入。
[AIRFLOW-925] 恢复 cherry-pick 挑选的 airflow.hooks 更改
[AIRFLOW-919] 没有开始日期的运行任务不应破坏 DAG 的 UI
[AIRFLOW-802] 添加 spark-submit 运算符/Hook
[AIRFLOW-897] 防止 dagruns 因未完成的任务而失败
[AIRFLOW-861] 使 pickle_info 端点需要登录
[AIRFLOW-853] 对 stdout 行解码使用 utf8 编码
[AIRFLOW-856] 确保为本地客户端设置执行日期
[AIRFLOW-830][AIRFLOW-829][AIRFLOW-88] 减少 Travis 日志详细程度
[AIRFLOW-831] 恢复导入以修复损坏的测试
[AIRFLOW-794] 仅从设置访问 DAGS_FOLDER 和 SQL_ALCHEMY_CONN
[AIRFLOW-694] 修复空 envvar 的配置行为
[AIRFLOW-365] 显式设置 dag.fileloc 并将其用于代码视图
[AIRFLOW-931] 不要将 TaskInstances 中的状态设置为 QUEUED
[AIRFLOW-899] 处于 SCHEDULED 状态的任务在 UI 中应为白色而不是黑色
[AIRFLOW-895] 解决 Apache 发布不合规问题
[AIRFLOW-893][AIRFLOW-510] 修复当 dagrun 没有开始日期时崩溃的 webserver
[AIRFLOW-793] 在 S3ToHiveTransfer 中启用压缩加载
[AIRFLOW-863] 示例 DAG 应具有最近的开始日期
[AIRFLOW-869] 重构标记成功功能
[AIRFLOW-856] 确保为本地客户端设置执行日期
[AIRFLOW-814] 修复 Presto*CheckOperator.__init__
[AIRFLOW-844] 修复 cgroups 目录创建
[AIRFLOW-816] 使用静态 nvd3 和 d3
[AIRFLOW-821] 修复 py3 兼容性
[AIRFLOW-817] 检查端点中 execution_date 的 None 值
[AIRFLOW-822] 在异常之前关闭数据库
[AIRFLOW-815] 将上一个/下一个执行日期添加到模板变量
[AIRFLOW-813] 修复 SchedulerJobTest 中未终止的单元测试
[AIRFLOW-813] 修复未终止的调度程序单元测试
[AIRFLOW-806] 当 DAG doc 为 None 时,UI 应正确忽略
[AIRFLOW-812] 修复调度程序终止错误。
[AIRFLOW-780] 修复 DAG 导入错误不再起作用的问题
[AIRFLOW-783] 修复 BaseTaskRunner 中的 py3 不兼容问题
[AIRFLOW-810] 更正 down_revision dag_id/state 索引创建
[AIRFLOW-807] 提高大型 DAG 的调度程序性能
[AIRFLOW-798] 在强制终止之前检查 return_code
[AIRFLOW-139] 让 psycopg2 处理 PostgresHook 的自动提交
[AIRFLOW-776] 添加缺少的 cgroups devel 依赖项
[AIRFLOW-777] 修复检查 DagRun 是否处于运行状态的表达式
[AIRFLOW-785] 不要全局导入 CgroupTaskRunner
[AIRFLOW-784] 将
funcsigs
固定为 1.0.0[AIRFLOW-624] 修复 setup.py,使其不将 airflow.version 导入为版本
[AIRFLOW-779] 删除任务时,任务应带有特定消息失败
[AIRFLOW-778] 修复完全损坏的 MetastorePartitionSensor
[AIRFLOW-739] 将 pickle_info 日志设置为 debug
[AIRFLOW-771] 使 S3 日志附加而不是覆盖
[AIRFLOW-773] 修复 API 测试中不稳定的日期时间添加
[AIRFLOW-219][AIRFLOW-398] Cgroups + 模拟
[AIRFLOW-683] 添加 Jira Hook、运算符和传感器
[AIRFLOW-762] 添加 Google DataProc 删除运算符
[AIRFLOW-760] 更新 systemd 配置
[AIRFLOW-759] 使用以前的 dag_run 来验证 depend_on_past
[AIRFLOW-757] 将 child_process_log_directory 默认设置为更合理
[AIRFLOW-692] 仅允许超级管理员打开 XCom 页面
[AIRFLOW-737] 修复 HDFS 传感器目录。
[AIRFLOW-747] 修复 retry_delay 不生效的问题
[AIRFLOW-558] 添加对 dag.catchup=(True|False) 选项的支持
[AIRFLOW-489] 允许在 trigger_dag API 中指定执行日期
[AIRFLOW-738] 在插入之前提交删除的 xcom 项
[AIRFLOW-729] 添加 Google Cloud Dataproc 集群创建运算符
[AIRFLOW-728] 添加 Google BigQuery 表传感器
[AIRFLOW-741] 对于 app.py,日志记录到 debug 而不是 info
[AIRFLOW-731] 修复 NamedHivePartitionSensor 的 period 错误
[AIRFLOW-740] 将 jinja2 固定到 < 2.9.0
[AIRFLOW-663] 改进任务性能图表的时间单位
[AIRFLOW-665] 修复电子邮件附件
[AIRFLOW-734] 修复不使用用户名/密码时的 SMTP 身份验证回归
[AIRFLOW-702] 修复 LDAP 正则表达式错误
[AIRFLOW-717] 添加云存储更新传感器
[AIRFLOW-695] 由于 dagrun 处于 FAILED 状态,重试不执行
[AIRFLOW-673] 添加 SchedulerJob 的操作指标测试
[AIRFLOW-727] try_number 没有增加
[AIRFLOW-715] 更高效的 HDFS 传感器
[AIRFLOW-716] 允许 AVRO BigQuery 加载作业,无需架构
[AIRFLOW-718] 允许 DataProc Pig 的查询 URI
日志需要是 try/catch 块的一部分
[AIRFLOW-721] 子进程可能在终止前消失
[AIRFLOW-403] Bash 运算符的 kill 方法使底层进程保持运行
[AIRFLOW-657] 为 MSSQL 添加 AutoCommit 参数
[AIRFLOW-641] 改进拉取请求说明
[AIRFLOW-685] 为 MySqlHook.bulk_load() 添加测试
[AIRFLOW-686] 匹配认证后端配置部分
[AIRFLOW-691] 为 SSH_hook 添加 SSH KeepAlive 选项
[AIRFLOW-709] 为迁移和反射使用相同的引擎
[AIRFLOW-700] 更新对 Web 身份验证文档的引用
[AIRFLOW-649] 在 LatestOnlyOp 中支持非计划 DAG
[AIRFLOW-712] 修复 AIRFLOW-667 以使用正确的 HTTP 错误属性
[AIRFLOW-710] 添加 OneFineStay 作为官方用户
[AIRFLOW-703][AIRFLOW-1] 停止过早清除 Xcom
[AIRFLOW-679] 阻止并发任务实例运行
[AIRFLOW-704][AIRFLOW-1] 修复 BQ hook 中的无效语法
[AIRFLOW-667] 处理 BigQuery 503 错误
[AIRFLOW-680] 禁用命令的连接池
[AIRFLOW-678] 防止调度程序双重触发 TI
[AIRFLOW-677] 如果任务无法发送心跳,则终止任务
[AIRFLOW-674] 为 DAG 添加描述的能力
[AIRFLOW-682] 增加 MAX_PERIODS 以使 mark_success 适用于大型 DAG
使用 jdk 选择器设置所需的 jdk
[AIRFLOW-647] 恢复 dag.get_active_runs
[AIRFLOW-662] 将项目描述中的季节更改为月份
[AIRFLOW-656] 向 xcom 表添加 dag/task/date 索引
[AIRFLOW-658] 改进 GCP 中的 schema_update_options
[AIRFLOW-41] 修复池过订阅问题
[AIRFLOW-489] 添加 API 框架
[AIRFLOW-653] 添加一些缺失的端点测试
[AIRFLOW-652] 删除过时的端点
[AIRFLOW-345] 添加 contrib ECSOperator
[AIRFLOW-650] 将 Celect 添加到用户列表
[AIRFLOW-510] 过滤已暂停的 DAG,显示上次运行并触发 DAG
[AIRFLOW-643] 改进 sf_hook 的日期处理
[AIRFLOW-638] 向 GCP ops 添加 schema_update_options
[AIRFLOW-640] 安装并启用 nose-ignore-docstring
[AIRFLOW-639]AIRFLOW-639] 按字母顺序排列软件包名称
[AIRFLOW-375] 修复 pylint 错误
[AIRFLOW-347] 在树视图中显示空的 DAG 运行
[AIRFLOW-628] 将 SalesforceHook 添加到 contrib/hooks
[AIRFLOW-514] hive hook 从 pandas DataFrame 将数据加载到 hive 并推断类型
[AIRFLOW-565] 修复 Python3.x 上的 DockerOperator
[AIRFLOW-635] S3 hook 的加密选项
[AIRFLOW-137] 修复清除任务时的 max_active_runs
[AIRFLOW-343] 修复 HiveServer2Hook 中的模式管道
[AIRFLOW-130] 修复 ssh operator macosx
[AIRFLOW-633] 在 TI 视图中显示 TI 属性
[AIRFLOW-626][AIRFLOW-1] 发送带附件的电子邮件时,HTML 内容不显示
[AIRFLOW-533] 通过 set_autocommit 设置自动提交
[AIRFLOW-629] 停止固定 lxml
[AIRFLOW-464] 向 Variable 添加 setdefault 方法
[AIRFLOW-626][AIRFLOW-1] 发送带附件的电子邮件时,HTML 内容不显示
[AIRFLOW-591] 添加 datadog hook 和传感器
[AIRFLOW-561] 添加 RedshiftToS3Transfer 运算符
[AIRFLOW-570] 将 root 传递给甘特图上的日期表单
[AIRFLOW-504] 在 MySQL 表中存储小数秒
[AIRFLOW-623] LDAP 属性不总是列表
[AIRFLOW-611] BigQueryBaseCursor 中的 source_format
[AIRFLOW-619] 修复甘特图中的异常
[AIRFLOW-618] 转换 DateTimes 以避免 sqlite 错误
[AIRFLOW-422] 为任务信息添加 JSON 端点
[AIRFLOW-616][AIRFLOW-617] 对 PR 工具 UX 的小修复
[AIRFLOW-179] 修复带有非 ASCII 字符的 DbApiHook
[AIRFLOW-566] 在获取日志时添加超时
[AIRFLOW-615] 首先设置图表字形
[AIRFLOW-609] 向 PostgresHook 添加 application_name
[AIRFLOW-604] 将 .first() 还原为 .one()
[AIRFLOW-370] 在 exceptions.py 中创建 AirflowConfigException
[AIRFLOW-582] 修复 TI.get_dagrun 过滤器(删除 start_date)
[AIRFLOW-568] 如果 DagRun 处于活动状态,则修复双重 task_stats 计数
[AIRFLOW-585] 修复回填执行循环中的竞争条件
[AIRFLOW-580] 防止 .format 出现 landscape 警告
[AIRFLOW-597] 检查内容是否为 None,而不是 false 等效项
[AIRFLOW-586] test_dag_v1 在凌晨 0 点到 3 点之间失败
[AIRFLOW-453] 添加 XCom 管理页面
[AIRFLOW-588] 添加 Google Cloud Storage 对象传感器[]
[AIRFLOW-592] example_xcom 导入错误
[AIRFLOW-587] 修复 Google Auth[] 的不正确范围
[AIRFLOW-589] 添加可模板化的 job_name[]
[AIRFLOW-227] 在配置视图中显示正在运行的配置
[AIRFLOW-319]AIRFLOW-319] HTTP Operator 中的 xcom push 响应
[AIRFLOW-385] 添加指向最新调度程序日志目录的符号链接
[AIRFLOW-583] 修复 gcs_to_bq 中的解码错误
[AIRFLOW-96] 使用环境变量的 s3_conn_id
[AIRFLOW-575] 阐明关于
schedule_interval
始终从 DAG 对象继承的教程和常见问题解答[AIRFLOW-577] 输出 BigQuery 作业以改进调试
[AIRFLOW-560] 从连接获取 URI 和 SQLA 引擎
[AIRFLOW-518] 要求 DataProfilingMixin 用于变量 CRUD
[AIRFLOW-553] 修复 filters.js 的加载路径
[AIRFLOW-554] 添加 Jinja 对 Spark-sql 的支持
[AIRFLOW-550] 使 ssl 配置检查空字符串安全
[AIRFLOW-500] 使用 id 作为 github 允许的团队
[AIRFLOW-556] 添加 UI PR 指南
[AIRFLOW-358][AIRFLOW-430] 添加
connections
cli[AIRFLOW-548] 立即且持续地加载 DAG
[AIRFLOW-539] 更新 BQ hook 和 BQ operator 以支持标准 SQL。
[AIRFLOW-378] 向 spark-sql 运算符的参数添加字符串转换
[AIRFLOW-544] 添加暂停/恢复切换按钮
[AIRFLOW-333][AIRFLOW-258] 修复非模块插件组件
[AIRFLOW-542] 向 DAG 链接图标添加工具提示
[AIRFLOW-530] 更新文档以反映连接环境变量必须为大写
[AIRFLOW-525] 更新 Qubole Op 中的 template_fields
[AIRFLOW-480] 支持从 GCS 下载二进制文件
[AIRFLOW-198] 实现 latest_only_operator
[AIRFLOW-91] 为 Web 服务器添加 SSL 配置选项
[AIRFLOW-191] 修复 PostgreSQL 后端的连接泄漏
[AIRFLOW-512] 修复 docs 和注释中的“bellow”拼写错误
[AIRFLOW-509][AIRFLOW-1] 创建一个用于删除 BigQuery 中的表的运算符
[AIRFLOW-498] 删除硬编码的 gcp 项目 id
[AIRFLOW-505] 在作者姓名中支持 unicode 字符
[AIRFLOW-494] 添加每个运算符的成功/失败指标
[AIRFLOW-488] 修复 test_simple 失败
[AIRFLOW-468] 将 panda 要求更新为 0.17.1
[AIRFLOW-159] 添加云集成部分 + GCP 文档
[AIRFLOW-477][AIRFLOW-478] 重新组织安全部分以使其更清晰
[AIRFLOW-467] 允许在 BigQueryHook 中定义 project_id
[AIRFLOW-483] 将 print 更改为日志语句
[AIRFLOW-475] 使 Druid hook 中的段粒度可配置
Airflow 1.7.1.2 (2016-05-20)¶
重大变更¶
配置更改¶
电子邮件配置更改¶
要继续使用默认的 smtp 电子邮件后端,请将配置文件中的 email_backend 行从
[email]
email_backend = airflow.utils.send_email_smtp
更改为
[email]
email_backend = airflow.utils.email.send_email_smtp
S3 配置更改¶
要继续使用 S3 日志记录,请更新您的配置文件,以便
s3_log_folder = s3://my-airflow-log-bucket/logs
变为
remote_base_log_folder = s3://my-airflow-log-bucket/logs
remote_log_conn_id = <your desired s3 connection>
更新日志¶
[AIRFLOW-463] 将 Airflow 图标链接到着陆页
[AIRFLOW-149] 任务依赖引擎 + 为什么我的任务没有运行视图
[AIRFLOW-361] 为 Qubole 运算符添加默认失败处理程序
[AIRFLOW-353] 修复 dag 运行状态更新失败
[AIRFLOW-447] 在 Python 3 兼容列表中存储源 URI
[AIRFLOW-443] 导入时使模块名称唯一
[AIRFLOW-444] 添加 Google 身份验证后端
[AIRFLOW-446][AIRFLOW-445] 添加缺失的 dataproc 提交选项
[AIRFLOW-431] 为池上的 CRUD 操作添加 CLI
[AIRFLOW-329] 使用更好的状态列更新 DAG 概览页面
[AIRFLOW-360] 修复 models.py 中的样式警告
[AIRFLOW-425] 为树视图中的空状态任务添加白色填充。
[AIRFLOW-69] 在回填作业中使用 dag 运行
[AIRFLOW-415] 使 dag_id 未找到错误更清晰
[AIRFLOW-416] 在 README 的公司列表中使用序数
[AIRFLOW-369] 允许设置默认 DAG 方向
[AIRFLOW-410] 在文档中的常见问题解答中添加 2 个问答
[AIRFLOW-407] 为某些传感器添加不同的颜色
[AIRFLOW-414] 改进缺失 FERNET_KEY 的错误消息
[AIRFLOW-406] Sphinx/rst 修复
[AIRFLOW-412] 修复 lxml 依赖项
[AIRFLOW-413] 修复通过 pickle 回填时未设置路径的错误
[AIRFLOW-78] Airflow clear 保留 dag_runs
[AIRFLOW-402] 删除 NamedHivePartitionSensor 静态检查,添加文档
[AIRFLOW-394] 向任务持续时间图表添加一个选项以显示累计时间
[AIRFLOW-404] 如果 hive 解包失败,则重试下载
[AIRFLOW-276] Gunicorn 滚动重启
[AIRFLOW-399] 删除 dags/testdruid.py
[AIRFLOW-400] models.py/DAG.set_dag_runs_state() 未正确设置状态
[AIRFLOW-395] 修复默认配置中资源冒号/等号的类型错误
[AIRFLOW-397] 文档:修复“实例化”一词中的拼写错误
[AIRFLOW-395] 从配置中的资源中删除尾随逗号
[AIRFLOW-388] 为每个 DAG 添加一个新的任务尝试图表
[AIRFLOW-322] 修复常见问题解答部分中的拼写错误
[AIRFLOW-375] Pylint 修复
将范围限制为仅用户电子邮件 AIRFLOW-386
[AIRFLOW-383] 清理示例 qubole 运算符 dag
[AIRFLOW-160] 通过子进程解析 DAG 文件
[AIRFLOW-381] 手动 UI Dag Run 创建:需要 dag_id 字段
[AIRFLOW-373] 增强 CLI 变量功能
[AIRFLOW-379] 增强变量页面功能:导入/导出变量
[AIRFLOW-331] 修改“安全”示例代码中的 LDAP 身份验证配置行
[AIRFLOW-356][AIRFLOW-355][AIRFLOW-354] 替换 nobr,启用 DAG 仅存在于本地消息,更改编辑 DAG 图标
[AIRFLOW-362] 导入 __future__ division
[AIRFLOW-359] 将 flask-login 固定到 0.2.11
[AIRFLOW-261] 向 EmailOperator 添加 bcc 和 cc 字段
[AIRFLOW-348] 修复代码样式警告
[AIRFLOW-349] 添加僵尸杀死的数量的指标
[AIRFLOW-340] 删除 Babel 上未使用的依赖项
[AIRFLOW-339]:能够传递 flower conf 文件
[AIRFLOW-341][operators] 向运算符添加资源需求属性
[AIRFLOW-335] 修复简单样式错误/警告
[AIRFLOW-337] 向 VariableAccessor 和 VariableJsonAccessor 添加 __repr__
[AIRFLOW-334] 修复使用未定义变量的问题
[AIRFLOW-315] 修复空行代码样式警告
[AIRFLOW-306] 添加 Spark-sql Hook 和 Operator
[AIRFLOW-327] 向 FTPHook 添加重命名方法
[AIRFLOW-321] 修复有关 tests/dags 的错误代码示例
[AIRFLOW-316] 始终检查回填作业执行的数据库状态
[AIRFLOW-264] 为 Hive 添加工作负载管理
[AIRFLOW-297] 支持重试延迟的指数退避选项
[AIRFLOW-31][AIRFLOW-200] 向 updating.md 添加说明
[AIRFLOW-307] 没有 __neq__ Python 魔术方法。
[AIRFLOW-309] 向 docs 添加开发依赖项的要求
[AIRFLOW-307] 将 __neq__ 重命名为 __ne__ Python 魔术方法。
[AIRFLOW-313] 修复 sqoop_hook.py 的代码样式
[AIRFLOW-311] 修复 CONTRIBUTING.md 中的错误路径
[AIRFLOW-24] DataFlow Java 运算符
[AIRFLOW-308] 在 DAG 视图标头中添加刷新 DAG 的链接
[AIRFLOW-314] 修复 BigQuery 游标 run_table_upsert 方法
[AIRFLOW-298] 修复文档中的孵化器免责声明
[AIRFLOW-284] HiveServer2Hook 修复 get_results 的游标范围
[AIRFLOW-260] 当无法关闭问题时,更优雅地退出
[AIRFLOW-260] 处理找不到版本的情况
[AIRFLOW-228] 处理 PR 工具中的空版本列表
[AIRFLOW-302] 改进默认的 squash commit 消息
[AIRFLOW-187] 改进提示样式
[AIRFLOW-187] 修复参数名称中的拼写错误
[AIRFLOW-187] 将 “Close XXX” 消息移动到 squash commit 的末尾
[AIRFLOW-247] 添加 EMR hook、操作符和传感器。添加 AWS 基础 hook
[AIRFLOW-301] 修复损坏的单元测试
[AIRFLOW-100] 将 execution_date_fn 添加到 ExternalTaskSensor
[AIRFLOW-282] 删除依赖于版本格式的 PR 工具逻辑
[AIRFLOW-291] 在 TI 表中为状态添加索引
[AIRFLOW-269] 为 PostgreSQL 添加一些单元测试
[AIRFLOW-296] 在 Qubole 操作符中,template_ext 被视为字符串而不是元组
[AIRFLOW-286] 改进 FTPHook 以实现上下文管理器接口
[AIRFLOW-243] 创建 NamedHivePartitionSensor
[AIRFLOW-246] 改进 dag_stats 端点查询
[AIRFLOW-189] 在图中突出显示父/子节点
[ARFLOW-255] 在比较活动运行时检查 dagrun 超时
[AIRFLOW-281] 将端口添加到 mssql_hook
[AIRFLOW-285] 为所有剩余的 hook/操作符使用 Airflow 2.0 样式导入
[AIRFLOW-40] 添加 LDAP 组过滤功能。
[AIRFLOW-277] 如果使用 SQLite 后端,则在任务实例视图中多次删除无效
[AIRFLOW-200] 使 hook/操作符导入延迟,并打印正确的异常
[AIRFLOW-283] 使 store_to_xcom_key 成为 GoogleCloudStorageDownloadOperator 中的模板化字段
[AIRFLOW-278] 支持 SQL 的 utf-8 编码
[AIRFLOW-280] 清理临时 Druid 表,无论摄取作业是否成功
[AIRFLOW-274] 将 XCom 功能添加到 GoogleCloudStorageDownloadOperator
[AIRFLOW-273] 创建 Airflow 徽标的 svg 版本。
[AIRFLOW-275] 更新贡献指南
[AIRFLOW-244] 修改 Hive 操作符以注入分析数据
[AIRFLOW-162] 允许变量在模板中访问
[AIRFLOW-248] 将 Apache 许可证标头添加到所有文件
[AIRFLOW-263] 删除临时反引号文件
[AIRFLOW-252] 在 WebUI 中删除任务实例时引发 Sqlite 异常
[AIRFLOW-180] 修复传感器的超时行为
[AIRFLOW-262] 简化 MANIFEST.in 中的命令
[AIRFLOW-31] 添加 zope 依赖项
[AIRFLOW-6] 删除对 Highcharts 的依赖
[AIRFLOW-234] 使非
running
状态的任务自行终止[AIRFLOW-256] 修复 test_scheduler_reschedule 心率
添加 Python 3 兼容性修复
[AIRFLOW-31] 为 hook/操作符使用标准导入
[AIRFLOW-173] FileSensor 的初始实现
[AIRFLOW-224] 收集孤立的任务并重新调度它们
[AIRFLOW-239] 修复测试缩进
[AIRFLOW-225] 任务持续时间图的更好单位
[AIRFLOW-241] 将测试完成部分添加到 PR 模板
[AIRFLOW-222] 在 UI 中显示任务实例的持续时间
[AIRFLOW-231] 不在 PrestoHook 中评估用户输入
[AIRFLOW-216] 添加 Sqoop Hook 和操作符
[AIRFLOW-171] 添加关于电子邮件和 S3 到 1.7.1.2 的升级说明
[AIRFLOW-238] 使其与 flask-admin 1.4.1 兼容
[AIRFLOW-230][HiveServer2Hook] 添加多语句支持
[AIRFLOW-142] 如果将 hdp 指定为发行版,则 setup_env.sh 不会下载 hive tarball
[AIRFLOW-223] 使 Flower 绑定到的 IP 可参数化
[AIRFLOW-218] 添加启用 webserver gunicorn 访问/错误日志的选项
[AIRFLOW-213] 将 “Closes #X” 短语添加到提交消息
[AIRFLOW-68] 将 start_date 与 schedule_interval 对齐
[AIRFLOW-9] 改进文档以符合 Apache 的标准
[AIRFLOW-131] 使 XCom.clear 更具选择性
[AIRFLOW-214] 修复分离任务实例的发生
[AIRFLOW-206] 添加提交以关闭 PR
[AIRFLOW-206] 如果本地日志文件存在,则始终加载它们
[AIRFLOW-211] 修复 JIRA “resolve” 与 “close” 行为
[AIRFLOW-64] 添加关于相对 DAGS_FOLDER 的说明
[AIRFLOW-114] 对插件下拉列表进行排序
[AIRFLOW-209] 添加调度器测试并改进世系处理
[AIRFLOW-207] 改进 JIRA 身份验证工作流
[AIRFLOW-187] 改进 PR 工具 UX
[AIRFLOW-155] Qubole 操作符的文档
优化和重构 process_dag
[AIRFLOW-185] 处理空的版本列表
[AIRFLOW-201] 修复 HiveMetastoreHook + kerberos
[AIRFLOW-202]:修复多余的打印行
[AIRFLOW-196] 修复 HttpSensor 中未处理异常的错误
[AIRFLOW-195]:在 CLI 中添加对子 DAG 清理的切换支持
[AIRFLOW-23] 支持 Google Cloud DataProc
[AIRFLOW-25] Celery 的配置始终是必需的
[AIRFLOW-190] 添加 codecov 并删除下载计数
[AIRFLOW-168] 正确评估 @once 调度
[AIRFLOW-183] 当 worker 返回 4xx/5xx 响应时从远程获取日志
[AIRFLOW-181] 通过重新下载来修复 hadoop 解包失败的问题
[AIRFLOW-176] 删除未使用的格式化键
[AIRFLOW-167]:在 cli 中添加 dag_state 选项
[AIRFLOW-178] 修复在 DAG 文件夹中检测 zip 文件的错误
[AIRFLOW-176] 改进 PR 工具 JIRA 工作流
AIRFLOW-45:支持隐藏的 Airflow 变量
[AIRFLOW-175] 在 PR 工具中签出之前运行 git-reset
[AIRFLOW-157] 使 PR 工具与 Py3 兼容;添加 JIRA 命令
[AIRFLOW-170] 添加缺少的 @apply_defaults
Airflow 1.7.1 (2016-05-19)¶
修复:不要将过早的任务视为 could_not_run 任务
AIRFLOW-92 避免不必要的 upstream_failed 会话关闭 apache/airflow#1485
添加逻辑以锁定数据库并避免竞争条件
处理来自多个作业/执行器的排队任务
AIRFLOW-52 警告在 DAG 中覆盖任务
修复连接进程/队列的极端情况 (#1473)
[AIRFLOW-52] 修复使用许多任务时出现的瓶颈
添加列以切换连接列表视图中的额外详细信息。
记录导入 DAG 时出现的错误数量
将 dagbag 指标重复消息记录到 StatsD 中 (#1406)
清理问题模板 (#1419)
更正 cli 中的 arg.foreground 为 arg.daemon
恢复 github 企业身份验证的导入
为 Web 服务器使用 os.execvp 而不是 subprocess.Popen
从使用 “–foreground” 恢复为 “–daemon”
实现 Cloudant hook
将缺失的参数添加到
airflow clear
修复了调度程序中的错误:使用了 num_runs,但预期的是 runs
向调度程序添加多进程支持
部分修复以确保 next_run_date 不能为 None
支持在 CLI 中列出/获取/设置变量
在 BigQuery hook 中正确处理 BigQuery 布尔值。
添加了在 Web 服务器中查看 XCom 变量的功能
将 DAG.tasks 从列表更改为字典
添加对 zip 压缩的 DAG 的支持
停止在实例化 S3 操作符时创建 hook
在视图中使用子查询来查找正在运行的 DAG
防止在每次调度程序迭代时重新加载 DAG
在文档中添加一个缺失的单词
记录
DbApiHook
的参数使用现有的 oracle hook 添加了 oracle 操作符
将 PyOpenSSL 添加到 Google Cloud gcp_api。
删除执行程序错误单元测试
添加 DAG 推断、延迟和上下文管理器
当将文件写入 Google 云存储时,不要返回错误。
修复 gcp_api 的 GCS 日志记录。
确保属性在错误消息的作用域内
修复命名错误的 PULL_REQUEST_TEMPLATE
将 non_pooled_task_slot_count 提取到配置参数中
更新 plugins.rst 以清楚说明示例 (#1309)
修复 s3 日志记录问题
添加 Twitter 源示例 DAG
GitHub ISSUE_TEMPLATE 和 PR_TEMPLATE 清理
降低记录器详细程度
添加 PR 模板
将 Lucid 添加到用户列表中
修复 asciiart 的使用
使用会话而不是过时的 main_session 进行 are_dependencies_met
修复 celery flower 端口分配
修复由于 flask-admin 升级导致的缺少编辑操作的问题
修复 prioritize_queued 方法中注释的拼写错误
添加 HipchatOperator
在回填单元测试中包含所有示例 DAG
确保跳过的作业实际被跳过
修复一个损坏的示例 DAG,example_skip_dag.py
添加一致且彻底的信号处理和日志记录
允许操作符在内部指定 SKIPPED 状态
更新执行器陷阱单元测试的文档字符串
文档:解释 Jinja 模板化用于模板化参数的用法
不要在 DAG 的 start_date 之前调度运行
修复池的无限重试,带有测试
修复死锁作业的处理
仅显示 Airflow 的弃用警告
为单元测试设置 DAG_FOLDER
setup.py 中缺少逗号
弃用 BaseOperator 中的 args 和 kwargs
引发深度调度程序异常以强制进程重新启动。
更改不一致的示例 DAG 所有者
修复配置中 send_email_smtp 的模块路径
将 Gentner Lab 添加到用户列表中
增加单元测试的超时时间
修复从 conf 读取字符串的问题
CHORE - 删除尾随空格
修复使用自定义 ssh 端口时 SSHExecuteOperator 崩溃的问题
在模板中添加关于 Airflow 组件的说明
为了清晰起见,重写 BackfillJob 逻辑
添加单元测试
修复其他错误并清理代码
修复确定 DagRun 状态的逻辑
使 SchedulerJob 不运行每个排队的任务
改进 BackfillJob 对排队/死锁任务的处理
引入 ignore_depends_on_past 参数
将 Popen 与 CeleryExecutor 一起使用
将用户表重命名为 users,以避免与 postgres 冲突
注意负池槽位。
添加对从 boto 到 S3_Hook 的 calling_format 的支持
添加 PyPI 元数据并同步版本号
将 dags_are_paused_at_creation 的默认值设置为 True
重新显示被 rebase/push -f 吃掉的 S3Log 类
在 initdb 末尾添加缺少的 session.commit()
验证子 DAG 任务是否具有可用的池槽位,并进行测试
对远程 GCS 日志使用 urlparse,并添加单元测试
使 Web 服务器 worker 超时可配置
修复 @once 间隔的调度
使用 psycopg2 的 API 序列化 postgres 单元格值
使 provide_session 装饰器更加健壮
更新 Lyft 网站的链接
使用 num_shards 而不是 partitions,以与批量摄取保持一致
将文档链接添加到 README
使用单独的配置部分更新文档
修复 airflow.utils 弃用警告代码与 Python 3 不兼容的问题
将 dbapi 单元格序列化提取到其自己的方法中
将 Postgres 自动提交设置为仅在服务器版本 < 7.4 时支持
在单元测试导入中使用重构后的 utils 模块
为 1.7.0 添加变更日志
如果可能,在 Travis 上使用 LocalExecutor
删除未使用的 logging, errno, MiniHiveCluster 导入
删除多余的 logging 库导入
修复所需的 gcloud 版本
将 utils 重构为更小的子模块
正确衡量任务重试次数
添加将配置作为字典获取的函数,以及单元测试
将分支 ‘master’ 合并到 hivemeta_sasl
在 README.md 中添加 wiki 链接
[hotfix] 为 py3 将 email.Utils 修改为 email.utils
将缺失的 “Date” 标头添加到警告电子邮件中
将缺失的 “Date” 标头添加到警告电子邮件中
检查 SubDag 类的名称而不是类本身
[hotfix] 从 .coveralls.yml 中删除 repo_token
在 coverals.yml 中设置 service_name
修复 #1223
更新 Airflow 文档以进行远程日志记录
为捕获 Executor 错误添加单元测试
确保 Executors 正确捕获错误
修复 HttpOpSensorTest 以使用伪造的请求会话
代码检查
在文档中添加有关池用法的示例
为 bigquery hook 的基础游标添加两个方法:run_table_upsert,用于添加表或更新现有表;run_grant_dataset_view_access,用于授予给定表对给定数据集的查看权限。
任务使用字符串而不是引用来引用上游和下游任务
修复 models.py 中的拼写错误
修复文档中损坏的链接
[hotfix] 修复 Scheduler CLI 使 dag_id 成为可选
更新 README 中指向常见陷阱 wiki 页面的链接
允许在使用 DbApiHook 插入行时禁用定期提交
将 Glassdoor 添加到 “谁在使用 airflow”
修复阻止启动 Web 服务器的拼写错误
文档徽章
修复 ISSUE_TEMPLATE 名称以包含 .md 后缀
添加 ISSUE_TEMPLATE 以确保问题得到充分定义
代码检查 & 调试
将 CLI 重构为数据驱动
更新 Contributing.md 文件中的错误报告协议
修复文档
清理对旧会话的引用
删除会话引用
解决冲突
当任务实例启动时清除 xcom 数据
用 @provide_session 替换 main_session
将 extras 添加到 installation.rst
修改 Contributing 以更紧密地反映当前的开发状态。
修改 README 以链接到 wiki 提交者列表
文档:修复默认配置中的拼写错误
将 webservice.service 的 killMode 设置为 ‘control-group’
将 worker.service 的 KillMode 设置为 ‘control-group’
代码检查
修复 WebHdfsSensor
添加更多许可证以通过检查
修复 landscape 的配置
[hotfix] 主分支中的拼写错误
[hotfix] 修复 landscape 需求检测
使 hive 上的测试有条件
将远程跟踪分支 ‘upstream/master’ 合并到 minicluster
更新 README.md
添加一些许可证以通过构建
为 landscape.io 添加 reqs.txt
指向 reqs 文件
一些代码检查
添加 .landscape.yml 文件
PyPI 版本的徽章
添加许可证并忽略 sql 和 csv
使用正确的连接 ID
使用正确的表名
为 ci 测试提供数据
显示 reqs 过时情况的新徽章
删除 requirements.txt,因为它是单维的
使其在 py3 上工作
删除日志记录的解码
也保持 py2 兼容
更多 py3 修复
为 py3 兼容转换为字节
确保与 py3 兼容
使用 unicodecsv 使其与 py3 兼容
用空格替换制表符,删除未使用的导入
合并远程跟踪分支 ‘upstream/master’
支持 MySQL 中到 GCS 的十进制类型
确保以字符串形式写入二进制文件,因为它可以是 unicode
忽略 metastore
更多 impyla 修复
如果 Python 2,则测试 HivemetaStore
允许用户在 HDFSHook 配置中设置 hdfs_namenode_principal
为 Hiveserver2 添加测试并修复 impyla 的一些问题
将分支 ‘impyla’ 合并到 minicluster
此补丁允许测试 hive 运算符和 hook。使用 Sasl(连接字符串中不可能使用 NoSasl)。已调整测试。
当评估 depends_on_past=True 时,将 SKIPPED 和 SUCCESS 以相同的方式处理
修复 bigquery hook
gcp_api 的版本上限
修复返回 VerticaHook 时的拼写错误
添加 fernet 密钥以将其用作 stdout 命令的一部分
添加对 ssl 参数的支持。(从 jthomas123 处获取)
错误消息中包含更多详细信息。
确保路径不会因尾部的 / 而冲突
将 gcs_hook 更改为 self.hook
重构远程日志读/写并添加 GCS 支持
仅当文件足够大时才在 S3Hook 中使用多部分上传
合并分支 ‘airbnb/master’
将 GSSAPI SASL 添加到 HiveMetaStoreHook。
为已弃用的设置添加警告
使用 kerberos_service_name = ‘hive’ 作为标准而不是 ‘impala’。
使用 GSSAPI 而不是 KERBEROS 并提供向后兼容性
ISSUE-1123 使用 impyla 而不是 pyhs2
设置 celery_executor 使用队列名称作为交换