Apache Hudi 0.7.0版本重磅发布

重点特性
1. Clustering
0.7.0版本中支持了对Hudi表数据进行Clustering(对数据按照数据特征进行聚簇,以便优化文件大小和数据布局),Clustering提供了更灵活地方式增加文件大小,有了Clustering特性,便可更快速地摄取数据,然后聚簇为更大的文件,实验数据表明查询性能可以提升34倍,文件数可以减少1020倍;另外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。
贡献者
prashantwason ,Trevor-zhang,satishkotha,nbalajee,wangxianghu,hddong,nsivabalan,xushiyan,cdmikechen,garyli1019,kwondw,sreeram26,chuangehh,zhedoubushishi,modi95,linshan-ma,Karl-WangSK,bvaradar,liujinhui1994,shenh062326,xushiyan,pratyakshsharma,afilipchik,Kaiux,lw309637554,vinothchandar,dugenkui03,leesf,yanghua,rmpifer,hj2016,guykhazma,bhasudha,hotienvu,n3nash,v3nkatesh,pengzhiwei2018,yui2010,jshmchenxi,danny0405,yui2010,lichang-bd,nbalajee,umehrot2
Apache Hudi 0.7.0版本重磅发布的更多相关文章
- Apache Hudi 0.5.1版本重磅发布
历经大约3个月时间,Apache Hudi 社区终于发布了0.5.1版本,这是Apache Hudi发布的第二个Apache版本,该版本中一些关键点如下 版本升级 将Spark版本从2.1.0升级到2 ...
- Apache Hudi 0.8.0版本重磅发布
1. 重点特性 1.1 Flink集成 自从Hudi 0.7.0版本支持Flink写入后,Hudi社区又进一步完善了Flink和Hudi的集成.包括重新设计性能更好.扩展性更好.基于Flink状态索引 ...
- Apache Hudi 0.6.0版本重磅发布
1. 下载信息 源码:Apache Hudi 0.6.0 Source Release (asc, sha512) 二进制Jar包:nexus 2. 迁移指南 如果您从0.5.3以前的版本迁移至0.6 ...
- Flutter 1.17版本重磅发布
Flutter 1.17 是2020年的第一个稳定版本,此版本包括iOS平台Metal支持(性能更快),新的Material组件,新的Network跟踪工具等等! 对所有人来说,今年是充满挑战的一年. ...
- 重磅!Vertica集成Apache Hudi指南
1. 摘要 本文演示了使用外部表集成 Vertica 和 Apache Hudi. 在演示中我们使用 Spark 上的 Apache Hudi 将数据摄取到 S3 中,并使用 Vertica 外部表访 ...
- 官宣!ASF官方正式宣布Apache Hudi成为顶级项目
马萨诸塞州韦克菲尔德(Wakefield,MA)- 2020年6月 - Apache软件基金会(ASF).350多个开源项目和全职开发人员.管理人员和孵化器宣布:Apache Hudi正式成为Apac ...
- Apache Hudi C位!云计算一哥AWS EMR 2020年度回顾
1. 概述 成千上万的客户在Amazon EMR上使用Apache Spark,Apache Hive,Apache HBase,Apache Flink,Apache Hudi和Presto运行大规 ...
- 真香!PySpark整合Apache Hudi实战
1. 准备 Hudi支持Spark-2.x版本,你可以点击如下链接安装Spark,并使用pyspark启动 # pyspark export PYSPARK_PYTHON=$(which python ...
- Apache Hudi异步Compaction方式汇总
本篇文章对执行异步Compaction的不同部署模型一探究竟. 1. Compaction 对于Merge-On-Read表,数据使用列式Parquet文件和行式Avro文件存储,更新被记录到增量文件 ...
随机推荐
- Windows下不同版本的JDK共存
1.安装jdk7,将C:\Windows\System32目录下的java.exe.javaw.exe.javac.exe删除. 2.安装jdk8,将系统环境变量path中的C:\ProgramDat ...
- [LeetCode]Minimum Moves to Equal Array Elements1,2
1.将每次n-1个数+1,转化为每次最大的数-1 public int minMoves(int[] nums) { /* 看了看答案 ,很巧妙,最后的结果肯定是把数组元素都加到一个相同的值, 也就是 ...
- WIN10系统下静态编译Qt4.8.7
qt-everywhere-opensource-src-4.8.7.tar.gz http://download.qt.io/archive/qt/4.8/4.8.7/qt-everywhere- ...
- CMS、G1收集器
目录 CMS.G1收集器 1.CMS收集器 1.1.原理 1.2.不足 2.G1收集器 2.1.特点 2.2.执行过程 CMS.G1收集器 1.CMS收集器 CMS(Concurrent Mark S ...
- 第十章节 BJROBOT PID 动态调节【ROS全开源阿克曼转向智能网联无人驾驶车】
1.把小车架空,平放在地板上,注意四个轮子一定要悬空.用资料里的虚拟机,打开一个终端 ssh 过去主控端启动 roslaunch znjrobot bringup.launch. 2.在虚拟机端再 ...
- 2020安徽程序设计省赛 G序列游戏
2020安徽程序设计省赛 G序列游戏 有一个序列w,初始为空.再给出一个长度为m 单调递增的序列a.你需要对序列w 作如下n 次操作: (1)操作0,在序列尾部添加数字0. (2)操作1,在序列尾部添 ...
- 震惊!java中日期格式化的大坑!
前言 我们都知道在java中进行日期格式化使用simpledateformat.通过格式 yyyy-MM-dd 等来进行格式化,但是你知道其中微小的坑吗? yyyy 和 YYYY 示例代码 @Test ...
- 初识vue-简单的自定义标签页面
vue3.0比vue2.0简化了许多. 在这里呢就做了一个简单的标签页面.在这当中难免会有些错误,请勿见怪. 1.vue的页面编写,也就是app.vue这个文件作为主入口文件,当然这个主入口文件也可以 ...
- vue中选中弹出框内的表格
一:可多选情况且对应勾选 由于是弹出框形式,所以会出现新增DOM与数据的改变问题,因此要使用$nextTick,不然一开始弹出得时候DOM还没有生成,却要获取DOM会报错:这种多选情况会出现一个bug ...
- 【Flutter】功能型组件之异步UI更新
前言 很多时候会依赖一些异步数据来动态更新UI,比如在打开一个页面时我们需要先从互联网上获取数据,在获取数据的过程中我们显示一个加载框,等获取到数据时我们再渲染页面:又比如想展示Stream(比如文件 ...