FusionInsight MRS Hudi原理解析之单表并发写实现方案
【摘要】 Hudi单表并发写实现方案使用外部服务(Zookeeper/Hive MetaStore)作为分布式互斥锁服务。允许并发写入文件,但是不允许并发提交commit,提交commit操作封装到事务中。提交commit时,执行冲突检查:若本次提交的commit中,修改的文件列表,与本次instanceTime之后的commit存在重叠文件,则提交失败,本次写入无效。使用并发机制需要注意问题INSE...
Hudi单表并发写实现方案
- 使用外部服务(Zookeeper/Hive MetaStore)作为分布式互斥锁服务。
- 允许并发写入文件,但是不允许并发提交commit,提交commit操作封装到事务中。
- 提交commit时,执行冲突检查:若本次提交的commit中,修改的文件列表,与本次instanceTime之后的commit存在重叠文件,则提交失败,本次写入无效。
使用并发机制需要注意问题
- INSERT、BULK_INSERT类型的操作,Hudi当前并发机制无法保证写入后表主键唯一, 这个需要用户自己来保证。
- 增量查询问题:数据消费以及Checkpoint可能会乱序,多个并发写操作在不同的时间点完成。
- 并发写需要在启用并发写特性后支持并发,未开启时不支持并发写入。
如何使用并发机制
- 启用并发写入机制。
hoodie.write.concurrency.mode=optimistic_concurrency_control hoodie.cleaner.policy.failed.writes=LAZY
- 设置并发锁方式。
hoodie.write.lock.provider=org.apache.hudi.hive.HiveMetastoreBasedLockProvider hoodie.write.lock.hivemetastore.database=<database_name> hoodie.write.lock.hivemetastore.table=<table_name>
Zookeeper:
hoodie.write.lock.provider=org.apache.hudi.client.transaction.lock.ZookeeperBasedLockProvider hoodie.write.lock.zookeeper.url=<zookeeper_url> hoodie.write.lock.zookeeper.port=<zookeeper_port> hoodie.write.lock.zookeeper.lock_key=<table_name> hoodie.write.lock.zookeeper.base_path=<table_path>
说明
当设置cleaner policy为Lazy时,本次写入仅能关注到自己写入的文件是否过期,不能检查并清理历史写入产生的垃圾文件,即在并发场景下,无法自动清理垃圾文件。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)