Delta Lake

Delta Lake

重点问题

Delta Lake API 支持哪种类型的写操作?

Delta Lake 可以解决哪些需求?

快点清理掉被合并掉的小文件,如何设置安全期参数

什么是 Delta Lake

整体来看的话,其实就是在数据入hdfs之前多了delta lake这层组件,能够对小文件合并,脏数据处理,api操作上仍旧是sql.

存储之大、ACID、历史回放、文件合并、无服务(对比Hive metastore),都算数据湖方案的特性。也都是数据仓库的痛点

Delta Lake 基本功能

数据集 https://www.kaggle.com/wendykan/lending-club-loan-data/data,

loans.csv: 145Cols, 1.11GB unzipped

使用Delta Lake构建分析管道

Delta Lake 高级功能

QA

数据湖底层存储的方式是怎样的?

底层存储的其实就是数据文件(列式/压缩格式自行选择),存储在哪自行选择,可hdfs/s3/local

这种方式属于单表点对点的采集,多表同时采集,是否消费kafka多次?

如果是多表的话,需要在 kafka 内建多个 topic

那如果源端MySQL是做的DDL alter rename column岂不是会将schema污染?

delta lake 有 schema 更新的功能,但是 schema 更新目前还不支持 rename column。而且,目前这套基于 binlog 的方案也不支持将上游的 rename column 反应到 delta lake 中。

delta lake如何保障事务一致性这块能细说一下吗

事务一致性是说数据库中表内的数据满足一定的约束条件,这块内容属于 OLTP 的范畴,delta 并不支持。delta 支持的事务是说保证并发事务之间不相互污染。说的一致性是不是分布式存储的一致性?如果是这个的话,是靠底层存储(HDFS,OSS)等来保证的,这两个一致性的含义不一样。

上下游删除更新数据,delta lake 怎么保证

上游删除数据,删除数据的动作会被传递到 delta lake 中,delta lake 会同步删除数据。但是以 delta lake 为数据源的 streaming 作业,并不能处理该删除数据的动作,因为删除之前的数据已经被 streaming 处理过了。对于这种情况,以 delta lake 为数据源的 streaming 作业会抛异常。如果要 streaming 作业不抛异常,可以设置忽略 delta lake 中的 delete 事件

deltaLake是怎么处理并发读写的问题的?

delta lake 有乐观机制的事务保证,读事务和写事务之间不存在冲突。写写之间可能会有冲突。这个时候先提交的事务会成功,另外一个失败

这个delta lake是要在在这些小文件流批处理场景下替代hive吗?

hive 对流不怎么支持,小文件,如果用 hive 事务功能的话,也会有小文件,但是 delta 的小文件更多的是流产生的,量要比 hive 大。你说在这个场景下替代 hive,我觉着这个说法不太准确。delta 的卖点是对湖中的数据做好管理,支持流批一体。与 hive 还是有区别的。当然 delta 可以代替 hive,反之不行。

Delta Lake 是阿里开发的还是开源的 可以读取mysql 数据源写入到阿里的dataworks吗?

开源的。读取数据库的 binlog,写入到 delta lake

delta lake的输出和普通parquet输出目录会多metastote,log灯信息,那么这个输入spark.read.parquet()也可以直接处理吧,需要有什么注意的地方吗?

spark.read.format("delta"), 不能直接 spark.read.format("parquet"), 虽然底层是 parquet 文件,但是是两种 datasource。delta 维护了历史版本,因此数据目录下会有多个版本的 parquet 文件。如果把它当成 parquet 直接读的话,数据就不准确了

posted @ 2020-08-28 23:29  -拂石-  阅读(1037)  评论(0编辑  收藏  举报