Bolt Parquet 写入配置

qianmoQqianmoQ· 更新于 2026-10-02· 阅读 18 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Bolt Parquet 写入配置

本文档概述 Bolt 支持的 Parquet 写入时配置选项。Bolt 的 Parquet 写入器基于 Arrow C++ Parquet 库,主要通过 Hive 连接器暴露。

在本文档中,"支持"表示该配置可以通过 Bolt 的公开配置途径(如 Hive 会话/表属性、QueryConfig)设置并生效。

Spark 层面的配置(参考)

这些标准 Spark 属性并不被 Bolt 的写入器直接使用。相反,Bolt 通过自身的配置机制提供等效功能。

属性支持情况Bolt 默认值配置路径说明
spark.sql.parquet.outputTimestampType部分支持禁用 INT96;强制转换为 SECONDHiveConfig arrowBridgeTimestampUnit,WriterOptions writeInt96AsTimestampBolt 通过 arrowBridgeTimestampUnit(SECOND、MILLI、MICRO、NANO)管理时间戳精度。内部的 writeInt96AsTimestamp 选项可用于覆盖传统 INT96 格式,并具有优先级。参见 bolt/connectors/hive/HiveDataSink.cpp 和 bolt/dwio/parquet/writer/Writer.h。
spark.sql.parquet.writeLegacyFormat不支持不适用不适用Bolt 不使用此标志。格式版本由 parquet.writer.version 属性控制。

Bolt 中的 Arrow 写入器属性

这些属性对应于底层 parquet::arrow::WriterProperties 和 parquet::arrow::ArrowWriterProperties 中的设置。Bolt 会直接暴露其中一部分,或将它们从其他配置映射而来。

属性支持Bolt 默认值配置路径说明
write_batch_size内部1024未暴露取自 Arrow writer 属性的默认值。Bolt 使用自己的启发式策略(writeBatchBytes、minBatchSize)进行批量处理。参见 bolt/dwio/parquet/arrow/Properties.h。
max_row_group_length是1,048,576 行刷新策略默认的刷新策略在约 100 万行或约 128 MiB 时触发。可通过 WriterOptions 中的自定义刷新策略工厂进行配置。参见 bolt/dwio/parquet/writer/Writer.h。
parquet_block_size是128 MiB(启用时)WriterOptions.parquet_block_size仅当 enableFlushBasedOnBlockSize 为 true 时生效,它会覆盖默认的按行/按字节刷新策略。参见 bolt/dwio/parquet/writer/Writer.cpp。
data_page_version是V1WriterOptions.dataPageVersion可设置为 V1 或 V2。参见 bolt/dwio/parquet/writer/Writer.h。
writer.version是PARQUET_2_6WriterOptions.parquetVersion控制 Parquet 格式版本。参见 bolt/dwio/parquet/arrow/Properties.h。
compression是UNCOMPRESSEDHive INSERT compressionKind 属性支持的编解码器:SNAPPY、GZIP、ZSTD、LZ4、UNCOMPRESSED。在 bolt/connectors/hive/HiveDataSink.cpp 中完成映射。
compression_level 与 codec_options内部随编解码器而异WriterOptions.codecOptionsArrow writer 内部支持,但未通过 Hive 会话/表属性暴露。可按列配置。参见 bolt/dwio/parquet/arrow/Properties.h。
dictionary_enabled是trueWriterOptions.enableDictionary(全局)、columnEnableDictionaryMap(按列)字典编码可以全局控制,也可以针对特定列进行控制。参见 bolt/dwio/parquet/writer/Writer.h。
data_page_size是1 MiBWriterOptions.dataPageSize(全局)、columnDataPageSizeMap(按列)参见 bolt/dwio/parquet/writer/Writer.h。
dictionary_page_size_limit是1 MiBWriterOptions.dictionaryPageSizeLimit(全局)、columnDictionaryPageSizeLimitMap(按列)参见 bolt/dwio/parquet/writer/Writer.h。
page_index_enabled内部false未暴露Arrow writer 支持生成页索引,但目前在 Bolt 中不可配置。参见 bolt/dwio/parquet/arrow/Properties.h。
statistics_enabled内部true未暴露统计信息默认启用,每列最大大小为 4096 字节。无法从外部配置。参见 bolt/dwio/parquet/arrow/Properties.h。
store_decimal_as_integer是trueWriterOptions.storeDecimalAsIntegerBolt 默认将兼容的小数以 int32/int64 形式存储以提升效率。参见 bolt/dwio/parquet/writer/Writer.h。
created_by内部"parquet-cpp-bolt"硬编码文件元数据中的 created_by 字符串由内部设置。参见 bolt/dwio/parquet/arrow/Properties.h。
sorting_columns内部未设置未暴露Arrow writer 可以存储排序元数据,但 Bolt 未提供设置该值的途径。参见 bolt/dwio/parquet/arrow/Properties.h。
page_checksum_enabled是falseparquet.page.write-checksum.enabled 表属性在内部映射到 Arrow writer 的 enable_page_checksum() 构建方法。参见 bolt/dwio/parquet/arrow/Properties.h。
encryption内部已禁用WriterOptions.encryptionOptions如果提供了相关属性,writer 支持 AES_GCM_V1 和 AES_GCM_CTR_V1 加密,但未通过 Hive 连接器暴露。参见 bolt/dwio/parquet/writer/Writer.h。
threading (use_threads)是false(0 个线程)WriterOptions.threadPoolSize若 threadPoolSize > 0,则启用多线程,使用全局静态线程池进行并行列写入。参见 bolt/dwio/parquet/writer/Writer.cpp。
compliant_nested_types内部true未暴露writer 遵循 Parquet 规范进行嵌套列表元素命名(“element”)。参见 bolt/dwio/parquet/arrow/Properties.h。

Parquet-MR 风格设置

下表说明 Bolt 的写入器是否实际支持经典的 parquet-mr Hadoop 配置,通常是通过映射到等效的 WriterOptions 或 WriterProperties 设置来实现的。

属性在 Bolt 中生效Bolt 默认值配置路径备注
parquet.block.size是128 MiBWriterOptions.parquet_block_size当 enableFlushBasedOnBlockSize 为 true 时使用。
parquet.page.size是1 MiBWriterOptions.dataPageSize
parquet.compression是UNCOMPRESSEDHive compressionKind 表属性映射到 WriterOptions.compression。
parquet.enable.dictionary是trueWriterOptions.enableDictionary
parquet.dictionary.page.size是1 MiBWriterOptions.dictionaryPageSizeLimit
parquet.writer.version是PARQUET_2_6WriterOptions.parquetVersion
parquet.compression.codec.zstd.level是3WriterOptions.codecOptions通过会话/表属性暴露并进行内部映射。默认值来自 zstd 库。参见 bolt/dwio/parquet/arrow/util/CompressionZstd.cpp。
parquet.page.write-checksum.enabled是falseWriterProperties::Builder可通过表属性进行配置。
parquet.enable.summary-metadata否不适用未实现Bolt 不会创建单独的 summary 文件。
parquet.bloom.filter.enabled否不适用未实现不支持写入布隆过滤器。
parquet.crypto.factory.class否不适用未实现加密通过 WriterOptions 在内部处理。
parquet.compression.codec.zstd.workers否不适用未实现Bolt 的 Parquet 写入线程由 WriterOptions.threadPoolSize 控制。
parquet.validation否不适用未实现

Bolt 专有的写入选项与行为

以下选项和行为是 Bolt 实现所特有的,可对写入过程进行更细粒度的控制。

  • 默认刷新策略:默认情况下,Parquet 写入器在行组达到约 1,048,576 行 或其估算大小超过 128 MiB 时刷新该行组。该策略在 DefaultFlushPolicy 中的 bolt/dwio/parquet/writer/Writer.h 中定义。
  • enableFlushBasedOnBlockSize:WriterOptions 中的 bool,用于将刷新行为从默认的行数/字节数策略改为纯粹基于块大小的策略。当启用 true 时,它使用 WriterOptions.parquet_block_size(默认为 128 MiB)来控制行组大小,并将 max_row_group_length 设置为一个极大的值,以防止它先被触发。这里使用的是 Arrow 写入器的 NewBufferedRowGroup()。该选项位于 bolt/dwio/parquet/writer/Writer.cpp 中。
  • enableRowGroupAlignedWrite:WriterOptions 中的 bool,用于专门的数据保留场景。它与 expectedRowsInEachBlock 配合使用,以创建具有精确行数的行组。参见 bolt/dwio/parquet/writer/Writer.h。
  • writeBatchBytes / minBatchSize:WriterOptions 内部的启发式规则,用于在将大型 Bolt VectorPtr 批次转换为 Arrow RecordBatch 时管理内存和性能。写入器可能会根据这些阈值将大批次拆分为较小的批次(默认值:40 MiB 和 512 行)。参见 bolt/dwio/parquet/writer/Writer.cpp。
  • 文件名扩展名:对于 Hive INSERT 操作,当存储格式为 PARQUET 时,HiveDataSink 会自动为输出文件追加 .parquet 扩展名。此逻辑在 bolt/connectors/hive/HiveDataSink.cpp 中处理。
  • 时间戳桥接单位:写入 Parquet 的时间戳精度由 arrow_bridge_timestamp_unit 会话属性(通过 HiveConfig 设置)控制,其取值可以为 SECOND、MILLI、MICRO 或 NANO。为保持向后兼容,内部的 WriterOptions.writeInt96AsTimestamp(bool)可设置为 true,以强制使用已弃用的 INT96 格式,且该设置优先于桥接单位。参见 bolt/connectors/hive/HiveConfig.cpp 和 bolt/dwio/parquet/writer/Writer.h。

评论

登录后参与评论

正在加载评论…