Apache Hudi与Apache Flink集成( 三 )
以map方法为例 , 在Spark的实现类 HoodieSparkEngineContext中 , map方法如下:
@Overridepublic List
在操作List的引擎中其实现可以为(不同方法需注意线程安全问题 , 慎用parallel()):
@Overridepublic List
注:map函数中抛出的异常 , 可以通过包装SerializableFunction func解决.
这里简要介绍下 SerializableFunction:
@FunctionalInterfacepublic interface SerializableFunction extends Serializable {O apply(I v1) throws Exception;}
该方法实际上是 java.util.function.Function 的变种 , 与java.util.function.Function 不同的是 SerializableFunction可以序列化 , 可以抛异常 。 引入该函数是因为JavaSparkContext#map()函数能接收的入参必须可序列 , 同时在hudi的逻辑中 , 有多处需要抛异常 , 而在Lambda表达式中进行 try catch 代码会略显臃肿 , 不太优雅 。
6.现状和后续计划6.1 工作时间轴2020年4月 , T3出行(杨华@vinoyang , 王祥虎@wangxianghu)和阿里巴巴的同学(李少锋@leesf)以及若干其他小伙伴一起设计、敲定了该解耦方案;
2020年4月 , T3出行(王祥虎@wangxianghu)在内部完成了编码实现 , 并进行了初步验证 , 得出方案可行的结论;
2020年7月 , T3出行(王祥虎@wangxianghu)将该设计实现和基于新抽象实现的Spark版本推向社区(HUDI-1089);
2020年9月26日 , 顺丰科技基于T3内部分支修改完善的版本在 Apache Flink Meetup(深圳站)公开PR, 使其成为业界第一个在线上使用Flink将数据写hudi的企业 。
2020年10月2日 , HUDI-1089 合并入hudi主分支 , 标志着hudi-spark解耦完成 。
6.2 后续计划1)推进hudi和flink集成
将flink与hudi的集成尽快推向社区,在初期 , 该特性可能只支持kafka数据源 。
2)性能优化
为保证hudi-spark版本的稳定性和性能 , 此次解耦没有太多考虑flink版本可能存在的性能问题 。
3)类flink-connector-hudi第三方包开发
将hudi-flink的绑定做成第三方包 , 用户可以在flink应用中以编码方式读取任意数据源 , 通过这个第三方包写入hudi 。
原文链接:;utm_medium=referral
如果觉得本文对你有帮助 , 可以评论关注支持一下
推荐阅读
- FlinkSQL 动态加载 UDF 实现思路
- 万字干货还原美团Flink实时数仓建设
- 网易云音乐基于Flink实时数仓实践
- flink消费kafka的offset与checkpoint
- 唯品会实时平台架构-Flink、Spark、Storm
- Flink的DataSet基本算子总结
- Flink中parallelism并行度和slot槽位的理解
- Flink到底能不能实现exactly-once语义?
- Flink流处理应用在IDEA中的执行流程分析
- 在IDEA中执行Flink应用时如何访问Dashboard?