探秘百度数据工厂Pingo的多存储后端数据联合查询技术

作者介绍:张志宏,2013年加入百度大数据部,曾作为核心成员参与百度大数据平台的搭建。目前是百度数据工厂Pingo核心团队的技术负责人。

Pingo是来自百度的离线大数据集成开发平台,使用Spark作为计算引擎,深度整合了资源调度、文件系统、元数据管理、工作流管理、交互式Notebook查询等功能。能够对异地、异构的非结构化数据、结构化数据、计算资源进行统一接入、访问和鉴权,能够对各类企业级数据存储&计算环境进行统一管理。目前Pingo在百度内部、百度公有云、百度私有云三个场景同时提供服务。下面我们先分别介绍Alluxio和Pingo,然后从基于Alluxio的文件管理模块PFS的角度讲一些具体实现。

Alluxio简介

Alluxio 是源自UC Berkeley AMPLab的研究项目Tachyon。作为一个开源的数据编排系统,Alluxio以内存速度统一数据访问。在大数据生态系统中,Alluxio 位于数据驱动框架或应用(如 Apache Spark、Presto等)和各种持久化存储系统(如 Amazon S3、HDFS等)之间。 Alluxio 统一了存储在这些不同存储系统中的数据,为其上层数据驱动应用提供统一的客户端 API 和全局文件系统命名空间。

Pingo简介

当下大数据行业各种开源产品日臻完善,有些用户可能会想,为什么还需要一个商业产品呢?直接使用开源产品不是更加经济实惠吗?本文接下来顺着这个思路展开,顺便引出Pingo的架构。首先,当你面对的只是一个Word Count的问题的时候,下载一个开源的Spark就能完成任务,如果数据量比较大,部署一个Standalone的Spark集群也能解决问题,当然使用Yarn更专业一些。接下来常见的就是表/数据库这些结构化元数据管理需求,表/分区不多的时候,Spark内置的基于Derby的Metastore也能搞定,大不了再部署一个Hive Metastore。文件存储直接使用HDFS即可。对于例行任务的需求,那么可以引入AirFlow或者Azkaban。看到这么多开源组件很多用户尤其是企业当家人估计就发现其实没那么经济实惠了。相信这一整套组合能解决绝大多数公司的离线大数据处理问题,基于开源组件的整合性产品如CDH、HDP以及各大云厂商的EMR都提供类似的思路,另外这也是Pingo要提供的基础能力。但是实际问题往往更加复杂。比如很多公司不止拥有一套Meta服务,甚至版本都不一致,还有联合查询MySQL等其他“数仓”的需求。存储、计算资源方面也有类似的问题,甚至还可能存储在云上。认证、鉴权问题就更加复杂一些,虽然有开源的Apache Ranger可以考虑,但是它目前还没有集成AirFlow、Azkaban等工作流调度产品,不方便对接国内大多数公司基于SSO的账号认证系统,使用HiveMeta外挂模式很难实现Table代理文件系统权限。Pingo在提供离线大数据处理基础功能的同时,很好的解决了上述问题。如下面Pingo架构图中所示,基于Alluxio的PFS可以对接用户的各种文件存储方案,在Pingo中进行统一权限管理并且还不会暴露原始存储系统的认证信息。Table元数据模块提供了不同版本HiveMeta的对接方案,计算资源模块也可以对接用户自建的Yarn等。另外提供统一的账号认证接口可以对接用户自己的账号系统,并且在所有模块中使用该账号进行统一鉴权。
在这里插入图片描述

Alluxio在Pingo中的应用

在Pingo中,基于Alluxio实现了一个文件管理层服务PFS。使用Alluxio的挂载能力,PFS可以轻松对接各种分布式文件系统,比如HDFS、S3、BOS甚至Linux单机文件。Pingo中有一套完整的账号体系并且打通了PFS,由于挂载后Pingo不用再面对具体分布式文件系统接口的多样性,相当于可以代理挂载文件系统的权限,并且我们自定义了ACL权限管理机制。另外我们还实现了表权限代理文件系统权限的能力,以满足大型团队的数据平台管理需求。基于PFS我们还实现了基于文件的UDF管理机制。

挂载类型的扩展

BOS是百度公有云提供的对象存储服务,虽然BOS提供了类似AWS S3的接口,但是完全使用S3的协议挂载BOS到Alluxio还是有些问题。我们基于Alluxio的ObjectUnderFileSystem抽象类重新实现了一个BOSUnderFileSystem类,用来对接BOS中的文件。另外我们基于SSH协议中的SFTP功能实现了Linux文件系统的挂载能力,该功能已经合入到GitHub的alluxio-extensions代码库。

认证和权限

我们扩展了Alluxio中的认证机制,使用Pingo的UserService作为新的认证服务。我们为alluxio.security.authentication. AuthType新增了一个枚举值PINGO,在Master中我们实现了一个PingoAuthenticationProvider,用来把客户端发来的用户名和认证信息转发给Pingo的UserService完成认证。

基于大数据服务对文件权限的特殊需求,我们实现了一套新的ACL权限管理机制。我们发现无论是传统的Unix权限模型(Linux默认权限模型)还是POSIX ACL权限模型,都无法方便的解决这个问题。将一个文件夹/a/b/data以及文件夹下的所有子路径的读权限都授权给ua,ub两个用户,以后不管/a/b/data下新增多少子路径,用户ua和ub都可以自动获取到读权限。并且某一天想撤销ub对这个目录的读权限,只操作/a/b/data这一个目录的权限即可。有大数据处理经验的用户可能知道,一个文件夹下的文件可能是数以万计,甚至更多,现有权限系统无法有效解决这个问题。

PFS支持了Unix权限模型以及PFS独有的ACL权限模型(下面简称为ACL权限模型)。读和写鉴权规则主要是先检查路径上是否有ACL授权记录,有的话使用ACL模型鉴权,没有的话使用Unix权限模型鉴权;管理(比如Linux的chmod命令就需要管理权限)的鉴权规则是只要ACL和Unix任一模型通过鉴权即可整体通过鉴权。

ACL提供了READ,WRITE和MANAGE三种类型的权限,Unix权限模型中的执行(executable)权限合并到了读(READ)权限中。一个文件(夹)的ACL授权记录可以参考如下:

inherit: true/false
USER: uname_1 READ/WRITE/MANAGE
...
USER: uname_n READ/WRITE/MANAGE
GROUP: gname_1 READ/WRITE/MANAGE
...
GROUP: gname_n READ/WRITE/MANAGE

授权记录中的USER: uname_n READ/WRITE/MANAGE规则应该很容易理解,就是用来决定一个用户是否有读、写或者管理权限。而对于本节前面讲到的例子,这里通过inherit属性来解决,也就是说不像Unix权限模型那样鉴权只发生在要访问路径的最后一级,而是从路径的最后一级开始一直到根节点或者一个inherit开关为false的节点,检查每一级路径的授权记录中是否有满足条件的记录,存在则通过鉴权。

表权限代理文件权限

我们发现离线大数据数仓和MySQL之类的传统数仓有一个非常大的区别,就是表和文件都是可访问的。在MySQL中只能通过客户端或JDBC访问表,对表做各种查询,访问表实际存储数据的文件是没太大意义的,要重写MySQL的解析逻辑才能读出来。但是大数据系统中既可以通过SQL对表做查询,又可以直接通过MR或者Dataframe查询原始文件。这在权限管理方面就提出了新的需求。比如用户被授权访问一个表T1,那么管理员可能只希望用户通过SQL接口访问该表数据,不希望用户有T1表对应文件数据的访问权限,并且哪天管理员撤销该用户对T1的访问权限以后,该用户无论通过SQL还是文件系统都无权访问T1表对应的文件数据了。

借助上文中我们对Alluxio的改造,打通了PFS和Pingo的账号认证系统。参考下图我们就可以实现这一权限代理机制。建表时,TMeta Server中就保存表T1的创建者信息。当进行查询时,查询引擎中先完成用户对表T1的访问鉴权。鉴权通过后,查询引擎就能获得表T1对应的PFS路径和创建者信息以及认证信息,然后在PFS中其实认证的是T1的创建者。这样只要用户有表的访问权限就可以读取表的数据了。
在这里插入图片描述

基于文件的UDF管理

当前的UDF使用机制都是用户要先上传jar文件,然后在SQL中注册临时函数。该方案用起来稍显麻烦;没有版本机制导致升级复杂;也缺乏统一管理阻碍团队技术积累。

我们基于PFS实现了一个基于文件的UDF管理方案。如下图,UDF的创建者只需要把jar上传到PFS的指定目录,PFS-Worker(也就是Alluxio-Worker)就会自动提取出jar中的UDF信息并汇报给Master,并且还可以根据文件名自动记录不同的UDF版本。用户在执行SQL时根本不需要注册UDF,直接写函数名即可,当然也可以指定版本号。
在这里插入图片描述

其实这个机制是参考了Linux中动态链接库so文件的管理机制。这样的UDF用起来非常方便;也方便权限管理,使用PFS控制文件权限即可;也方便小团队沉淀知识。

Pingo总结

其实上面讲到的大部分是Pingo的基础能力,另外Pingo还提供了数据安全加密的解决方案;提供了基于SQL的流批一体解决方案,可以用SQL读写流式、普通表;提供了分布式读写百度开源OLAP数据库Doris的机制;另外我们的混合云方案也即将完成开发。还有更多细节请大家到百度公有云进行试用,另外Pingo提供私有化解决方案,欢迎各位客户上帝骚扰我们的销售团队。我们的产品也在快速迭代完善中,欢迎提出宝贵的建议、意见。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值