Hudi常用参数-索引相关参数配置

index相关配置

  • hoodie.index.class
    用户自定义索引的全路径名,索引类必须为HoodieIndex的子类,当指定该配置时,其会优先于hoodie.index.type配置。

  • hoodie.index.type
    使用的索引类型,默认为布隆过滤器。可能的选项是[BLOOM | HBASE | GLOBAL_BLOOM | SIMPLE | GLOBAL_SIMPLE | BUCKET | RANGE] 。 布隆过滤器消除了对外部系统的依赖,并存储在Parquet数据文件的页脚中。
    注意:
    BUCKET、RANGE索引仅支持INSERT、UPSERT、DELETE、COMPACT操作。

  • hoodie.index.bloom.num_entries
    存储在布隆过滤器中的条目数。 假设maxParquetFileSize为128MB,averageRecordSize为1024B,因此,一个文件中的记录总数约为130K。 默认值(60000)大约是此近似值的一半。
    注意:
    将此值设置得太低,将产生很多误报,并且索引查找将必须扫描比其所需的更多的文件;如果将其设置得非常高,将线性增加每个数据文件的大小(每50000个条目大约4KB)。

  • hoodie.index.bloom.fpp
    根据条目数允许的错误率。 用于计算应为布隆过滤器分配多少位以及哈希函数的数量。通常将此值设置得很低(默认值:0.000000001),在磁盘空间上进行权衡以降低误报率。

  • hoodie.bloom.index.parallelism
    索引查找的并行度,其中涉及Spark Shuffle。 默认情况下(0),根据输入的工作负载特征自动计算的。

  • hoodie.bloom.index.prune.by.ranges
    默认为true时,从文件框定信息,可以加快索引查找的速度。 如果键具有单调递增的前缀,例如时间戳,则特别有用。

  • hoodie.bloom.index.use.caching
    默认为true时,将通过减少用于计算并行度或受影响分区的IO来缓存输入的RDD以加快索引查找。

  • hoodie.bloom.index.use.treebased.filter
    默为true时,启用基于间隔树的文件过滤优化。与暴力模式相比,此模式可根据键范围加快文件过滤速度。

  • hoodie.bloom.index.bucketized.checking
    默为true时,启用了桶式布隆过滤。这减少了在基于排序的布隆索引查找中看到的偏差。

  • hoodie.bloom.index.keys.per.bucket
    仅在启用bloomIndexBucketizedChecking并且索引类型为bloom的情况下适用。
    此配置控制“存储桶”的大小(默认10000000),该大小可跟踪对单个文件进行的记录键检查的次数,并且是分配给执行布隆过滤器查找的每个分区的工作单位。 较高的值将分摊将布隆过滤器读取到内存的固定成本。

  • hoodie.bloom.index.update.partition.path
    仅在索引类型为GLOBAL_BLOOM时适用。
    默认为true时,当对一个已有记录执行包含分区路径的更新操作时,将会导致把新记录插入到新分区,而把原有记录从旧分区里删除。为false时,只对旧分区的原有记录进行更新。

  • hoodie.index.hbase.zkquorum
    仅在索引类型为HBASE时适用,必填选项。要连接的HBase ZK Quorum URL。

  • hoodie.index.hbase.zkport
    仅在索引类型为HBASE时适用,必填选项。要连接的HBase ZK Quorum端口。

  • hoodie.index.hbase.zknode.path
    仅在索引类型为HBASE时适用,必填选项。这是根znode,它将包含HBase创建及使用的所有znode。

  • hoodie.index.hbase.table
    仅在索引类型为HBASE时适用,必填选项。HBase表名称,用作索引。Hudi将row_key和[partition_path, fileID, commitTime]映射存储在表中。

  • hoodie.bucket.index.num.buckets
    仅在索引类型为BUCKET时适用。Hudi表中每个分区划分桶的个数,每个分区内的数据通过Hash方式放入每个桶内。默认为256。
    注意:
    建表或第一次写入数据时设置后不能修改,否则更新数据会存在异常。

  • hoodie.bucket.index.hash.field
    仅在索引类型为BUCKET时适用。进行分桶时计算Hash值的字段,必须为主键的子集,默认为Hudi表的主键。

  • hoodie.range.index.range
    仅在索引类型为RANGE时适用。每个数据文件中存储的记录范围,只适用于主键为自增主键的场景。如设置默认值为100000,则主键为0-99999记录存储到一个数据文件,以此类推后面每100000条记录存储一个数据文件。
    注意:
    建表或第一次写入数据时设置后不能修改,否则更新数据会存在异常。

  • hoodie.check.index.parameter
    是否对数据写入设置的索引参数进行校验。默认为true
    注意:
    不同索引间通常是不兼容的,设置为false,可能会导致数据异常。

<think>嗯,用户的问题是关于Hudi和Spark的绑定集成设置配置。首先,我需要回忆一下Hudi和Spark结合的基本步骤。记得Hudi需要特定的Spark Session扩展和配置参数,比如设置Kryo序列化和HoodieSparkSessionExtension。然后,用户提到的引用里提到了不同版本的Hudi,比如0.13.0和0.14.1,可能需要注意版本兼容性,特别是Spark的版本,比如3.2.3。 用户提供的引用中有几个关键点。引用[4]提到了核心参数,比如spark.serializer和spark.sql.extensions,这些是配置Spark必须的。同时,引用[5]提供了bundle jar的下载链接,说明可能需要使用预编译的jar包来解决依赖问题。另外,引用[2]提到Spark SQL与其他组件的集成,比如Spark Streaming和MLlib,所以在配置时要确保这些组件也能正确使用Hudi。 接下来,我应该分步骤来指导用户如何配置。首先是环境准备,确保Spark和Hudi版本兼容。然后,配置Spark Session,添加必要的扩展和参数。之后是依赖管理,用户可能需要下载Hudi的bundle jar,或者通过Maven引入依赖。还需要注意Hudi表的基本操作示例,比如写入数据,这样用户能验证配置是否成功。 另外,用户可能遇到的常见问题,比如版本不匹配、类冲突、序列化问题,这些都需要在回答中提及解决方法。例如,Kryo序列化配置不正确会导致任务失败,所以需要检查spark.serializer的设置。 最后,生成相关问题,帮助用户深入理解,比如优化配置、版本升级影响和集成其他组件的方法。这样用户不仅能解决当前问题,还能扩展应用场景。</think>### Hudi与Spark绑定集成配置步骤 #### 一、环境准备 1. **版本兼容性** Hudi与Spark的版本需严格匹配,例如: - Hudi 0.14.1 + Spark 3.2.x/3.3.x[^4] - 若使用Hudi 0.13.0,需注意其已知bug(如Spark SQL扩展兼容性问题),建议升级到0.14.1[^1] 2. **依赖配置** - **方式1**:直接下载预编译的Hudi Bundle JAR(如`hudi-spark3.1-bundle_2.12-0.13.0-SNAPSHOT.jar`[^5]) - **方式2**:通过Maven引入依赖: ```xml <dependency> <groupId>org.apache.hudi</groupId> <artifactId>hudi-spark3.1-bundle_2.12</artifactId> <version>0.14.1</version> </dependency> ``` #### 二、Spark Session配置 启动Spark Shell或提交任务时需添加核心参数: ```bash spark-shell \ --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \ --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension' \ --jars /path/to/hudi-spark-bundle.jar ``` - `KryoSerializer`:提升序列化性能 - `HoodieSparkSessionExtension`:启用Hudi的Spark SQL扩展功能[^4] #### 三、Hudi表操作示例 ```scala // 创建Hudi表 val df = spark.read.parquet("hdfs://path/to/source_data") df.write.format("hudi") .option("hoodie.table.name", "user_profile") .option("hoodie.datasource.write.operation", "upsert") .option("hoodie.datasource.write.table.type", "COPY_ON_WRITE") .mode("overwrite") .save("hdfs://path/to/hudi_table") ``` #### 四、常见问题解决 1. **类冲突** 使用`--packages`参数指定精确版本: ```bash --packages org.apache.hudi:hudi-spark3.1-bundle_2.12:0.14.1 ``` 2. **元数据管理** 通过Spark SQL Procedures执行Rollback等操作: ```sql CALL run_rollback('hudi_table', '20231012000000') ``` 需确保Hudi Procedures的版本与集群环境一致 3. **集成Spark Streaming** 实时写入时需配置Hudi的异步Compaction: ```scala .option("hoodie.cleaner.policy", "KEEP_LATEST_COMMITS") .option("hoodie.cleaner.commits.retained", 3) ``` 结合Spark Streaming可实现分钟级数据可见性[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值