环境变量#
以下环境变量可用于在运行时影响 Arrow C++ 的行为。其中许多变量每个进程只检查一次(例如,加载 Arrow C++ DLL 时),因此您不能假设稍后更改它们的值会产生影响。
- ACERO_ALIGNMENT_HANDLING#
Arrow C++ 的 Acero 模块对数据流执行计算。如果底层数组没有正确对齐,此计算可能涉及一种技术上未定义行为的“类型双关”。在大多数现代 CPU 上,这不是问题,但一些较旧的 CPU 可能会崩溃或性能不佳。因此,建议所有传入的数组缓冲区都正确对齐,但某些数据源(例如 Flight)可能会产生未对齐的缓冲区。
此环境变量的值控制 Acero 检测到未对齐缓冲区时将发生的情况
warn
:发出警告ignore
:无操作,禁用对齐检查reallocate
:将缓冲区重新分配到正确对齐的地址error
:操作失败并报错
默认行为是
warn
。在现代硬件上,通常可以安全地将其更改为ignore
。更改为reallocate
是最安全的选择,但这会对性能产生重大影响,因为需要复制缓冲区。
- ARROW_DEBUG_MEMORY_POOL#
启用基本的内存检查以防止缓冲区溢出。此环境变量的值选择检测到缓冲区溢出时的行为
abort
以非零返回值退出进程;trap
发出特定于平台的调试器断点/陷阱指令;warn
在 stderr 上打印警告并继续执行;none
禁用内存检查;
如果未设置此变量,或者值为空,则其效果与值
none
相同 - 禁用内存检查。注意
虽然此功能可能有用且开销很小,但它不能替代更复杂的内存检查实用程序,例如 Valgrind 或 Address Sanitizer (地址消毒器)。
- ARROW_DEFAULT_MEMORY_POOL#
覆盖默认 内存池 使用的后端。可能的值包括
jemalloc
、mimalloc
和system
,具体取决于 构建 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_TRACING_BACKEND#
导出基于 OpenTelemetry 的执行跟踪的后端。可能的值是
ostream
:将文本日志消息输出到 stdout;otlp_http
:将 OTLP JSON 编码的跟踪发送到 HTTP 服务器(默认情况下,端点 URL 为“https://127.0.0.1:4318/v1/traces”);arrow_otlp_stdout
:将 JSON 跟踪输出到 stdout;arrow_otlp_stderr
:将 JSON 跟踪输出到 stderr。
如果未设置此变量,则不会导出任何跟踪。
如果 Arrow C++ 未启用跟踪构建,则此环境变量无效。
- ARROW_USER_SIMD_LEVEL#
运行时可选择的最大 SIMD 优化级别。有助于比较启用或禁用相应代码路径的性能影响,或解决指令受支持但不执行或导致其他问题的情况。
默认情况下,Arrow C++ 在运行时检测当前 CPU 的功能,并根据该信息选择最佳执行路径。可以通过将此环境变量设置为明确定义的值来覆盖此行为。支持的值为
NONE
禁用任何运行时选择的 SIMD 优化;SSE4_2
启用直到 SSE4.2(包括)的所有基于 SSE2 的优化;AVX
启用所有基于 AVX 的优化和更早版本;AVX2
启用所有基于 AVX2 的优化和更早版本;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 存储的端点 URL,例如 Minio 或 s3.scality。或者,可以设置
AWS_ENDPOINT_URL_S3
。
- AWS_ENDPOINT_URL_S3#
用于类 S3 存储的端点 URL,例如 Minio 或 s3.scality。如果同时设置了这两个变量,则此变量优先于
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 个工作线程。