搜索
搜 索
本版
文章
帖子
用户
图文精华
hadoop-2.6.0+zookeeper-3.4.6+hbase-1.0.0+hive-1.1.0完全分布 ...
首页
Portal
专题
BBS
面试
办公|编程助手
更多
登录
注册
用户组:游客
主题
帖子
云币
我的帖子
我的收藏
我的好友
我的勋章
设置
退出
导读
淘贴
博客
群组
社区VIP
APP下载
今日排行
本周排行
本周热帖
本月排行
本月热帖
会员排行
About云-梭伦科技
»
专题
›
技术学习(版主发帖区)
›
大数据学习
›
数据湖
›
版本说明
›
Apache Hudi 0.7.0新版本重点特性介绍
0
0
0
分享
Apache Hudi 0.7.0新版本重点特性介绍
阿飞
2021-1-29 08:04:28
发表于
版本说明
[显示全部楼层]
阅读模式
关闭右栏
0
2727
本帖最后由 阿飞 于 2021-1-29 08:05 编辑
问题导读
1.Hudi Clustering带来哪些好处?
2.Metadata表实现使用什么表?
3.Hudi哪个版本添加了Flink和Java客户端?
4. Hudi 0.7.0写入端、查询端优化做了哪些优化?
1. Clustering
0.7.0版本中支持了对Hudi表数据进行Clustering(对数据按照数据特征进行聚簇,以便优化文件大小和数据布局),Clustering提供了更灵活地方式增加文件大小,有了Clustering特性,便可更快速地摄取数据,然后聚簇为更大的文件,实验数据表明查询性能可以提升3~4倍,文件数可以减少10~20倍;另外Clustering对于查询侧优化也很明显,在查询时通常会基于字段进行Clustering,通过完全跳过一些文件来极大提升查询性能,这与云数仓Snowflake提供的Clustering功能非常类似,我们非常高兴地宣称这个特性在0.7.0版本中完全开源免费。
想要了解更多Clustering细节,可以参考RFC-19,可以查阅这些配置来在你的数据管道中启用Clustering,现在Hudi支持同步和异步的Clustering模式。
2. Metadata表
Hudi项目始于Uber,开始是基于HDFS实现的数据湖,对于云上对象存储的数据湖性能不如HDFS。在0.7.0版本,我们解决了该问题,即支持了内部Metadata表,此表可存储索引数据,其他元数据信息等。
Metadata表的实现使用了Hudi MOR表,这意味着像其他任何Hudi表一样,可以被压缩(Compaction)、清理(Clean)、增量更新(incrementally updated)。而且与其他项目中的类似实现不同,我们选择将文件列表等信息索引为HFile格式(格式可插拔),HFile提供了很好的点查性能,可以高效获取分区文件列表等信息。
在0.7.0版本中,在写入端配置hoodie.metadata.enable=true即可构建Metadata表,这样后续操作将不再调用fs.listStatus()接口,我们引入了一种同步机制来保证对数据timeline中进行的文件新增/删除操作都会同步到Metadata表。
测试有25W个文件的表,Metadata表相比使用Spark并发Listing要快2~3倍,更多设计细节可查阅RFC-15,其他Metadata表相关配置可参考这里,提供了参数以便在生产环境中安全使用该特性。
3. Flink/Java客户端
Hudi最开始设计时依赖Spark,但随着项目成为Apache顶级项目,我们意识到需要抽象内部表格式、表服务、写入层的代码以支持更多的引擎。在0.7.0版本,我们完成了写入层的解耦,添加了Flink和Java客户端,现在你可以使用HoodieFlinkStreamer来消费Kafka中的数据,以写入Hudi的COW表中。
4. 写入端优化
Spark3支持;0.7.0版本支持使用Spark3进行写入和查询,请注意使用scala 2.12版本的hudi-spark-bundle包;
并行Listing;我们已将所有List操作移至HoodieTableMetadata接口下,该接口可以多线程/Spark并行执行,该优化可以在未开启Metadata表时提升清理、压缩性能。
Kafka Commit Callbacks;0.7.0添加了HoodieWriteCommitKafkaCallback接口,当每次进行commit后可以向Kafka中发送事件,以此来触发派生/ETL数据管道,类似Apache Airflow中的Sensors
Insert Overwrite/Insert Overwrite Table;0.7.0版本中新增了这两种操作类型,主要用于批处理ETL作业,该作业通常会在每次运行时覆盖整个表/分区。考虑到这些操作可以批量替换目标表,因此这些操作比upsert更合适,请查看[示例](/docs/ quick-start-guide.html#insert-overwrite-table)。
删除分区支持:对于使用WriteClient/RDD级别API的用户,Hudi提供了一个新的API来删除整个分区,而不是采用记录级别删除方式。
新增DefaultHoodieRecordPayload解决乱序问题;当前默认的OverwriteWithLatestAvroPayload将覆盖存储中已有的值,即使使用较旧值进行upsert。0.7.0版本添加了一个新的DefaultHoodieRecordPayload和一个有效负载配置hoodie.payload.ordering.field来指定一个字段,可以将传入的upsert记录与已存储的记录进行比较,以决定是否覆盖。推荐用户使用这种更新、更灵活的Payload模型。
Hive同步;支持使用SlashEncodedHourPartitionValueExtractor同步小时分区至Hive中。
支持IBM云对象存储、Open Java 9版本。
5. 查询端优化
MOR增量查询(Spark Datasource),0.7.0版本支持使用Spark datasource增量查询MOR表,在后续版本中会继续加强和重构该特性。
Metadata表支持File Listings,用户还可以将元数据表用于以下查询端,对于Hive,设置hoodie.metadata.enable = true会话 属性,对于使用SparkSQL查询注册的Hive表,请使用参数--conf spark.hadoop.hoodie.metadata.enable = true来允许从元数据中获取分区的文件列表,而非使用File Listing。
最新经典文章,欢迎关注公众号
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
没找到任何评论,期待你打破沉寂
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
发表新帖
阿飞
超级版主
关注
1893
主题
1998
帖子
123
粉丝
TA的主题
华为OD目标院校名单(2024.07新版)
2024-7-19
国/央企投递全流程经验分享
2024-7-15
2024年了,互联网大厂福利还香吗?
2024-5-23
华为3年涨薪6次,每次涨薪高达3万
2024-5-14
华为OD面试
2024-5-13
24小时热文
kafka面试题精选
Nebula Flink Connector 在实时 ETL 的实践
Apache Doris 用户案例集
国家电网公司主数据管理系统技术规范
企业的主数据建设方法论与实践
关闭
推荐
/2
中文版ChatGPT
1.无需魔法 2.提高编程效率 3.提高文档能力
查看 »
新手帮助
新手帮助:注册遇到问题,领取资源,加入铁粉群,不会使用搜索,如何获取积分等
查看 »
意见
反馈