FusionInsight MRS Hudi原理解析之单表并发写实现方案

一枚核桃 发表于 2021/12/28 10:52:49 2021/12/28
【摘要】 Hudi单表并发写实现方案使用外部服务(Zookeeper/Hive MetaStore)作为分布式互斥锁服务。允许并发写入文件,但是不允许并发提交commit,提交commit操作封装到事务中。提交commit时,执行冲突检查:若本次提交的commit中,修改的文件列表,与本次instanceTime之后的commit存在重叠文件,则提交失败,本次写入无效。使用并发机制需要注意问题INSE...

Hudi单表并发写实现方案

  1. 使用外部服务(Zookeeper/Hive MetaStore)作为分布式互斥锁服务。
  2. 允许并发写入文件,但是不允许并发提交commit,提交commit操作封装到事务中。
  3. 提交commit时,执行冲突检查:若本次提交的commit中,修改的文件列表,与本次instanceTime之后的commit存在重叠文件,则提交失败,本次写入无效。

使用并发机制需要注意问题

  1. INSERT、BULK_INSERT类型的操作,Hudi当前并发机制无法保证写入后表主键唯一, 这个需要用户自己来保证。
  2. 增量查询问题:数据消费以及Checkpoint可能会乱序,多个并发写操作在不同的时间点完成。
  3. 并发写需要在启用并发写特性后支持并发,未开启时不支持并发写入。

如何使用并发机制

  1. 启用并发写入机制。
    hoodie.write.concurrency.mode=optimistic_concurrency_control
    hoodie.cleaner.policy.failed.writes=LAZY
  2. 设置并发锁方式。

    Hive MetaStore:

    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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。