摘要:本文整理自阿里云数据湖构建与分析研发熊佳树在7月17日阿里云数据湖技术专场交流会的分享。本篇内容主要分为两个部分:
1.元数据与权限背景介绍
2.阿里云数据湖统一元数据服务
3.阿里云数据湖统一权限服务
4.数据湖元数据与权限展望
一、元数据与权限背景介绍
开源元数据体系由来、演进及问题
开源大数据体系是指以 Hadoop 为中心的生态系统,而目前 Hive 是开源数仓的事实标准。
关于大数据的由来和发展,要追溯到谷歌在2003 年发表的论文,论文中提出了 HDFS 和 MapReduce 两个组件。HDFS 组件最早用于解决网页存储问题,它可以部署在大量廉价的机器上,提供极佳的硬件容错能力以及存储的扩展性。MapReduce 的初衷是解决搜索引擎中大规模网页数据的并行化处理问题。同时它也是比较通用的并行处理框架,可用于处理很多大数据场景。
虽然 HDFS 和 MapReduce 很好地解决了大数据存储和大规模数据并行处理的问题,但依然存在几个缺点:
第一,编程门槛较高。传统的数仓工程师接触的编程接口一般是 SQL ,但 MapReduce 框架有一定的编程能力要求。
第二,HDFS 上存储的是文件和目录,并没有存储元数据,也无法进行查询。因此即使知道文件的结构,也无法对文件的内容方式变化进行管理,导致程序本身可能丧失稳定性。
基于以上痛点,以雅虎为代表的公司提出了 Apache Pig,提供 SQL-like 语言,该语言的编译器会把类 SQL 的数据分析请求转换为一系列经过优化处理的 MapReduce 运算,屏蔽了 MapReduce 细节,可以很轻松高效地处理数据;而以 Facebook 为代表的公司提出 Hive 的解决方案,在 HDFS 上提供了一层数据抽象,屏蔽了文件系统及编程模型的细节,极大降低了数仓开发人员的门槛。通过对数据及文件系统到元数据的抽象,能够非常方便地进行数据共享、检索以及查看数据变更历史。这一层的元数据抽象即如今大家所熟知的 Database、Table 、Partition和 Function ,同时在元数据上又衍生出了非常接近 SQL 语言的 HiveQL。同时后续的 Hive3.0 版本新增了 catalog 的功能,Hive4.0版本新增了 Connectors 功能。依托于元数据, 计算引擎可以很好地进行历史的追溯。除了追溯历史 schema 变更外,元数据还有一个重要功能是保护数据(不做不兼容的变更)。
Hive3.0实现的 catalog 功能,主要基于以下两个场景:
① 多个系统之间可能需要 MetaStore 元数据的 Namespace,期望能够达到一定的隔离。比如 Spark 有自己的 catalog ,Hive 也有自己的 catalog,不同的 catalog 上可以有不同的鉴权、运营策略。
② 可以对接外部系统的 catalog。
Hive4.0的 Connectors 主要是定义数据 DataSource,其他引擎对接 Hive 元数据后,即可通过该接口识别 DataSource 的信息,方便其他引擎做查询。
目前 Hive上几乎已经支持了 Hadoop 生态的所有计算引擎,因此它也已经成为开源数仓的事实标准。但它依然存在一些问题,比如虽然支持了 schema 的衍变,但是并不能通过 Time-Travel 的方式查询数据变化的历史快照,虽然有 ACID 新特性,但与 Hive 引擎的深度绑定导致无法很好地移植到其他引擎上。
另外, ACID 特性主要使用 rename 的方式做 isolation 隔离,在做文件 Compaction 及在存储分离等场景容易出现问题,比如 rename 过程在云存储上的性能问题。开源社区针对这些点衍化出了一些数据湖的格式,在不同程度上解决了 ACID 的问题。
数据湖格式拥有自己的元数据,同时会将自身的元数据注册到 Hive Metastore中。数据湖格式的元数据与 Hive 元数据形成补充,并没有脱离整体 Hive 元数据的视图,其他引擎依然可以通过 Hive Metastore 这一套元数据管理体系访问数据湖格式上的数据。
但 Hive Metastore 上并没有多租户的能力,同时受限于单个元数据库的能力瓶颈,有些公司会部署多套 Metastore,这很容易形成数据孤岛,所以也有一些公司提出了解决方案,比如 Waggle-Dance 及 Multiple Hive Metastore 方案等。 另外因为 HiveMetaStore 使用 Thrift 协议的接口,所以内部引擎和自研引擎对接 Hive Metastore 时,必须对接 Metastore 的协议以及依赖相应的客户端 ,这种依赖还是比较重的。
另外,Metastore 在设计元数据存储时高度去冗余,因此会带来一些 Metadata Fetch 的性能问题。