多个Spark任务同时写Hudi表

多个Spark任务同时写Hudi表,第1张

多个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.

......

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5116550.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存