首页/新闻资讯/正文详情

Apache Arrow 开发者工具实战:PR 自动合并脚本与 Docker 集成测试完全指南

发布时间:2026/9/24 9:52:11 来源:云帆数科 栏目:资讯中心
Apache Arrow 开发者工具实战:PR 自动合并脚本与 Docker 集成测试完全指南
Apache Arrow 开发者工具实战PR 自动合并脚本与 Docker 集成测试完全指南【免费下载链接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing项目地址: https://gitcode.com/gh_mirrors/arrow13/arrow本篇指南围绕 Apache Arrow 仓库 dev/README.md 所定义的开发者工具链展开系统讲解两大核心工作流如何使用dev/merge_arrow_pr.sh以命令行方式安全、规范地合并 Pull Request以及如何使用 Docker Compose 运行 HDFS、Apache Spark 等跨组件集成测试。读完本文你将掌握 Arrow Committer 的完整合并流程、令牌配置方法、交互式合并的输出解析以及基于 conda 镜像栈的集成测试命令与底层执行逻辑可直接对照本仓库源码逐行验证。一、dev 目录与开发者脚本概览dev/目录承载着 Apache Arrow 项目面向开发者尤其是 Committer 与 Release Manager的一系列工具脚本覆盖打包、测试与代码提交commit三大场景。其中与日常协作最密切相关的是dev/merge_arrow_pr.sh合并 PR 的入口包装脚本自动创建 Python 虚拟环境并调用主脚本dev/merge_arrow_pr.py合并 PR 的核心实现负责调用 GitHub REST API 完成 squash 合并、更新关联 issue 与 milestonedev/merge.conf.sample令牌配置文件模板dev/requirements_merge_arrow_pr.txt合并脚本的 Python 依赖清单jira、requestsdev/test_merge_arrow_pr.py针对合并脚本逻辑的单元测试。此外dev/下还包含 dev/archeryCI/发布辅助工具集与 dev/release发版脚本等目录本文聚焦 README 明确阐述的合并与集成测试两条主线。二、合并 Pull Request 的前置条件合并 PR 需要满足两个硬性条件必须是项目 Committer合并操作要求使用者拥有项目的 committer 权限必须在 GitBox 完成账号关联需要将 GitHub 账号与 ASF 账号在 GitBox 设置页完成绑定绑定后才能以 GitHub 作为主远端进行 push。需要特别留意的是GitBox 设置完成与 GitHub 账号正式获得 committer 身份之间存在数小时的延迟刚完成绑定后立即操作可能失败这是文档明确标注的已知注意事项。项目同时强调不要通过 GitHub Web 界面直接合并 PR所有合并都应走统一的命令行脚本以保证提交信息格式如GH-#xxx前缀、作者信息、Signed-off-by等的规范化。三、启动合并脚本一条命令完成环境准备在仓库根目录下直接运行dev/merge_arrow_pr.sh该包装脚本会自动完成两件事见 dev/merge_arrow_pr.sh根据当前python3版本在dev/.venv[PY_VERSION]如dev/.venv3.8下创建 Python 虚拟环境使用该虚拟环境中的pip静默安装 dev/requirements_merge_arrow_pr.txt 中的依赖jira、requests然后调用 dev/merge_arrow_pr.py。脚本实现细节值得关注它通过git rev-parse --show-toplevel定位仓库根目录而非假定当前目录因此可在仓库任意子目录下安全调用set -e保证任何一步失败立即中止若虚拟环境损坏python3不可执行会明确提示并退出。若安装失败脚本会提示删除dev/.venv[PY_VERSION]目录后重试。Windows 注意事项项目目前未提供 Windows 包装脚本Windows 用户需自行安装 Python 依赖后直接运行python dev/merge_arrow_pr.py四、令牌配置环境变量与配置文件两种方式合并脚本需要通过 REST API 访问 GitHub读取 PR、执行合并、更新 issue并通过 JIRA 客户端访问 ASF JIRA更新 ARROW 相关 issue。令牌配置支持两种方式且配置文件优先级高于环境变量见 dev/merge_arrow_pr.py 与 dev/merge_arrow_pr.py。4.1 环境变量方式环境变量用途备注ARROW_GITHUB_API_TOKENGitHub API 令牌必须为 Personal Access Token且需勾选workflowscopeAPACHE_JIRA_TOKENASF JIRA 令牌若不设置脚本会以交互方式询问export ARROW_GITHUB_API_TOKENghp_xxx export APACHE_JIRA_TOKENxxx dev/merge_arrow_pr.sh说明项目合并仅需要 GitHub 令牌即可完成主流程Parquet 相关 PR 则可能同时使用 GitHub 或 JIRA 令牌PARQUET-前缀 issue 走 JIRA 更新。4.2 配置文件方式从仓库根目录复制模板并修改cp dev/merge.conf.sample ~/.config/arrow/merge.conf配置文件为 INI 格式模板内容如下见 dev/merge.conf.sample[jira] # issues.apache.org Jira personal access token tokenabc123 [github] # GitHubs personal access token. workflow scope is needed. api_tokenghp_ABC脚本通过configparser读取~/.config/arrow/merge.conf见 dev/merge_arrow_pr.py。若文件与环境变量都未提供令牌脚本会回退到交互式输入提示避免流程中断。4.3 其他可选环境变量从源码头注释与实现dev/merge_arrow_pr.py可以看到以下高级配置ARROW_GITHUB_ORGGitHub 组织名默认apache兼容旧变量名PR_REMOTE_NAMEARROW_PROJECT_NAME项目名默认arrowDEBUG调试模式开关设为1时只打印将执行的合并标题、提交信息等内容而不会真正 push 到 Apache 或修改 issue 状态非常适合演练验证。五、合并流程的交互式输出详解启动脚本并输入 PR 编号也可直接用命令行参数传入如dev/merge_arrow_pr.py 34见 dev/merge_arrow_pr.py后脚本首先打印 PR 概览Which pull request would you like to merge? (e.g. 34):输入编号并回车后脚本拉取 PR 与关联 issue 信息 Pull Request #X title GH-#Y: [Component] Title source repo/branch target master url https://api.github.com/apache/arrow/pulls/X GITHUB #Y Summary [Component] Title Assignee Name Components Python Status open URL https://github.com/apache/arrow/issues/Y Proceed with merging pull request #X? (y/n): y确认无误后输入y并回车脚本进入合并与提交信息组装阶段Author 1: Name Pull request #X merged! Merge hash: #hash Would you like to update the associated issue? (y/n): y Enter fix version [11.0.0]:直接回车即可使用默认的 fix version脚本会根据未发布的 milestone 自动推荐随后脚本通过 JIRA/GitHub API 关闭关联 issueSuccessfully resolved #Y! GITHUB #Y Summary [Component] Title Assignee Name Components Python Status closed URL https://github.com/apache/arrow/issues/Y六、合并脚本的源码级原理6.1 PR 标题解析规则脚本通过 PR 标题判断其关联 issuedev/merge_arrow_pr.py标题以GH-#数字开头关联 GitHub issue标题以MINOR:开头视为 minor 变更无关联 issue合并后不更新任何 issue标题以PARQUET-数字开头关联 PARQUET JIRA issue标题以ARROW-数字开头脚本会直接报错提示将旧 JIRA 编号迁移为 GitHub issue 编号并尝试从 JIRA 迁移评论中推断对应 GH 编号。此外脚本还会在提交前检查 PR 的 merged / mergeable 状态见 dev/merge_arrow_pr.py已合并的 PR 直接退出不可合并的 PR 以非零状态退出。6.2 合并方式与提交信息组装合并使用squash压缩合并方式dev/merge_arrow_pr.py提交标题为原PR标题 (#编号)。提交信息体由以下部分组装清理后的 PR 描述剔除 HTML 注释并在用户名后插入空格避免触发 GitHub 提醒Authored-by:或Lead-authored-by:多作者时字段所有Co-authored-by:信息从各 commit 消息中提取使用git config读取的 committer 的Signed-off-by: 姓名 邮箱。多作者场景下脚本会提示确认主作者Enter primary author in the format of name email格式校验不通过会反复提示重试。6.3 合并完成后的清理合并成功后脚本会调用 GitHub API 删除 PR 上以awaiting开头的状态标签如awaiting-change-review等保持 PR 工作流标签整洁dev/merge_arrow_pr.py。随后询问是否更新关联 issue确认后根据推荐的 fix version 将其关闭并在注释中附上合并该 PR 的链接。七、Docker 集成测试总览dev/README.md的第二个主题是集成测试验证 Arrow 各语言实现与外部系统HDFS、Spark 等的协同工作。仓库根目录的 docker-compose.yml 定义了整套镜像服务其层级关系见 docker-compose.yml为conda └─ conda-cpp └─ conda-python ├─ conda-python-hdfs ├─ conda-python-spark └─ ...也就是说conda-cpp以conda为基础conda-python又基于conda-cppHDFS 与 Spark 集成测试镜像再叠加在conda-python之上。各层对应镜像定义位于 ci/docker 目录如 ci/docker/conda.dockerfile、ci/docker/conda-cpp.dockerfile、ci/docker/conda-python.dockerfile默认构建参数由根目录 .env 提供如PYTHON3.8、HDFS3.2.1、SPARKmaster、JDK8、MAVEN3.8.7。原文档记载集成测试存在一个被多个测试复用的基础镜像构建命令为docker build -t arrow_integration_xenial_base -f docker_common/Dockerfile.xenial.base .需要说明的是当前仓库已将镜像构建定义统一收敛到根目录 docker-compose.yml 与 ci/docker 之下历史命令中的docker_common目录在本仓库中已不存在实际操作请以下面各节的 docker-compose 命令为准。八、HDFS C / Python 集成测试HDFS 集成测试用于验证 Arrow C 与 Python 的 HDFS 文件系统支持。按依赖顺序依次构建并运行docker-compose build conda-cpp docker-compose build conda-python docker-compose build conda-python-hdfs docker-compose run --rm conda-python-hdfsconda-python-hdfs服务的关键配置见 docker-compose.yml构建参数hdfs: ${HDFS}默认 3.2.1、jdk: ${JDK}、maven: ${MAVEN}环境变量ARROW_HDFSON测试目标ARROW_HDFS_TEST_HOSTimpala、端口8020、用户hdfs通过links关联impala服务作为 HDFS 测试集群容器内依次执行 ci/scripts/cpp_build.sh、ci/scripts/python_build.sh最后运行 ci/scripts/integration_hdfs.sh。从 ci/scripts/integration_hdfs.sh 可以看到测试的真实内容它会以use_hadoop_home走 Hadoop 的libhdfs与use_libhdfs_dir走ARROW_LIBHDFS_DIR指定路径两种方式分别执行 C 测试程序arrow-io-hdfs-test、arrow-hdfs-test再以PYARROW_TEST_HDFSON运行 Python 侧的pyarrow.tests.test_fs文件系统测试。九、Apache Spark 集成测试Spark 集成测试用于验证当前快照的 Arrow Java 与 PythonPyArrow实现能与 Spark 协同工作。流程为在 Conda 环境中构建 Arrow C 与 Python → 将 Arrow Java 安装到本地 Maven 仓库 → 使用新 Arrow 构件构建 Spark → 运行 Spark 中与 Arrow 相关的 Java 与 Python 单元测试任何错误都会以非零状态退出。执行命令见 dev/README.mddocker-compose build conda-cpp docker-compose build conda-python docker-compose build conda-python-spark docker-compose run --rm conda-python-spark9.1 复用本地 Maven 缓存如果本机已经构建过 Spark可以将本地 Maven 仓库映射进容器避免重复下载全部依赖docker-compose run --rm -v $HOME/.m2:/root/.m2 conda-python-spark重要提醒容器内文件以 root 身份写入映射本地~/.m2后可能因文件属主变为 root 而在宿主机上产生 Maven 权限问题使用前需自行权衡。9.2 测试的源码级执行细节conda-python-spark服务docker-compose.yml在容器内依次执行 C 构建、Python 构建、Java 构建最后运行 ci/scripts/integration_spark.sh。从该脚本可以看出测试的关键逻辑通过SPARK_VERSION环境变量选择 Spark 分支默认master对 Spark 2.x 系列设置ARROW_PRE_0_15_IPC_FORMAT1以兼容旧 IPC 格式并设置PYARROW_IGNORE_TIMEZONE1读取 Arrow Java 的实际版本号用 Maven 的versions:set-property将 Spark 的arrow.version属性更新为该版本再打包构建 Spark运行 Spark 侧 Java 测试如org.apache.spark.sql.execution.arrow相关套件、ColumnarBatchSuite、ArrowColumnVectorSuite按 Spark 版本选择对应路径运行 PySpark 侧测试pyspark.sql.tests.test_arrow及 pandas UDF 系列测试支持test_pyarrow_onlytrue参数仅用最新 PyArrow 测试 Spark跳过重新构建 Arrow Java。注意事项如果 Arrow Java API 发生破坏性变更可能需要使用打过补丁的 Spark 版本才能成功构建README 中明确提示。此外Spark 构建耗时较长需保证容器拥有充足的内存与磁盘资源。十、参考文件速查合并流程 dev/merge_arrow_pr.sh、dev/merge_arrow_pr.py、dev/merge.conf.sample、dev/requirements_merge_arrow_pr.txt、dev/test_merge_arrow_pr.py集成测试编排 docker-compose.ymlconda-cpp/conda-python/conda-python-hdfs/conda-python-spark服务、.env默认版本参数集成测试脚本 ci/scripts/integration_hdfs.sh、ci/scripts/integration_spark.sh镜像定义 ci/docker 目录下的conda*.dockerfile【免费下载链接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing项目地址: https://gitcode.com/gh_mirrors/arrow13/arrow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Edge AI老工控改造:PCIe与USB 2.0桥接方案全解析
Edge AI老工控改造:PCIe与USB 2.0桥接方案全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/23 1:22:58

3个坑让C32Asm面试必问变简单
3个坑让C32Asm面试必问变简单

3个坑让C32Asm面试必问变简单 版本升级后 API 全变了,这是很多老程序员转岗或维护旧项目时的噩梦。昨天刚跑通的代码,今天换个编译器版本直接报一堆未定义引用,面试时被问“为什么这里要用这种汇编写法”,张嘴就是卡顿。… · 2026/9/23 1:22:58

ramsey/uuid 全局辅助函数 v1–v8 全解析:一行代码直接生成 UUID 字符串
ramsey/uuid 全局辅助函数 v1–v8 全解析:一行代码直接生成 UUID 字符串

后端 【免费下载链接】uuid :snowflake: A PHP library for generating universally unique identifiers (UUIDs). 项目地址: https://gitcode.com/gh_mirrors/uui/uuid 点击查看 免费下载 导读 ramsey/uuid(当前仓库 gh_mirrors/uui/uuid)… · 2026/9/24 9:35:02

SpaceX-API v4 单个着陆场查询接口实战:GET /v4/landpads/:id 返回结构、字段语义与源码实现解析
SpaceX-API v4 单个着陆场查询接口实战:GET /v4/landpads/:id 返回结构、字段语义与源码实现解析

后端API设计 【免费下载链接】SpaceX-API :rocket: Open Source REST API for SpaceX launch, rocket, core, capsule, starlink, launchpad, and landing pad data. 项目地址: https://gitcode.com/gh_mirrors/spa/SpaceX-API 点击查看 免费下载 本文以 SpaceX-AP… · 2026/9/24 9:52:09

PaddleSpeech 离线 TTS 服务引擎 paddleinference 源码级解析:从静态模型加载到 HTTP 合成全链路
PaddleSpeech 离线 TTS 服务引擎 paddleinference 源码级解析:从静态模型加载到 HTTP 合成全链路

人工智能语音音频NLP媒体生成 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation … · 2026/9/24 9:52:09

Robot Framework 3.2 版本深度解析:新解析器、@library 装饰器与 inline Python 求值
Robot Framework 3.2 版本深度解析:新解析器、@library 装饰器与 inline Python 求值

测试RPA接口测试 【免费下载链接】robotframework Generic automation framework for acceptance testing and RPA 项目地址: https://gitcode.com/gh_mirrors/ro/robotframework 点击查看 免费下载 本指南以官方发布说明 doc/releasenotes/rf-3.2.rst 为骨架&… · 2026/9/24 9:52:09

如果 AGI 已经来了,而它是由……孩子们组成的?
如果 AGI 已经来了,而它是由……孩子们组成的?

原文标题:What if AGI is already here, and it’s made of… children? 作者:Pascio(IAmPascio) 原文链接:https://x.com/IAmPascio/status/2098799094835675574超级智能、奇点、AGI……不管你怎么叫它,我… · 2026/9/24 9:52:03

spotifyd 无头系统(Headless)启用 MPRIS 完整指南:dbus-launch 与系统总线双方案实战
spotifyd 无头系统(Headless)启用 MPRIS 完整指南:dbus-launch 与系统总线双方案实战

音频后端 【免费下载链接】spotifyd A spotify daemon 项目地址: https://gitcode.com/gh_mirrors/sp/spotifyd 点击查看 免费下载 本篇技术指南聚焦 spotifyd 在无图形会话(headless)环境下的 MPRIS 集成难题:默认情况下 MPRIS … · 2026/9/24 9:52:03

mRemoteNG 连接导入导出完全指南:文件、Active Directory 与端口扫描实战
mRemoteNG 连接导入导出完全指南:文件、Active Directory 与端口扫描实战

桌面应用网络 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_mirrors/mr/mRemoteNG 点击查看 免费下载 导读 本文以 mRemoteNG … · 2026/9/24 9:51:46

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码