Hudi cleaning-异步操作

本文介绍了如何使用Hoodie进行参数配置,包括建表语句中的清理策略设置,以及数据操作(插入、更新)和清理过程,展示了全量更新、异步清理和保留最新commit的使用方法。

参数配置

设置参数,在建表的时候指定:

配置型设定值
hoodie.clean.automaticfalse
hoodie.clean.asynctrue
hoodie.cleaner.commits.retained1

建表语句

create table small_file_hudi_cow (
  id int,
  name string,
  age int,
  city STRING,
  date_str STRING
) using hudi
tblproperties (
  type = 'cow',
  primaryKey = 'id',
  preCombineField = 'id',
  'hoodie.clean.automatic' = 'false',
  'hoodie.clean.async' = 'true',
  'hoodie.cleaner.commits.retained' = '1'
)
partitioned by (date_str);

操作执行计划

步骤操作文件系统导入或者更新数据的命令
1insertbase fileINSERT INTO small_file_hudi_cow SELECT id, name, age, city, event_date FROM sample_data_partitioned where event_date='2023-11-03';
1updatebase fileINSERT INTO small_file_hudi_cow SELECT id, name, age, city, event_date FROM sample_data_partitioned where event_date='2023-11-03';
1updatebase fileINSERT INTO small_file_hudi_cow SELECT id, name, age, city, event_date FROM sample_data_partitioned where event_date='2023-11-03';

 第一步insert 

在第一次往表里面插入数据的时候,会产生第一个版本文件和时间记录信息,具体如下:

第二步 update数据

由于数据全量更新第一次的所有数据文件

第三步update 

由于全量更新第一次的所有数据文件,更新后添加对应的一组 file 信息。其文件信息及时间线如下:

第四步 Cleaning

执行脚本:

spark-submit --class org.apache.hudi.utilities.HoodieCleaner /data/axiang/hudi-0.14.0/hudi-bundle/hudi-utilities-bundle_2.12-0.14.0.jar \
  --target-base-path /user/hive/warehouse/axiang_hudi.db/small_file_hudi_cow/ \
  --hoodie-conf hoodie.cleaner.policy=KEEP_LATEST_COMMITS \
  --hoodie-conf hoodie.cleaner.commits.retained=1 \
  --hoodie-conf hoodie.cleaner.parallelism=200 \
  --hoodie-conf hoodie.clean.async=true \
  --hoodie-conf hoodie.clean.automatic=false

执行完成后,会生成一个clean 的时间线。同时删除历史版本的数据。其文件信息及时间线如下:

<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]
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值