環境變數#

以下環境變數可用於影響 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 在 stderr 上印出警告並繼續執行;

  • 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_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 啟用任何基於 SSE2 的最佳化,直到 SSE4.2(包含);

  • 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 Runtime Environment 安裝的路徑。 如果 Java 安裝在非標準位置,則 HDFS 支援可能需要此設定。

OMP_NUM_THREADS#

全域(程序範圍)CPU 執行緒池中的工作執行緒數。 如果未定義此環境變數,則可用的硬體並行性將使用平台特定的常式來確定。

OMP_THREAD_LIMIT#

全域(程序範圍)CPU 執行緒池中工作執行緒數的上限。

例如,如果目前機器有 4 個硬體執行緒且 OMP_THREAD_LIMIT 為 8,則全域 CPU 執行緒池將有 4 個工作執行緒。 但如果 OMP_THREAD_LIMIT 為 2,則全域 CPU 執行緒池將有 2 個工作執行緒。