更新时间:2024-11-29 GMT+08:00
分区并发控制
分区并发写每个任务基于对当前存在inflight状态的commit中存储的修改分区信息来判断是否存在写冲突,从而实现并发写入。
并发过程中的锁控制基于ZK锁实现,无需用户配置额外参数。
注意事项
分区并发写控制基于单表并发写控制的基础上实现,因此使用约束条件与单表并控制写基本相同。
当前分区并发只支持Spark方式写入,Flink不支持该特性。
为避免过大并发量占用ZooKeeper过多资源,对Hudi在ZooKeeper上增加了Quota配额限制,可以通过服务端修改Spark组件中参数zk.quota.number来调整Hudi的Quota配额,默认为500000,最小为5,且不可通过此参数来控制并行任务数,仅用来控制对ZooKeeper的访问压力。
使用分区并发机制
通过设置参数:hoodie.support.partition.lock=true来启动分区并发写。
示例:
spark datasource方式开启分区并发写:
upsert_data.write.format("hudi"). option("hoodie.datasource.write.table.type", "COPY_ON_WRITE"). option("hoodie.datasource.write.precombine.field", "col2"). option("hoodie.datasource.write.recordkey.field", "primary_key"). option("hoodie.datasource.write.partitionpath.field", "col0"). option("hoodie.upsert.shuffle.parallelism", 4). option("hoodie.datasource.write.hive_style_partitioning", "true"). option("hoodie.support.partition.lock", "true"). option("hoodie.table.name", "tb_test_cow"). mode("Append").save(s"/tmp/huditest/tb_test_cow")
spark-sql开启分区并发写:
set hoodie.support.partition.lock=true; insert into hudi_table1 select 1,1,1;
父主题: 数据管理维护