专栏首页数据猿Pingo的多存储后端数据联合查询技术

Pingo的多存储后端数据联合查询技术

来源:Alluxio(ID:Alluxio_China)

数据猿官网 | www.datayuan.cn

作者介绍:张志宏

Alluxio简介

Alluxio(见文末链接1)是源自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权限模型(见文末链接2)(Linux默认权限模型)还是POSIX ACL权限模型(见文末链接3),都无法方便的解决这个问题。将一个文件夹/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的机制;另外我们的混合云方案也即将完成开发。还有更多细节请大家到百度公有云(见文末链接4)进行试用。

参考链接:

链接1:

https://www.alluxio.io/

链接2:

https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=

edit&isNew=1&type=10&token=814338022&lang=zh_CN#Traditional_Unix_permissions

链接3:

https://www.usenix.org/legacy/publications/library/proceedings/usenix03/tech/freenix03/full_papers/gruenbacher/gruenbacher_html/main.html

链接4:

https://cloud.baidu.com/product/pingo.html

·end·

—如果喜欢,快分享给你的朋友们吧—

本文分享自微信公众号 - 数据猿(datayuancn)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 大数据投融资周报(7月31日——8月4日,共11起)

    本周在大数据领域总共发生11起投融资事件,其中涉及了8家中国企业、2家以色列企业以及1家美国企业,这些企业主要涉及的领域包括虚拟现实、云计算、人工智能等多个领域...

    数据猿
  • 大数据投融资周报(5月13日——5月19日,共13起)

    作者 | abby 本周在大数据领域总共发生13起投融资事件,其中涉及了7家中国企业、5家美国企业、1家英国企业,这些企业主要涉及的领域包括虚拟现实、游戏、市场...

    数据猿
  • 大数据投融资周报(7月17日——7月21日,共14起)

    本周在大数据领域总共发生14起投融资事件,其中涉及了5家中国企业、6家美国企业、1家加拿大企业、1家英国企业以及1家以色列企业,这些企业主要涉及的领域包括金融、...

    数据猿
  • MySQL用户管理:添加用户、授权、删除用户

    添加用户 以root用户登录数据库,运行以下命令: create user zhangsan identified by 'zhangsan'; 上面的命令创...

    陈树义
  • Tweet-w1705

    例如现在有四个角色,分别为:读者,作者,编辑和管理员。有四个不同的权限使用四位的二进制数表示:

    青南
  • Waymo为防无人车撞伤行人又开新脑洞:柔性汽车外壳

    陈桦 编译自 TheVerge 量子位 报道 | 公众号 QbitAI ? △ 这个车已经进博物馆了,这里只是示意图 可能是为了让人民群众放心,现在的自动驾驶程...

    量子位
  • 每天 3 分钟,小闫带你学 Python(二十五)

    世界上的知识分为下列几种:知道自己知道的,知道自己不知道的,不知道自己知道的,不知道自己不知道的。只要能被想象到的,终有实现的方法。

    小闫同学啊
  • 高性能网站架构方案(一) ——MySQL提升

    高性能网站架构方案(一)——MySQL提升 原创内容,转载请注明来源,谢谢) 一、Mysql响应速度提升——HandlerSocket 1、概述 ...

    用户1327360
  • 艾瑞咨询发布《中国虚拟现实(VR)行业研究报告—市场数据篇》

    VRPinea
  • OpenAuth.Net.landv分支之旅开始制作CRM系统

    landv

扫码关注云+社区

领取腾讯云代金券