DataBricks最近新开源了一个项目Delta Lake。这其实不算是个新项目了。DataBricks在其商业版里面提供这样的功能已经有一段时日了。对我来说Delta Lake就是久闻大名,但是不知道庐山真面目。
当然以DataBricks一贯的既要为人民服务,更要为人民币服务的做法,开源出来的Delta Lake肯定不是其内部商业版的全部。但是即便如此也可以让我们管中窥豹了。
文章分两部分。第一部分介绍一下Delta Lake的一些情况,主要是基于:
https://youtu.be/whaV6bMaf5o
的内容。讲课的小哥是DataBricks的大神Michael Armburst。他负责Structured Stream和Delta Lake。第二部分会给出我个人的一些看法。
![171dd7f5444dbce6171d3209974bc3df.png](https://i-blog.csdnimg.cn/blog_migrate/8824083edf83d4e83feb669d2a83b893.jpeg)
![ed7fbb48c235dec8f4f02f733c3fddf7.png](https://i-blog.csdnimg.cn/blog_migrate/96a5f7b90cff2c0f0603d543b8854c8d.jpeg)
![2b7bed8000b86f0c48cf04dea6730631.png](https://i-blog.csdnimg.cn/blog_migrate/2966b4c636f6296da8e9600d812c5a2e.jpeg)
![aa361753a17745a610fbe6a4d365282c.png](https://i-blog.csdnimg.cn/blog_migrate/2da9b4f8f9e937f4cfb47dba3a39d2ac.jpeg)
图中展示的是一个之前非常著名的lambda架构,简单来说就是数据的一部分用批处理来获取准确值,但是需要时间,另外一个pipeline用streaming的方式来获取非精确但是及时的值。当然这张图里面是有点给Spark贴金了。标准Lambda出来的时候,流引擎主要是storm,而批处理引擎最常用的HIVE。当然作为DataBricks公司出品的PPT,这样去写也是可以理解的。
![697820a9835558bb190f2c45c044176f.png](https://i-blog.csdnimg.cn/blog_migrate/38e5d70f89a04221e7367cf2072f85d1.jpeg)
![7692c7bfb1168a23e3ef3d05eb660dbb.png](https://i-blog.csdnimg.cn/blog_migrate/2c3bac8c78a46fb80011668e0c472c11.jpeg)
![70cd71d3aab3ff6dbba83df5bc8bfbdd.png](https://i-blog.csdnimg.cn/blog_migrate/017fbec64381c35a33d813daae261540.jpeg)
![454032e896193f82ab3f87856e8f53a1.png](https://i-blog.csdnimg.cn/blog_migrate/c577e0e3ce99fa69d80a18b054a7c26a.jpeg)
![c9fe95c09abf8b3a56c2b68ed19b3779.png](https://i-blog.csdnimg.cn/blog_migrate/7af4fb8ae997555fe409f0fbb0358bc6.jpeg)
![befbea91fdfb3c225cd971e06715e7d8.png](https://i-blog.csdnimg.cn/blog_migrate/17133e4cbec9d3b5ed001850809ace73.jpeg)
![d377d9c566b2b9ca8560258f3cfb2f97.png](https://i-blog.csdnimg.cn/blog_migrate/7a586f053217b7608d80b7d0fcd52f37.jpeg)
![f7f41b079d7b529b6a6dd6426204b328.png](https://i-blog.csdnimg.cn/blog_migrate/aff21872c9f84daa46776299d471b529.jpeg)
![ac4f824f8a77d98de1fc94a00bb8704c.png](https://i-blog.csdnimg.cn/blog_migrate/0484f646d5af0140fdd11d605448596a.jpeg)
![af59ad7e94f83d2cded8ec791b05af35.png](https://i-blog.csdnimg.cn/blog_migrate/0f99f28b2765534bad8234c7e9567acd.jpeg)
![55b9edc648ac019b867ad0da77cbc932.png](https://i-blog.csdnimg.cn/blog_migrate/0d759e3004b90583948e64e6e9c74050.jpeg)
![17d821793d681a37d91a6208f51a6e1c.png](https://i-blog.csdnimg.cn/blog_migrate/ca7f4859795cf00378beccc7a83342b4.jpeg)
![b148ad05dc6405e28f76c10390443e3b.png](https://i-blog.csdnimg.cn/blog_migrate/14ba0a25faa74da027587163dbda2c6d.jpeg)
![2b155f2f6190fd583b8ab1f44eb25429.png](https://i-blog.csdnimg.cn/blog_migrate/31fab416b5e2d60cf94b7cf0f7ee873a.jpeg)
![63e159b0c83ee368aaf6556f7fa5bd46.png](https://i-blog.csdnimg.cn/blog_migrate/f1c2771c77c3cbcac42615d8b2c6e258.jpeg)
![ac5ea411b1afcefc486391e3fe791829.png](https://i-blog.csdnimg.cn/blog_migrate/190414999e20b03b471317d1cf15e0ad.jpeg)
![8b77b4f4c6f7d90dd439ad0cc9115e25.png](https://i-blog.csdnimg.cn/blog_migrate/314d04625373425f6481c08324de7adc.jpeg)
![356621030741a6bcf5f5f49cde40c95d.png](https://i-blog.csdnimg.cn/blog_migrate/76e561882e57aef4f372b77e4f1b84f9.jpeg)
![40242967e33f0960443b442144a7e8d2.png](https://i-blog.csdnimg.cn/blog_migrate/bd1b1b51bd57c0ba4b52ca279bf1b96d.jpeg)
![e8032b11142ff46c01af496fcdae1415.png](https://i-blog.csdnimg.cn/blog_migrate/859b784d04256c70bab2bf0e8de311e5.jpeg)
![87ce17ff148a8a71fdd44bb1c26156a6.png](https://i-blog.csdnimg.cn/blog_migrate/d01df402a59d2fe59e2e013656ef07be.jpeg)
![c029ed91555e8e87ab186ebae4ca7fce.png](https://i-blog.csdnimg.cn/blog_migrate/2b59d9a2f15dd1efc6a69037f7dd7638.jpeg)
![671797991a49f9ef7355828aa29158f1.png](https://i-blog.csdnimg.cn/blog_migrate/017da11ba6e65aa973682f55a391dfba.jpeg)
![b91364659168ce2929fb8a5e06e0674b.png](https://i-blog.csdnimg.cn/blog_migrate/cac813231f4539beb75cfd138ab9b6fe.jpeg)
![84e77f7dead76b6f20dc0edcb6b31d1a.png](https://i-blog.csdnimg.cn/blog_migrate/5fe773fa69641debc4679b8c416d75ed.jpeg)
![792bb23267d6149805fde9d949c48b08.png](https://i-blog.csdnimg.cn/blog_migrate/9cd4cefb9b56c48b1b324c06a03c521e.jpeg)
![6c5d5fe41a87bf97f0257a4f9688fdce.png](https://i-blog.csdnimg.cn/blog_migrate/36aac33da87d428f824969d2e81bb762.jpeg)
如上面的图片,我基本上完整的保留了整个PPT。Delta Lake可以理解为一个文件存储方式。它在一个目录上同时存了transaction log和数据文件。并且它可以通过用spark处理transaction log来生成不同的checkpoint,和对应的数据文件。它同时也支持了事务处理。Delta Lake同时可以作为Streaming的Source和Sink,这无疑是很强有力的。
从一个做数据库的人的角度来说,Delta Lake的实现机制上,没有让我觉得特别吃惊的先进技术,有的是数据库系统几十年内使用过的经典技术。但是没有新技术不代表Delta Lake这个东西不好。Delta Lake这个东西解决的是问题很多之前BI和数仓,现在大数据应用里必不可少的。从这个角度上来说,这个开源项目很有前途。
Delta Lake里面很多的地方采用复用Spark的方式来处理Delta Lake的问题。比如说可以通过读取transaction log来分析出哪些partion哪些文件是需要读的,做Partition pruning。又比如说来做checkpoint。Partition pruning本身不是什么新鲜技术。使用引擎自己去处理自身的想法,我在微软做的时候也实现过一些类似的东西。但是大数据开源项目里这应该是头一遭。这是非常精细的想法。
这里我需要补充一点我个人的经验。要了解数据库和大数据的动向,一定要时刻关注Michael Stonbraker的讲话,论文等等。他虽然经常夹杂着很多个人的私货,但是依然是数据库圈子里最有洞见的人。你所需要做的,就是区分哪些是私货,哪些是真知灼见。
比如说2015年他来清华给了21世纪的计算的讲话,里面大量夹杂自己私货的同时也给出了很多真知灼见。对Spark他当时说这个东西现在只是个数据处理引擎,但是很有意思。它会变,要关注。我当时在想,数据处理引擎和传统DB来说还是差很多的,DataBricks是不是会一脚伸进存储层,后来就听说了Delta Lake。
当然万事不能尽善尽美。个人喜好也不同。Delta Lake也有一些我不喜欢的地方。比如说,把transaction log和数据文件放在一个目录里,但是并没有任何保护措施。这就意味着用户可以不经过spark就去读取和改变数据文件或者日志文件,从而造成两者之间的不一致。这是我在产品设计开发里面不喜欢的。一个东西如果很容易就被人破坏,那就有很多潜在的危险。好的软件不应该是这样的。
Delta Lake选择用Parquet来做数据文件,我可以理解是兼容性的问题。为了让社区放心不会被lock in。但是既然有了metadata存储的地方,其实是不是应该用parquet就是一个两可的问题了。有些数据类型也许其他的格式会更合适。
在Talk里Michael Armburst提到,他一开始以为只要有了transaction log就不需要HCatalog了,后来发现HCatalog还是有用的,因为那里可以给一个组织提供一个全局视图,告诉大家有哪些数据。他还提到HCatalog的整合会指向这些transaction log。
说实话都9102年了,开源社区都还没有一个让我满意的Catalog,实在是一个遗憾。一个好用的Catalog,其实不是那么难。但是一系列的后续技术实现都构建在一个好用的Catalog上。比如说最简单的企业需要的权限管理。没有Catalog简直寸步难行。
我很难想象一个企业不需要权限管理。尤其是精确到某行某列的权限管理。这种东西对企业是刚需,而Delta Lake现在的做法是搞不定的。总不能这些东西全写进transaction log吧。
有一个好的Catalog,另外一个方面,对最新版本的数据的metadata,也可以直接从Catalog里读取。而不需要再去transaction log里扒。很多简单的partition pruning可以直接做掉了。用不着再起一个spark job去做。
所以这个Delta Lake的设计里,没有一个Catalog,在我看来是挺遗憾的。尤其是企业市场上,精细的权限管理完全没办法做。当然你可以说Hadoop里本来就没办法做。这也是我觉得开源社区折腾那么多年居然连一个像样的Catalog都没有做出来,实在是有点joking。
以上是我的一些简单分析和看法。当然我更好奇的是DataBricks的企业版和这个开源版有什么区别。为什么内部折腾那么久之后最终开源了一个阉割版给大家。毕竟对于DataBricks这样既全心全意为人民服务,更全心全意为人民币服务的公司,任何的举动我们都应该从技术和商业两个方面去分析。