Apache Airflow HDFS Provider 4.13.0:从官方源码包安装与发布完整性验证
2026/9/13 4:07:13 网站建设 项目流程

Apache Airflow HDFS Provider 4.13.0:从官方源码包安装与发布完整性验证

【免费下载链接】airflowApache Airflow - A platform to programmatically author, schedule, and monitor workflows项目地址: https://gitcode.com/GitHub_Trending/ai/airflow

本文基于 Apache Airflow 仓库中 HDFS 提供商的安装文档 providers/apache/hdfs/docs/installing-providers-from-sources.rst,完整讲解如何从 Apache 软件基金会官方发布渠道下载apache-airflow-providers-apache-hdfs的源码包、sdist 与 whl 三种制品,如何用 PGP 签名与 SHA512 校验和验证其完整性,以及如何对 PyPI 上的 whl 包做同样的端到端核验。读完后,你能够独立完成该 Provider 包的官方渠道安装、发布溯源(provenance)验证与供应链安全检查。

文档溯源:这一页是如何从仓库模板生成的

HDFS Provider 的 "Installing from sources" 文档本体只有一行有效内容——一个跨目录的 RST include:

.. include:: /../../../../devel-common/src/sphinx_exts/includes/installing-providers-from-sources.rst

也就是说,所有 Provider 共享同一份安装文档模板 devel-common/src/sphinx_exts/includes/installing-providers-from-sources.rst。模板中的下载链接、包名和版本号并不是写死的,而是通过sphinx-jinjaofficial_download_page上下文在构建文档时动态填充。填充逻辑位于 devel-common/src/docs/provider_conf.py:

"official_download_page": { "base_url": "https://downloads.apache.org/airflow/providers", "closer_lua_url": "https://www.apache.org/dyn/closer.lua/airflow/providers", "package_name": PACKAGE_NAME, "package_name_underscores": PACKAGE_NAME.replace("-", "_"), "package_version": PACKAGE_VERSION, "providers_release_date": PROVIDERS_RELEASE_DATE, },

其中PACKAGE_NAME由 HDFS Provider 的文档构建配置 providers/apache/hdfs/docs/conf.py 设置为apache-airflow-providers-apache-hdfsPROVIDERS_RELEASE_DATE则读取仓库根providers目录下的.last_release_date.txt(路径定义在 devel-common/src/docs/provider_conf.py 中)。因此渲染出的最终文档,等价于把下面这些具体值代入模板:

模板变量HDFS Provider 的具体取值
package_nameapache-airflow-providers-apache-hdfs
package_name_underscoresapache_airflow_providers_apache_hdfs
package_version4.13.0(见 providers/apache/hdfs/pyproject.toml 与 providers/apache/hdfs/provider.yaml)
base_urlhttps://downloads.apache.org/airflow/providers
closer_lua_urlhttps://www.apache.org/dyn/closer.lua/airflow/providers

这种"共享模板 + Jinja 变量"的组织方式意味着:理解一份 Provider 的安装文档,就理解了所有 Provider 的官方发布流程。

已发布的官方制品:三种下载形态及其来源

文档明确指出,已发布的包分为两类性质:

  1. Source packages(源码包):Apache 软件基金会的官方制品。如果你希望自行从源码构建包,并确保包的来源(provenance)经过验证、与仓库源码一致,就应该使用这类制品——你可以逐一校验它们的校验和与签名。
  2. sdistwhl便捷包:同样由同一份源码构建安装而来,虽然更省事,但同样可以在 Apache 官方下载渠道获取,并验证其来源、校验和与签名。

针对 HDFS Provider 4.13.0,模板渲染出的具体下载项为(均以base_url为主分布目录):

  • Providers 源码包(包含本批次发布的全体 Providers):apache_airflow_providers-<providers_release_date>-source.tar.gz
  • Sdist 包apache-airflow-providers-apache-hdfs-4.13.0.tar.gz
  • Whl 包apache_airflow_providers_apache_hdfs-4.13.0-py3-none-any.whl

每一项制品都附带两个校验文件:

  • *.asc—— GPG 签名文件
  • *.sha512—— SHA512 校验和文件

例如 sdist 对应apache-airflow-providers-apache-hdfs-4.13.0.tar.gz.ascapache-airflow-providers-apache-hdfs-4.13.0.tar.gz.sha512。文档同时说明,也可以像大多数 Python 包一样直接从 PyPI 安装该版本,并在版本下拉框中选择其他历史版本。

如果你要从源码构建,文档指引你下载上面的 sources 包,其中包含一份INSTALL文件,详细说明如何构建和安装 Provider——仓库根目录同样维护着这份 INSTALL 文件,可对照阅读。

从源码看 sdist 是如何被打包的

HDFS Provider 的构建配置 providers/apache/hdfs/pyproject.toml 使用 flit 作为构建后端:

[build-system] requires = ["flit_core==4.0.2"] build-backend = "flit_core.buildapi"

值得注意的是其[tool.flit.sdist]段(providers/apache/hdfs/pyproject.toml)显式列出了 sdist 需要携带的内容:

[tool.flit.sdist] include = [ "docs/", "provider.yaml", "src/airflow/__init__.py", "src/airflow/providers/__init__.py", "src/airflow/providers/apache/__init__.py", "tests/", ]

源码注释解释了动机:这是为了构建不依赖 VCS 信息(flit 4.0 起--no-use-vcs成为默认行为)。换句话说,你从 Apache 官方下载的 sdist 是自包含的,解压后无需访问任何版本控制系统即可完成安装。

该包的运行依赖同样在 providers/apache/hdfs/pyproject.toml 中声明,安装前值得了解:

requires-python = ">=3.10" dependencies = [ "apache-airflow>=2.11.0", "apache-airflow-providers-common-compat>=1.12.0", 'hdfs[avro,dataframe,kerberos]>=2.5.4;python_version<"3.12"', 'hdfs[avro,dataframe,kerberos]>=2.7.3;python_version>="3.12"', 'fastavro>=1.10.0; python_version>="3.13" and python_version<"3.14"', 'fastavro>=1.12.1; python_version>="3.14"', 'pandas>=2.1.2; python_version <"3.13"', 'pandas>=2.2.3; python_version >="3.13" and python_version <"3.14"', 'pandas>=2.3.3; python_version >="3.14"', ]

可见hdfsfastavropandas的版本下限都按 Python 小版本做了条件化裁剪,Python 3.10 起受支持。包的安装入口点声明在 providers/apache/hdfs/pyproject.toml:

[project.entry-points."apache_airflow_provider"] provider_info = "airflow.providers.apache.hdfs.get_provider_info:get_provider_info"

Provider 的元数据(名称、生命周期状态production、全部历史版本列表、集成的 hooks/sensors/logging 组件)则集中在 providers/apache/hdfs/provider.yaml,可作为核实你安装版本是否属于官方发布序列的参照。

发布完整性验证(Release integrity):PGP 签名与 SHA512 校验

文档强调:必须使用 PGP 或 SHA 签名验证下载文件的完整性。签名验证需要两步:先导入发布管理者的公钥,再对制品本身验签。文档特别提示,KEYS公钥文件与对应的.asc签名文件都应从主分布目录获取,而不是从镜像站获取。

第一步:导入公钥

从 PGP 签名 KEYS 文件导入(KEYS随 Airflow 发布目录提供,需自行下载):

gpg -i KEYS

或使用其他等价工具:

pgpk -a KEYS
pgp -ka KEYS

第二步:验证签名

对下载好的制品与签名文件执行验证。以 HDFS Provider 的 sdist 为例,文档给出的通用命令形式为:

gpg --verify apache-airflow-providers-apache-hdfs-4.13.0.tar.gz.asc apache-airflow-providers-apache-hdfs-4.13.0.tar.gz

其他工具的等价形式:

pgpv apache-airflow-providers-apache-hdfs-4.13.0.tar.gz.asc
pgp apache-airflow-providers-apache-hdfs-4.13.0.tar.gz.asc

解读验证输出

文档附带的示例输出(模板中的示例输出,其签名者信息以你实际导入的KEYS为准):

$ gpg --verify apache-airflow-providers-apache-hdfs-4.13.0.tar.gz.asc apache-airflow-providers-apache-hdfs-4.13.0.tar.gz gpg: Signature made Sat 11 Sep 12:49:54 2021 BST gpg: using RSA key CDE15C6E4D3A8EC4ECF4BA4B6674E08AD7DE406F gpg: issuer "kaxilnaik@apache.org" gpg: Good signature from "Kaxil Naik <kaxilnaik@apache.org>" [unknown] gpg: aka "Kaxil Naik <kaxilnaik@gmail.com>" [unknown] gpg: WARNING: The key's User ID is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: CDE1 5C6E 4D3A 8EC4 ECF4 BA4B 6674 E08A D7DE 406F

两点关键解读(原文档明确说明):

  • Good signature from ...表示签名校验通过,制品未被篡改;
  • 不必担心not certified with a trusted signature警告:大多数发布管理者的证书是自签的,所以会出现此提示。由于你上一步已经从官方KEYS页按 ID 导入了该密钥,就已经确认它是一把有效密钥。

第三步:SHA512 校验和比对

下载对应的.sha512文件后执行:

shasum -a 512 apache-airflow-providers-apache-hdfs-4.13.0.tar.gz | diff - apache-airflow-providers-apache-hdfs-4.13.0.tar.gz.sha512

文件实际计算出的SHASUM必须与.sha512文件中提供的值一致。对 whl 包同理,将文件名替换为apache_airflow_providers_apache_hdfs-4.13.0-py3-none-any.whl即可。

验证 PyPI 上的发布:端到端核验脚本

如果你最终从 PyPI 安装了该 Provider 的.whl包,同样可以核验其官方性。文档提供的方法是:本地用pip download拉取 PyPI 上的制品,同时用curl从 Apache 主分布目录拉取该 whl 对应的.asc.sha512文件,然后按上一节的流程验证。

将模板中的变量代入 HDFS Provider 后的完整脚本如下:

#!/bin/bash PACKAGE_VERSION=4.13.0 PACKAGE_NAME=apache-airflow-providers-apache-hdfs provider_download_dir=$(mktemp -d) pip download --no-deps "${PACKAGE_NAME}==${PACKAGE_VERSION}" --dest "${provider_download_dir}" curl "https://downloads.apache.org/airflow/providers/apache_airflow_providers_apache_hdfs-4.13.0-py3-none-any.whl.asc" \ -L -o "${provider_download_dir}/apache_airflow_providers_apache_hdfs-4.13.0-py3-none-any.whl.asc" curl "https://downloads.apache.org/airflow/providers/apache_airflow_providers_apache_hdfs-4.13.0-py3-none-any.whl.sha512" \ -L -o "${provider_download_dir}/apache_airflow_providers_apache_hdfs-4.13.0-py3-none-any.whl.sha512" echo echo "Please verify files downloaded to ${provider_download_dir}" ls -la "${provider_download_dir}" echo

脚本要点:

  • pip download --no-deps只下载 whl 本身,不拉取依赖树,保证被验证对象唯一;
  • .asc/.sha512一律来自 Apache 主分布目录(downloads.apache.org/airflow/providers),这正是文档"KEYS 与签名文件应来自主分布目录而非镜像"原则的落地;
  • 下载完成后,对临时目录中的 whl 执行"PGP 验签 + SHA512 比对"两步(见上一节),验证通过后再删除临时目录。

小结:从源码到签名的一条溯源链

把仓库证据与文档流程串起来,HDFS Provider 的官方发布链路是清晰且可复核的:

  1. 构建:源码位于 providers/apache/hdfs/ 目录,由 flit_core 4.0.2 按 providers/apache/hdfs/pyproject.toml 构建,sdist 内容清单显式声明、不依赖 VCS 信息;
  2. 发布:以 Apache 软件基金会官方制品形式发布 providers source、sdist、whl 三类包,每件附带.asc.sha512
  3. 文档:各 Provider 的安装页由共享模板 devel-common/src/sphinx_exts/includes/installing-providers-from-sources.rst 加上 devel-common/src/docs/provider_conf.py 中的 Jinja 上下文渲染生成,HDFS Provider 的具体取值(包名、下划线包名、版本 4.13.0、主分布目录)完全由仓库内配置决定;
  4. 验证:无论走 Apache 官方下载还是 PyPI,最终都以"KEYS导入 +gpg --verify+shasum -a 512 | diff"同一套流程收口。

适用前提提示:本文所有包名、版本号与依赖约束均取自当前仓库快照中的 HDFS Provider 4.13.0 配置;若切换其他 Provider 或其他版本,只需按上文表格替换package_namepackage_name_underscorespackage_version三个变量,流程与命令形态完全不变。

【免费下载链接】airflowApache Airflow - A platform to programmatically author, schedule, and monitor workflows项目地址: https://gitcode.com/GitHub_Trending/ai/airflow

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询