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

article/2025/9/19 6:30:51

作者介绍:张志宏,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提供私有化解决方案,欢迎各位客户上帝骚扰我们的销售团队。我们的产品也在快速迭代完善中,欢迎提出宝贵的建议、意见。


http://chatgpt.dhexx.cn/article/4QOfPeTy.shtml

相关文章

Tachyon与Ignite系统对比

1. Alluxio(原Tachyon)内存文件系统 1.1 系统概述 Alluxio(原Tachyon)是以内存为中心(memory-centric)的虚拟的分布式存储系统,拥有高性能和容错能力,能够为集群框架(如Spark、MapReduce)提供可靠的内存级…

百度案例:利用Alluxio实现安全的即插即用分布式文件系统

全文共3361字,预计学习时长7分钟 本文介绍了百度如何依靠开源项目Alluxio,在一个企业大数据分析解决项目Pingo中创建了一个安全、模块化和可扩展的分布式文件系统服务。 在这篇文章中,你将学习如何依靠Alluxio来实现一个统一的分布式文件系统服务,以及如何在Alluxio之上添…

如何通过API调用alluxio 文件系统

如何通过API调用alluxio 文件系统 一般来说,不论从spark,hfds等等大数据分布式框架,甚至使用公有云api,来说,与集群进行交互不外乎以下这些套路: 设置configuration(有很重要的主节点host&…

office产品密钥如何找回

明明自己有正版office产品密钥却因为时间太久种种原因找不到了,登录微软账户查看信息也没有,怎么办?? 不要着急,只要你还记得你当时激活office的微软账号和密码,可以登录微软账户,follow me&am…

qq恢复官方网站服务器繁忙,qq恢复官方网站

删除好友,又后悔了!!?? 想把好友找回来? 世上没有后悔药,但是系统是还是人性化的, 所以,QQ官方给广大用户提供了好友找回功能。登录qq以恢复官方网络以恢复朋友操作。 在qq恢复官方网…

手机计算机怎么恢复出厂设置密码,如何找回手机锁屏密码?

原标题:如何找回手机锁屏密码? 世界上最遥远的距离不是我站在你面前你却不知道我爱你,而是手机明明在手上偏偏忘了锁屏密码! 我们总是会有犯傻的时候,比如突然想到一个数字觉得还不错,于是想着给手机改个密…

Vue + element + Springboot 通过邮箱找回密码

Vue element Springboot 通过邮箱找回密码 需求分析一、导入二、流程分析 详细设计一、前端界面设计1. 登录界面2. 重置密码界面 二、后端代码设计1. JavaMail配置2. QQ邮箱开启STMP授权3. 配置applicaiton.yml文件4. 新建文件夹5. 邮件配置:6. User相关类&#xf…

5年前带留言的公众号还可以找回,让我来教你该怎么做

今天注定是很神奇的一天,因为今天我居然找回了5年前注册的公众号,一个带留言功能的公众号。 了解公众号的人可能都知道,腾讯在2018年3月宣布暂停新注册公众号的留言功能,这之后注册的公众号都不具备留言功能。 这成了很多号主运营…

怎么找回丢失的手机?

手机定位这个功能,每个智能手机都必备的。但是如果手机不小心丢失了,能通过手机本身懂的定位功能,找回自己的手机吗?其实大部分智能手机,都能通过定位功能找回手机的。但是使用查找手机定位必须已打开查找手机功能且丢…

Word文档恢复,2大方案教你找回没有保存或者被删除的数据

我们经常会使用到Word文档来记录各种东西,有时候Word文档输入数据到一半,就不小心关闭,却没有保存。或者在电脑清理的时候,不小心把重要的Word文档数据删除了,又或者文档已经删除了一段时间。 Word文档能恢复吗&#…

计算机用户删除文件找回,电脑上删除的文件如何找回 业内人士分享小技巧

电脑上删除的文件如何找回?众所周知,使用数据恢复软件可以找回被删除的文件,但是并非所有删除的文件都可以顺利找回。想知道如何最大限度地确保完整恢复删除的文件吗?小编接下来就将为大家分享关于如何完整找回误删除文件的方法。 如何找回被…

手机被偷完整找回方案

近日看到一些有关于手机失窃的案例,回想起自己身边的同学和朋友也有被偷手机的经历。想着记录一下,提供一些防御方法。之前学Android开发时也有探究过定位原理,今天正好放到文章一起。 丢失场景 场景一:遗落在餐厅或饭店。这种情况…

Android手机怎么找回微信好友,安卓手机微信好友删了怎么找回 恢复误删好友

安卓手机微信好友删了怎么找回?微信误删的好友怎么恢复回来呢?有人说我删了很久了,现在后混了想要把删除的好友再加回来,怎样操作才能成功恢复回来呢?根据数据恢复原理表明,就算是专业的数据恢复软件&#…

找回你 C 盘丢失的空间(SpaceSniffer)

什么鬼!C 盘空间满了!我分了 120GB 啊!!!是不是要删软件删游戏,是不是要重装系统? 尤其是程序员,那么多开发环境(Visual Studio 不说话 ?)空间占用那叫一个大…

如何找回office秘钥

我的office秘钥前段时间遗失并找回,很简单就几步,希望我的方法可以帮助大家。 1.登录微软官网。 2.点击登录你以前激活过的微软账户。 3.点击如下图蓝色链接文字, 进入如下界面后,点击服务与订阅。 4.如图,点击查看…

服务器里照片如何找回,怎么样恢复删除的照片?教你一个简单办法,一键轻松找回!...

原标题:怎么样恢复删除的照片?教你一个简单办法,一键轻松找回! 最近看到有不少网友疑惑自己删除的照片怎么恢复,经常使用手机拍照的小伙伴可能更容易遇到这种情况,今天就给大家分享几种恢复的方法&#xff…

电脑录音文件删除怎么找回——告诉你3个专业方法

录音文件通常是指存储声音内容的文件,比较常见的录音文件格式通常有mp3、wav、wma、aiff等。而在电脑中删除文件是很频繁的操作,那么电脑中删除的录音文件怎样恢复呢?下面分享专业恢复电脑上删除的录音文件方法,一起来看看吧&…

手机html丢失,手机丢了号码没了 攻略教你一分钟全找回

某天,小编正在办公室里认真地工作(领导你看到了吗?)突然,企鹅“滴滴滴”地响了起来,小编漫不经心地把鼠标移上去,突然心跳加速,居然是女神在找我! “你……你在吗?” (怎么办怎么办&…

手把手教你找回学信网原来的登记手机号码

问题 在更改学信网手机号码时,如果忘了原密码,该怎么办?又如何找回学信网原来登记的手机号码?   最近帮我老婆登陆学信网查询验证学历时,发现她的登记手机号码是读大学时候的,早就换了,现在已…

java: Iterator的使用

本文以ListIterator为例,其他的Iterator使用基本相同。 注意,Iterator不指向任何元素,它指向的是元素的间隔。 如图:方块内是List中的元素,圆圈内是Iterator。 iterator的cursor标识了它的位置。 一、获取ListItera…