
数据工程大数据序列化数据分析【免费下载链接】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/conbench_envs目录为核心系统讲解 Arrow 项目如何为 conbench 基准测试系统准备多语言C/Python/R/Java/JavaScript构建环境与运行环境。你将掌握benchmarks.env中每个构建参数的真实作用、hooks.sh中每个 hook 函数的实现细节以及一条从安装系统依赖到运行各语言 micro-benchmark 的完整可复现流程——既能支撑 CI 中ursabot please benchmark自动化评测也能在本地手工搭建同款基准测试环境。一、目录定位基准测试的环境即代码在 Apache Arrow 仓库中dev/conbench_envs目录承担着把基准测试环境声明为版本化代码的职责包含两个核心文件benchmarks.env用于构建 Arrow C/Python/R/Java/JavaScript 并运行 conbench 基准测试的环境变量清单hooks.sh被ursabot基准测试构建调用的 hook 函数集负责创建 conda 环境、从源码编译 Arrow 各语言绑定。1.1 自动化触发的完整闭环整个自动化基准测试的流程是开发者创建apache/arrowPR修改或新增 benchmarks.env 中的环境变量在 PR 下评论ursabot please benchmark触发基准构建构建完成后PR 评论中会出现 compare/runs 链接其中baseline PR 基线的 HEAD commit使用未改动的dev/conbench_envs/benchmarks.envcontender PR 分支的 HEAD commit使用被覆盖后的dev/conbench_envs/benchmarks.env。通过对比 baseline 与 contender 的基准结果Arrow 贡献者可以量化评估不同构建选项、依赖版本对性能的影响。1.2 为什么需要hooks.shursabot的基准测试构建托管在 Ursa 的私有仓库中而构建逻辑本身创建 conda 环境、编译 Arrow 各语言必须在 Arrow 仓库内定义。将 hook 定义在 Arrow 仓库中可以保证某个 commit 的基准构建与该 commit 内用于安装依赖和构建 Arrow 的脚本天然兼容——因为 hook 函数引用的ci/conda_env_*.txt、ci/scripts/*.sh等文件都取自被评测的同一个 commit。这正是该设计的精妙之处Arrow 贡献者通过修改hooks.sh即可评估不同构建选项、依赖版本、编译器配置的性能影响而无需改动任何 CI 基础设施。二、benchmarks.env基准构建参数逐项解析benchmarks.env 本质是一份 shell 风格的环境变量清单由hooks.sh中的set_arrow_build_and_run_env_vars()通过source加载并通过set -a/set a自动导出为全局变量。其内容与 ci/scripts/cpp_build.sh 中cmake的参数名一一对应可直接映射到 CMake 配置项。2.1 构建类型与组件开关变量取值说明CMAKE_BUILD_TYPE/ARROW_BUILD_TYPErelease使用 release 构建保证基准结果是优化后的真实性能ARROW_BUILD_TESTSOFF跳过单元测试编译加速构建ARROW_BUILD_BENCHMARKSON编译 Arrow C 的 micro-benchmark 目标这是conbench cpp-micro的数据来源ARROW_BUILD_BENCHMARKS_REFERENCEOFF不编译参考实现 benchmark节省构建时间ARROW_DEPENDENCY_SOURCEAUTO依赖优先使用系统/conda 已安装版本必要时自动下载源码构建PARQUET_BUILD_EXAMPLES/PARQUET_BUILD_EXECUTABLESON构建 Parquet 示例与可执行文件PYTHONpythonPython 解释器命令名2.2 功能模块开关变量取值说明ARROW_DATASETON启用 Dataset APIARROW_PARQUETON启用 Parquet 支持ARROW_ORCON启用 ORC 支持同时ORC_SOURCEBUNDLED表示 ORC 使用捆绑源码构建ARROW_PYTHONON启用 Cython 构建 Python 绑定所需接口ARROW_S3ON启用 S3 文件系统支持ARROW_HDFSON启用 HDFS 支持ARROW_FLIGHT/ARROW_GANDIVAOFF基准场景不需要 Flight RPC 与 Gandiva 表达式编译器这些开关会通过 ci/scripts/python_build.sh 中的PYARROW_WITH_*系列变量继续传递给 pyarrow 的构建如PYARROW_WITH_PARQUET${ARROW_PARQUET:-OFF}、PYARROW_WITH_DATASET${ARROW_DATASET:-ON}。2.3 内存池与压缩编解码器变量取值说明ARROW_DEFAULT_MEMORY_POOLmimalloc默认内存分配器使用 mimallocARROW_MIMALLOCON启用 mimalloc 编译ARROW_JEMALLOCOFF关闭 jemalloc避免两个分配器共存ARROW_WITH_BROTLI/ARROW_WITH_BZ2/ARROW_WITH_LZ4/ARROW_WITH_SNAPPY/ARROW_WITH_ZLIB/ARROW_WITH_ZSTDON启用全部主流压缩编解码器覆盖 Parquet/Arrow IPC 的常见压缩场景GTest_SOURCEBUNDLEDGoogleTest 使用捆绑源码2.4 性能与调试变量取值说明ARROW_ENABLE_UNSAFE_MEMORY_ACCESStrue关闭部分内存安全检查如 null 检查换取性能注意这是专门的基准配置生产构建不应盲目开启ARROW_ENABLE_NULL_CHECK_FOR_GETfalse进一步放宽Get路径的 null 检查ARROW_USE_CCACHEON启用 ccache 加速重复构建cpp_build.sh 会在构建前后输出ccache -sv统计ARROW_USE_ASAN/ARROW_USE_UBSANOFF关闭 Sanitizer避免运行时开销干扰基准2.5 运行时路径变量取值说明ARROW_HOME$CONDA_PREFIX安装前缀指向当前 conda 环境根目录LD_LIBRARY_PATH$CONDA_PREFIX/lib:$LD_LIBRARY_PATH保证运行时能找到 conda 内的动态链接库ARROW_INSTALL_NAME_RPATHON设置 macOS 安装名 RPATH三、hooks.shhook 函数的设计与实现hooks.sh 末尾的$使脚本可以直接以source dev/conbench_envs/hooks.sh 函数名的方式按名调用任意函数这是其作为函数注册表的入口约定。3.1 conda 环境相关 hookcreate_conda_env_for_benchmark_build() { conda create -y -n ${BENCHMARKABLE_TYPE} -c conda-forge \ --file ci/conda_env_unix.txt \ --file ci/conda_env_cpp.txt \ --file ci/conda_env_python.txt \ --file ci/conda_env_gandiva.txt \ compilers \ python${PYTHON_VERSION} \ pandas \ aws-sdk-cpp \ r }该函数以ci/下的四个依赖清单文件为基底创建 conda 环境环境名取自BENCHMARKABLE_TYPEci/conda_env_unix.txtUnix 通用依赖autoconf、ccache、orc、pkg-configci/conda_env_cpp.txtC 构建依赖含benchmark1.6.0,!1.8.4Google Benchmark、boost-cpp、aws-sdk-cpp、thrift-cpp、orc、re2、snappy、zstd、xsimd等ci/conda_env_python.txtPython 依赖含cython0.29.31、numpy1.16.6、pytest、s3fs等ci/conda_env_gandiva.txtGandiva 所需clang11、llvmdev11。activate_conda_env_for_benchmark_build()负责conda init bash并激活该环境install_arrow_python_dependencies()通过pip install -r python/requirements-build.txt -r python/requirements-test.txt补齐 Python 侧依赖。3.2 构建 hookbuild_arrow_cpp()使用uuidgen生成随机构建目录调用 ci/scripts/cpp_build.sh 执行完整 CMake Ninja 构建并install到ARROW_HOME同时优雅忽略 Cant create temporary cache file 的 ccache 报错build_arrow_python()调用 ci/scripts/python_build.sh以--no-deps --no-build-isolation方式安装 pyarrow并把ARROW_*变量映射为PYARROW_WITH_*如PYARROW_WITH_PARQUET、PYARROW_WITH_ORC、PYARROW_WITH_S3build_arrow_r()将 ci/etc/rprofile 追加到 R 的Rprofile.site执行 ci/scripts/r_deps.sh 安装 R 依赖再R CMD INSTALL安装 r 包build_arrow_java()调用 ci/scripts/java_build.sh 构建 Java 端install_archery()pip install -e dev/archery安装 Arrow 的开发者工具链 archerycpp-micro基准依赖它定位构建产物install_java_script_project_dependencies()在js/下执行yarn安装 JavaScript 依赖。3.3 组合 hook一键构建 C Pythoncreate_conda_env_with_arrow_python()是面向Python 基准的高层封装按顺序执行create_conda_env_for_benchmark_build → activate_conda_env_for_benchmark_build → install_arrow_python_dependencies → set_arrow_build_and_run_env_vars → build_arrow_cpp → build_arrow_python四、从零搭建基准环境的 14 步实操以下步骤来自 README展示ursabot基准构建在 Ubuntu 上如何组合benchmarks.env与hooks.sh。请根据自身操作系统与网络环境调整包管理器与版本。步骤 1安装 Arrow C 系统依赖sudo su apt-get update -y -q \ apt-get install -y -q --no-install-recommends \ autoconf ca-certificates ccache cmake g gcc gdb git \ libbenchmark-dev libboost-filesystem-dev libboost-regex-dev libboost-system-dev \ libbrotli-dev libbz2-dev libgflags-dev libcurl4-openssl-dev libgoogle-glog-dev \ liblz4-dev libprotobuf-dev libprotoc-dev libre2-dev libsnappy-dev libssl-dev \ libthrift-dev libutf8proc-dev libzstd-dev make ninja-build pkg-config \ protobuf-compiler rapidjson-dev tzdata wget \ apt-get clean rm -rf /var/lib/apt/lists* apt-get update -y -q \ apt-get install -y -q python3 python3-pip python3-dev \ apt-get clean rm -rf /var/lib/apt/lists/*这些库与 ci/conda_env_cpp.txt 声明的能力一一对应brotli/bz2/lz4/snappy/zstd 压缩、boost、thrift、re2、protobuf 等是ARROW_DEPENDENCY_SOURCEAUTO下优先复用的系统依赖。步骤 2安装 Java 依赖sudo su apt-get install openjdk-8-jdk apt-get install maven验证最低版本java、javac需 1.8Maven 需 3.x# java -version openjdk version 1.8.0_292 # javac -version javac 1.8.0_292 # mvn -version Apache Maven 3.6.3步骤 3安装 JavaScript 依赖sudo apt update sudo apt -y upgrade sudo apt update sudo apt -y install curl dirmngr apt-transport-https lsb-release ca-certificates curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash - sudo apt-get install -y nodejs sudo apt -y install yarn gcc g make验证最低版本Node 14、Yarn 1.22# node --version v14.17.2 # yarn --version 1.22.5步骤 4安装 Minicondasudo apt install curl curl -LO https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh sudo bash Miniconda3-latest-Linux-x86_64.sh步骤 5设置环境变量export ARROW_REPOhttps://github.com/apache/arrow.git export BENCHMARKABLEe6e9e6ea52b7a8f2682ffc4160168c936ca1d3e6 export BENCHMARKABLE_TYPEarrow-commit export PYTHON_VERSION3.8 export CONBENCH_EMAIL... export CONBENCH_URLhttps://conbench.ursa.dev export CONBENCH_PASSWORD... export MACHINE...ARROW_REPOArrow 仓库克隆地址可替换为你的 forkBENCHMARKABLE待评测的 commit SHABENCHMARKABLE_TYPE同时用作 conda 环境名PYTHON_VERSIONconda 环境中的 Python 版本会传入create_conda_env_for_benchmark_build的python${PYTHON_VERSION}CONBENCH_URL/CONBENCH_EMAIL/CONBENCH_PASSWORDconbench 服务的端点与凭据MACHINE当前运行机器的 hostname作为基准结果中的环境标识。步骤 6用组合 hook 构建 C 与 Pythongit clone ${ARROW_REPO} pushd arrow git fetch -v --prune -- origin ${BENCHMARKABLE} git checkout -f ${BENCHMARKABLE} source dev/conbench_envs/hooks.sh create_conda_env_with_arrow_python popd该步骤等价于手动执行 3.3 节的全部子函数最终在$CONDA_PREFIX中安装好 Arrow C 库与 pyarrow。步骤 7安装 conbench CLIgit clone https://github.com/ursacomputing/conbench.git pushd conbench pip install -r requirements-cli.txt pip install -U PyYAML python setup.py install popd步骤 8安装 benchmarks 基准仓库git clone https://github.com/ursacomputing/benchmarks.git pushd benchmarks python setup.py develop popdbenchmarks仓库提供conbench各基准子命令的实现如file-read、cpp-micro、dataframe-to-table、java-micro、js-micro。步骤 9配置 conbench 凭据pushd benchmarks touch .conbench echo url: $CONBENCH_URL .conbench echo email: $CONBENCH_EMAIL .conbench echo password: $CONBENCH_PASSWORD .conbench echo host_name: $MACHINE .conbench popd.conbench是 conbench CLI 的本地凭据文件运行基准时读取它向服务端上报结果。步骤 10运行 Python 基准cd benchmarks conbench file-read ALL --iterations3 --alltrue --drop-cachestruefile-read遍历 ALL 数据集--iterations3控制重复次数--drop-cachestrue在每次迭代前清空系统页缓存以获得更稳定的 I/O 读数。步骤 11安装 archery 并运行 C 基准pushd arrow source dev/conbench_envs/hooks.sh install_archery popd cd benchmarks conbench cpp-micro --iterations1install_archery以可编辑模式安装 dev/archerycpp-micro会调用 archery 定位 cpp_build.sh 产出的 Google Benchmark 可执行文件对应ARROW_BUILD_BENCHMARKSON。步骤 12构建 R 并运行 R 基准pushd arrow source dev/conbench_envs/hooks.sh build_arrow_r popd R -e remotes::install_github(ursacomputing/arrowbench) cd benchmarks conbench dataframe-to-table ALL --iterations3 --drop-cachestrue --languageRbuild_arrow_r内部依赖 ci/scripts/r_deps.sh 处理 R 包的编译依赖随后通过R CMD INSTALL安装 arrow R 包。步骤 13构建 Java 并运行 Java 基准pushd arrow source dev/conbench_envs/hooks.sh build_arrow_java source dev/conbench_envs/hooks.sh install_archery popd cd benchmarks conbench java-micro --iterations1build_arrow_java调用 ci/scripts/java_build.sh 编译 Java 模块之后可直接执行java-micro。步骤 14安装 JavaScript 依赖并运行 JS 基准pushd arrow source dev/conbench_envs/hooks.sh install_java_script_project_dependencies popd cd benchmarks conbench js-micro五、复用约定其他仓库与服务的接入准则benchmarks.env与hooks.sh对其他仓库和服务开放使用但需遵守以下约束保证与ursabot基准构建的兼容性不得删除或重命名已有 hook既有 hook 的函数定义只能在 Arrow 的 commit 中更新且仅当该 commit 内 Arrow 构建脚本或依赖文件发生重命名、移动或新增时函数定义更新后必须通过ursabot please benchmark触发一次真实基准构建确认更新没有破坏构建流程。这一约定确保了 hook 契约的稳定性——任何外部服务都可以安全地依赖hooks.sh的函数名与语义。六、从源码结构看设计要点配置与脚本分离benchmarks.env 只声明参数hooks.sh 只定义流程二者通过source组合便于贡献者在 PR 中单独调整某一维度复用既有 CI 资产所有 hook 均直接调用ci/scripts/下已在日常 CI 中验证的构建脚本cpp_build.sh、python_build.sh、r_deps.sh、java_build.sh避免了基准环境与发布环境行为漂移与 commit 绑定hook 随被测 commit 一起检出保证测的是什么代码就用什么环境声明是复现性能回归、评估构建参数影响的可信基础。结语通过dev/conbench_envs的benchmarks.env与hooks.shApache Arrow 将跨语言基准测试的环境声明、构建流程与 PR 自动化ursabot please benchmark完整地固化在版本库中。无论是想在本地复现官方基准、评估某个 CMake 选项对性能的影响还是为其他项目搭建同构的 conbench 环境都可以以上述 14 步流程为起点并以benchmarks.env的参数表与hooks.sh的函数清单为对照手册进行定制。赞分享数据工程大数据序列化数据分析【免费下载链接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing项目地址https://gitcode.com/gh_mirrors/arrow13/arrow点击查看免费下载相关推荐Apache Arrow 基准测试构建环境与 Conbench Hooks 完整指南Apache Arrow 基准测试构建环境与 Conbench Hooks 完整指南 Apache Arrow 是一个面向加速数据交换与内存处理的多语言工具箱数据工程数据分析大数据Apache Arrow 基准测试构建环境全解conbench_envs 与 ursabot 钩子机制实战Apache Arrow 基准测试构建环境全解conbench_envs 与 ursabot 钩子机制实战 Apache Arrow 作为通用列式内存格式与大数据数据分析数据工程序列化Apache APISIX 基准测试Benchmark全指南测试环境、性能结果与本地复现方法Apache APISIX 基准测试Benchmark全指南测试环境、性能结果与本地复现方法 本指南以 Apache APISIX 官方基准测试文档为主体API网关后端云原生微服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考