1 重点问题
Delta Lake API 支持哪种类型的写操作?
Delta Lake 可以解决哪些需求?
快点清理掉被合并掉的小文件,如何设置安全期参数
2 什么是Delta Lake
整体来看的话,其实就是在数据入hdfs之前多了delta lake这层组件,能够对小文件合并,脏数据处理,api操作上仍旧是sql.
存储之大、ACID、历史回放、文件合并、无服务(对比Hive metastore),都算数据湖方案的特性。也都是数据仓库的痛点
3 Delta Lake基本功能
数据集 https://www.kaggle.com/wendykan/lending-club-loan-data/data,
loans.csv: 145Cols, 1.11GB unzipped
4 使用Delta Lake 构建分析管道
5 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 直接读的话,数据就不准确了