配置
该页面介绍了几种配置写入或读取Hudi数据集的作业的方法。 简而言之,您可以在几个级别上控制行为。
- Spark数据源配置 : 这些配置控制Hudi Spark数据源,提供如下功能: 定义键和分区、选择写操作、指定如何合并记录或选择要读取的视图类型。
- WriteClient 配置 : 在内部,Hudi数据源使用基于RDD的
HoodieWriteClient
API 真正执行对存储的写入。 这些配置可对文件大小、压缩(compression)、并行度、压缩(compaction)、写入模式、清理等底层方面进行完全控制。 尽管Hudi提供了合理的默认设置,但在不同情形下,可能需要对这些配置进行调整以针对特定的工作负载进行优化。 - RecordPayload 配置 : 这是Hudi提供的最底层的定制。
RecordPayload定义了如何根据传入的新记录和存储的旧记录来产生新值以进行插入更新。
Hudi提供了诸如
OverwriteWithLatestAvroPayload
的默认实现,该实现仅使用最新或最后写入的记录来更新存储。 在数据源和WriteClient级别,都可以将其重写为扩展HoodieRecordPayload
类的自定义类。
Spark数据源配置
可以通过将以下选项传递到option(k,v)
方法中来配置使用数据源的Spark作业。
实际的数据源级别配置在下面列出。
写选项
另外,您可以使用options()
或option(k,v)
方法直接传递任何WriteClient级别的配置。
inputDF.write()
.format("org.apache.hudi")
.options(clientOpts) // 任何Hudi客户端选项都可以传入
.option(DataSourceWriteOptions.RECORDKEY_FIELD_OPT_KEY(), "_row_key")
.option(DataSourceWriteOptions.PARTITIONPATH_FIELD_OPT_KEY(), "partition")
.option(DataSourceWriteOptions.PRECOMBINE_FIELD_OPT_KEY(), "timestamp")
.option(HoodieWriteConfig.TABLE_NAME, tableName)
.mode(SaveMode.Append)
.save(basePath);
用于通过write.format.option(...)
写入数据集的选项
TABLE_NAME_OPT_KEY
属性:hoodie.datasource.write.table.name
[必须]
Hive表名,用于将数据集注册到其中。
OPERATION_OPT_KEY
属性:hoodie.datasource.write.operation
, 默认值:upsert
是否为写操作进行插入更新、插入或批量插入。使用bulkinsert
将新数据加载到表中,之后使用upsert
或insert
。
批量插入使用基于磁盘的写入路径来扩展以加载大量输入,而无需对其进行缓存。
STORAGE_TYPE_OPT_KEY
属性:hoodie.datasource.write.storage.type
, 默认值:COPY_ON_WRITE
此写入的基础数据的存储类型。两次写入之间不能改变。
PRECOMBINE_FIELD_OPT_KEY
属性:hoodie.datasource.write.precombine.field
, 默认值:ts
实际写入之前在preCombining中使用的字段。
当两个记录具有相同的键值时,我们将使用Object.compareTo(..)从precombine字段中选择一个值最大的记录。
PAYLOAD_CLASS_OPT_KEY
属性:hoodie.datasource.write.payload.class
, 默认值:org.apache.hudi.OverwriteWithLatestAvroPayload
使用的有效载荷类。如果您想在插入更新或插入时使用自己的合并逻辑,请重写此方法。
这将使得PRECOMBINE_FIELD_OPT_VAL
设置的任何值无效
RECORDKEY_FIELD_OPT_KEY
属性:hoodie.datasource.write.recordkey.field
, 默认值:uuid
记录键字段。用作HoodieKey
中recordKey
部分的值。
实际值将通过在字段值上调用.toString()来获得。可以使用点符号指定嵌套字段,例如:a.b.c
PARTITIONPATH_FIELD_OPT_KEY
属性:hoodie.datasource.write.partitionpath.field
, 默认值:partitionpath
分区路径字段。用作HoodieKey
中partitionPath
部分的值。
通过调用.toString()获得实际的值
HIVE_STYLE_PARTITIONING_OPT_KEY
属性:hoodie.datasource.write.hive_style_partitioning
, 默认值:false
如果设置为true,则生成基于Hive格式的partition目录:partition_column_name=partition_value
KEYGENERATOR_CLASS_OPT_KEY
属性:hoodie.datasource.write.keygenerator.class
键生成器类,实现从输入的Row
对象中提取键。该配置优先级大于 hoodie.datasource.write.keygenerator.type
, 用于使用用户自定义键生成器
KEYGENERATOR_TYPE_OPT_KEY
属性: hoodie.datasource.write.keygenerator.type
, 默认值: SIMPLE
键生成器类型,默认 SIMPLE
类型,该配置优先级低于 hoodie.datasource.write.keygenerator.class
, 是推荐使用的配置方式
COMMIT_METADATA_KEYPREFIX_OPT_KEY
属性:hoodie.datasource.write.commitmeta.key.prefix
, 默认值:_
以该前缀开头的选项键会自动添加到提交/增量提交的元数据中。
这对于与hudi时间轴一致的方式存储检查点信息很有用
INSERT_DROP_DUPS_OPT_KEY
属性:hoodie.datasource.write.insert.drop.duplicates
, 默认值:false
如果设置为true,则在插入操作期间从传入DataFrame中过滤掉所有重复记录。
HIVE_SYNC_ENABLED_OPT_KEY
属性:hoodie.datasource.hive_sync.enable
, 默认值:false
设置为true时,将数据集注册并同步到Apache Hive Metastore