环境变量#

以下环境变量可用于影响 Arrow C++ 在运行时行为。其中许多变量在每个进程中只检查一次(例如,当 Arrow C++ DLL 加载时),因此不能假定稍后更改其值会产生影响。

ACERO_ALIGNMENT_HANDLING#

Arrow C++ 的 Acero 模块对数据流执行计算。这种计算可能涉及一种“类型双关”(type punning)形式,如果底层数组没有正确对齐,这在技术上是未定义行为。在大多数现代 CPU 上这不是问题,但一些较旧的 CPU 可能会崩溃或性能不佳。因此,建议所有传入的数组缓冲区都正确对齐,但某些数据源(例如Flight)可能会产生未对齐的缓冲区。

此环境变量的值控制当 Acero 检测到未对齐缓冲区时会发生什么

  • warn: 发出警告

  • ignore: 不执行任何操作,禁用对齐检查

  • reallocate: 缓冲区重新分配到正确对齐的地址

  • error: 操作失败并报错

默认行为是warn。在现代硬件上,通常可以安全地将其更改为ignore。更改为reallocate是最安全的选择,但这将对性能产生显著影响,因为需要复制缓冲区。

ARROW_DEBUG_MEMORY_POOL#

启用基本的内存检查以防止缓冲区溢出。此环境变量的值选择检测到缓冲区溢出时的行为

  • abort 以非零返回值退出进程;

  • trap 发出平台特定的调试器断点/陷阱指令;

  • warn 在标准错误输出中打印警告并继续执行;

  • none 禁用内存检查;

如果此变量未设置或为空值,则其效果与none相同 - 内存检查被禁用。

注意

虽然此功能可能很有用且开销很小,但它不能替代更复杂的内存检查实用程序,例如ValgrindAddress Sanitizer

ARROW_DEFAULT_MEMORY_POOL#

覆盖用于默认内存池的后端。可能的值包括jemallocmimallocsystem,具体取决于构建 Arrow C++时启用了哪些后端。

ARROW_IO_THREADS#

覆盖全局 IO 线程池的默认线程数。此环境变量的值应为正整数。

ARROW_LIBHDFS_DIR#

包含 C HDFS 库的目录(Windows 上为hdfs.dll,macOS 上为libhdfs.dylib,其他平台为libhdfs.so)。或者,可以设置HADOOP_HOME

ARROW_S3_LOG_LEVEL#

控制 S3 调用产生的日志详细程度。默认为FATAL,只在发生致命错误时产生输出。DEBUG在尝试排查问题时建议使用。

可能的值包括

  • FATAL (默认)

  • ERROR

  • WARN

  • INFO

  • DEBUG

  • TRACE

  • OFF

ARROW_S3_THREADS#

创建 AWS 的 I/O 事件循环时要配置的线程数。

默认为 1,如 AWS 文档建议,当连接数预计最多为数百时。

ARROW_TRACING_BACKEND#

用于导出基于OpenTelemetry的执行跟踪的后端。可能的值是

  • ostream: 向标准输出发出文本日志消息;

  • otlp_http: 向 HTTP 服务器发出 OTLP JSON 编码跟踪(默认情况下,端点 URL 是“https://:4318/v1/traces”);

  • arrow_otlp_stdout: 向标准输出发出 JSON 跟踪;

  • arrow_otlp_stderr: 向标准错误输出发出 JSON 跟踪。

如果未设置此变量,则不导出任何跟踪。

如果 Arrow C++ 未启用跟踪,此环境变量无效。

ARROW_USER_SIMD_LEVEL#

运行时可选择的最大 SIMD 优化级别。这对于比较启用或禁用相应代码路径的性能影响,或解决指令受支持但性能不佳或导致其他问题的情况很有用。

默认情况下,Arrow C++ 在运行时检测当前 CPU 的功能,并根据该信息选择最佳执行路径。可以通过将此环境变量设置为明确定义的值来覆盖此行为。支持的值是

  • NONE 禁用任何运行时选择的 SIMD 优化;

  • SSE4_2 启用 SSE2 及更高版本的所有基于 SSE2 的优化(包括 SSE4.2);

  • AVX 启用 AVX 及更早版本的所有基于 AVX 的优化;

  • AVX2 启用 AVX2 及更早版本的所有基于 AVX2 的优化;

  • AVX512 启用 AVX512 及更早版本的所有基于 AVX512 的优化。

此环境变量仅在 x86 平台上有效。其他平台目前未实现任何形式的运行时调度。

注意

除了运行时选择的 SIMD 优化调度之外,Arrow C++ 还可以编译为在运行时无法禁用的 SIMD 优化。例如,默认情况下,x86 构建中启用了 SSE4.2 优化:因此,在此默认设置下,Arrow C++ 在不支持 SSE4.2 的 CPU 上根本无法工作。此设置可以通过使用ARROW_SIMD_LEVEL CMake 变量来更改,以提高或降低优化级别。

最后,ARROW_RUNTIME_SIMD_LEVEL CMake 变量设置了运行时选择的 SIMD 优化的编译时上限。这在编译器报告支持某个指令集但实际上并不完全支持它的情况下很有用。

AWS_ENDPOINT_URL#

用于类 S3 存储(例如 Minio 或 s3.scality)的端点 URL。或者,可以设置AWS_ENDPOINT_URL_S3

AWS_ENDPOINT_URL_S3#

用于类 S3 存储(例如 Minio 或 s3.scality)的端点 URL。如果同时设置了两个变量,则此变量优先于AWS_ENDPOINT_URL

GANDIVA_CACHE_SIZE#

要保留在 Gandiva JIT 编译缓存中的条目数。缓存位于内存中,不会跨进程持久化。

默认缓存大小为 5000。此环境变量的值应为正整数,且不应超过 int32 的最大值。否则将使用默认值。

HADOOP_HOME#

Hadoop 安装路径。

JAVA_HOME#

设置 Java 运行时环境安装路径。如果 Java 安装在非标准位置,HDFS 支持可能需要此项。

OMP_NUM_THREADS#

全局(进程范围)CPU 线程池中的工作线程数。如果未定义此环境变量,则使用平台特定例程确定可用的硬件并发数。

OMP_THREAD_LIMIT#

全局(进程范围)CPU 线程池中工作线程数的上限。

例如,如果当前机器有 4 个硬件线程且OMP_THREAD_LIMIT为 8,则全局 CPU 线程池将有 4 个工作线程。但如果OMP_THREAD_LIMIT为 2,则全局 CPU 线程池将有 2 个工作线程。