栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

多个Spark任务同时写Hudi表

多个Spark任务同时写Hudi表

在实际应用中难免会遇到多个流或批处理程序需要同时操作同一张Hudi表的场景,默认情况下多个程序往同一张Hudi表中写数据时会发生多写冲突造成程序运行失败,要解决并发写问题可以借助Zookeeper实现基于乐观锁的并发写。

使用Spark 3.1.1 Hudi 0.9.0 开启乐观锁并发写功能配置参考:

writer.

.......

//作为分布式锁的zookeeper节点目录

.option(HoodieLockConfig.ZK_base_PATH.key(), "/hudi/write_lock")

//当前分布式锁节点 一般配为表名称 

//所有向同一个表中写的程序 ZK_base_PATH/ZK_LOCK_KEY需要一致

.option(HoodieLockConfig.ZK_LOCK_KEY.key(), tableName)

//Zookeeper链接URL

.option(HoodieLockConfig.ZK_CONNECT_URL.key(), "127.0.0.1:2181")

//清理模式设为LAZY 默认写失败的及时回滚、并发写时不适用

.option("hoodie.cleaner.policy.failed.writes","LAZY")

//开启乐观锁并发写功能

.option(HoodieWriteConfig.WRITE_CONCURRENCY_MODE.key(), "OPTIMISTIC_CONCURRENCY_CONTROL")

.......

如果不开启乐观并发写功能,多个任务往同一个Hudi表写数据可能会报:

Exception in thread "main" org.apache.hudi.exception.HoodieIOException: Failed to create file /tmp/xxxx/xxxx/t_table/.hoodie/20211108xxxxx.commit.requested

......

Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.fs.FileAlreadExistsException):

/tmp/xxxx/xxxx/t_table/.hoodie/20211108xxxxx.commit.requested for client 10.x.x.x already exists.

......

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433726.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号