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

作者介绍:张志宏,2013年加入百度大数据部,曾作为核心成员参与百度大数据平台的搭建。目前是百度数据工厂Pingo核心团队的技术负责人。
Pingo是来自百度的离线大数据集成开发平台,使用Spark作为计算引擎,深度整合了资源调度、文件系统、元数据管理、工作流管理、交互式Notebook查询等功能。能够对异地、异构的非结构化数据、结构化数据、计算资源进行统一接入、访问和鉴权,能够对各类企业级数据存储&计算环境进行统一管理。目前Pingo在百度内部、百度公有云、百度私有云三个场景同时提供服务。下面我们先分别介绍Alluxio和Pingo,然后从基于Alluxio的文件管理模块PFS的角度讲一些具体实现。
常用链接
- Alluxio项目官网
- Alluxio在各大厂用例
- 关注Alluxio微信公众号:Alluxio_China
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的机制;另外我们的混合云方案也即将完成开发。还有更多细节请大家到百度公有云(https://cloud.baidu.com/product/pingo.html)进行试用,另外Pingo提供私有化解决方案,欢迎各位客户上帝骚扰我们的销售团队。我们的产品也在快速迭代完善中,欢迎提出宝贵的建议、意见。
相关文章:

JavaScript文件中调用AngularJS内部方法或改变$scope变量
需要在其他JavaScript文件中调用AngularJS内部方法或改变$scope变量,同时还要保持双向数据绑定; 首先获取AngularJS application: 方法一:通过controller来获取app var appElement document.querySelector([ng-controllermainCon…

web类协议脚本-飞机订票系统示例
以下是LR自带的飞机订票系统的Demo,希望能帮助大家。 Action() {int iRand;int iTmp;char *strTmpA;char *strTmpB;char *strTmpC;char *position;if ((strTmpA (char *)malloc(100 * sizeof(char))) NULL) { lr_output_message ("Insufficient memory avail…

ACCEPT()和ACCEPT4()
ACCEPT章节:Linux 程序员手册 (2) 更新:2010-09-10到 易美翻译 翻译名字accept - 通过套接口接受一个连接 概要 #include Esys/types.h> /* 参看 “注意小节” */ #include Esys/socket.h>int accept(int sockfd, struct sockaddr *addr, socklen…

没有提示_华为手机发出莫名的提示音,打开什么也没有?原来是它们在作怪
不知道你们有没有遇到过这样的情况,在使用手机的过程中会出现一个非常奇怪的现象:当你听到手机发出声音,打开手机却发现什么通知也没有?这一度让我感到很困扰,本着“打破砂锅问到底”的精神,终于让我找到了…

近段时间佛我就偶尔无
jo建瓯市金佛玩手机欧力紧凑度 我株型紧凑我阿九倨傲四局李嘉诚转载于:https://juejin.im/post/5b8e5263e51d4538e2278c9b

php内核探索方法与资源
PHP内核探索 TIPI深入理解PHP内核 风雪之隅PHP源码分析 《php扩展开发及内核应用》 百度XLQ Gods blog codinglabsPHP内核探索:从SAPI接口开始PHP内核探索:一次请求的开始与结束PHP内核探索:一次请求生命周期PHP内核探索:单进程SA…

feign调用走不走网关全局拦截_feign服务端出异常客户端处理的方法
在使用feign进行远程方法调用时,如果远程服务端方法出现异常,客户端有时需要捕获,并且把异常信息返回给前端,而如果在开启熔断之后,这个异常会被消化,所以说,如果希望拿到服务端异常,…

配置Cesium编译环境
1、安装node.js https://nodejs.org/en/ 2、配置node.js 在node.js安装目录下新建node_global、node_cache两个文件夹,并把node_global添加到环境变量 eg.D:\app\nodejs npm config set prefix D:\app\nodejs\node_global npm config set cache D:\app\nodejs\node_…

迷你世界电锯机器人_迷你世界:三分钟制作超简单飞翔石像机器人报道!
更多游戏资讯,请点击上方蓝字查询!哈喽,大家好,还记得我之前分享的超简单的石像机器人吗?不记得了吗?我再帮助大家回忆回忆,之前研游酱分享的石像机器人总共是分两篇文章,一个是不会…

J2EE 第二阶段项目之编写代码(四)
我的任务就是项目统计。 1 效益统计 1 教育效益统计表 (教育效益统计表,增,改,查看,查) 2 农牧林效益统计表 (农牧林效益统计表,增,改,查看,查) 3…

PHP安装扩展mcrypt以及相关依赖项 【PHP安装PECL扩展的方法】
一:Mcrypt简介 Mcrypt是PHP的一个扩展,完成了常用加密算法的封装。其实该扩展是对mcrypt标准类库的封装,mcrypt完成了相当多的常用加密算法,如DES, TripleDES, Blowfish (default), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA…

Javascript到PHP加密通讯的简单实现
互联网上大多数网站,用户的数据都是以明文形式直接提交到后端CGI,服务器之间的访问也大都是明文传输,这样可被一些别有用心之人通过一些手段监听到。对安全性要求较高的网站,比如银行和大型企业等都会使用HTTPS对通讯过程进行加密…

MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限
2019独角兽企业重金招聘Python工程师标准>>> 1.新建用户 //登录MYSQL >mysql -u root -p >密码 //创建用户 mysql> insert into mysql.user(Host,User,Password) values(‘localhost’,jeecn’,pa…

uml具有多种视图_UML建模与架构文档化
UML(统一建模语言) 是用元模型描述的,元模型是4层元模型体系结构模式中的一层。此模式的其他层次分别是元-元模型层、模型层和用户对象层。在原模型层,UML元模型 又被分解为三个子逻辑包:基础包(核心、扩展机制和数据模型)、行为元素包(描述模…

insert into与insert ignore以及replace into的区别
insert ignore表示,如果表中已经存在相同的记录,则忽略当前新数据; INSERT INTO有无数据都插入,如果主键则不插入; REPLACE INTO 如果是主键插入则会替换以前的数据; 例 1.insert语句一次可以插入多组值,每组值用一对…

德国SNS交友/视频网站Poppen.de的技术架构分享
Poppen.de是一个德国的 交友/ 聊天/ 视频 的SNS网站, 部分内容NSFW,网站采用了很多我们熟悉的技术,像Nginx ,MySQL,CouchDB,Erlang,Memcached的,RabbitMQ(消息服务器),采用了Graphit…

对数函数定义域和值域_呆哥数学每日一题 —— 复合函数值域
如果想要获取往期每日一题电子版,可以加我微信:daigemath366,备注:知乎 每日一题呆哥解析:这是一个函数和复合函数的综合问题首先我们先把原函数的值域求出来先直接求导:导数不容易判断单调性,我…

一些常用工具地址,随时更新中~
2019独角兽企业重金招聘Python工程师标准>>> 一些常用工具地址的备份: 一款比较全的先到化界面编辑器Neditor:https://gitee.com/notadd/neditor 前端ui组件库,类似element ui。iView:https://www.iviewui.com &#…

UNIX环境编程
linux函数分析查询工具1.优先推荐linux 中man命令2.一个不错的中文Linux手册:http://cpp.ezbty.org/manpage3.在线查英文Man手册:http://www.kernel.org/doc/man-pages/http://man7.org/linux/man-pages/dir_all_alphabetic.htmlhttp://linux.about.com/…

WCF优化的几个常规思路
前几天用WCF做项目时发现了一个效率问题,由于系统对效率要求较高,困扰了很长时间终于将问题解决了,写下来为以后的兄弟们参考,第一次写博客有不准确的地方还望同行们多喷多指点,先行谢过啦... 问题场景是这样的&#x…

使复选框选中_勾选复选框单元格变色,自动计数,在Excel中是如何实现的?
Excel中,我们经常会使用复选框来打勾打叉,这是复选框最基本的功能,相信很多小伙伴都会,但今天我跟大家分享的是复选框的其他操作技巧,勾选复选框变色,统计人数。下图中,我们要利用复选框是否打钩…
[短文速读] 重载有暗坑,JVM是如何执行方法的
前言 这将是一个系列文章。原因是自己写了很多文章,也看了很多文章。从最开始的仅仅充当学习笔记,到现在认认真真去写文章去分享。中间发现了很多事情,其中最大发现是:收藏不看!总是想着先收藏以后有时间再看ÿ…

一笔画问题【数据结构-图论】
回家路上听到2个人在说:田字怎么一笔写成,并且笔划不重复。 田 我回家想了许久,觉得无论如何走正常的途径肯定是不行的,投机取巧脑筋急转弯的我不讨论。 那么是否可以找到数学定理? 其实就是欧拉七桥问题:1…

解析并符号 读取dll_Spring IOC容器之XmlBeanFactory启动流程分析和源码解析
一. 前言Spring容器主要分为两类BeanFactory和ApplicationContext,后者是基于前者的功能扩展,也就是一个基础容器和一个高级容器的区别。本篇就以BeanFactory基础容器接口的默认实现类XmlBeanFactory启动流程分析来入门Spring源码的学习。二. 概念要点1. 概念定义Be…

安装多个gcc
删除gcc #yum remove gcc 安装最新的 #yum install gcc 查找gcc源 可先通过“yum list compat-gcc*”查看版本,然后再利用“yum install compat-gccXXX”安装 #yum list compat-gcc* #sudo yum install compat-gcc-34.i686 查看gcc版本 #gcc -v #gcc34 -v参考&…

JAVA - HashMap和HashTable
1. HashMap 1) hashmap的数据结构 Hashmap本质就是一个数组,只是当key值重复时,使用链表的方式来存储重复的key值(拉链法),注意:链表中存放的仍然是key值。如下图示: 当我们往hashmap中put元素…

empress和queen区别_queen与empress
(1)「queen」和「empress」不仅可以用来指称「king」和「emperor」的妻子,也能指代握有正式权力的女性君主。(2) 英国的君主(queen或king)之所以曾经有过empress或emperor的头衔,是因为英国曾统治过印度次大陆, 他们曾是印度的empress或emperor。如今&am…

在UIWindow上加类似于“回到顶部”的按钮
在公司上个版本的开发中遇到了一个UI布局的小问题: 某个页面需要增加一个分享按钮,但是该页面是二级页面,导航栏右边也已经放置了2个button。 起初和老大谈论这个问题的时候想到的方法是导航栏右边加三个button得了~但是一回想,这…

修改mysql 默认字符集 , 默认引擎
cd /var/lib/mysql/gamell vim db.optdefault-character-setutf8default-collationutf8_general_ciwq service mysqld restart或者service mysqld reload默认字符集修改完毕vim /etc/my.cnf[mysqld]datadir/var/lib/mysqlsocket/var/lib/mysql/mysql.sockusermysqldefault-stor…

bzoj2724: [Violet 6]蒲公英(分块)
传送门 md调了一个晚上最后发现竟然是空间开小了……明明算出来够的…… 讲真其实我以前不太瞧得起分块,觉得这种基于暴力的数据结构一点美感都没有。然而今天做了这道分块的题才发现分块的暴力之美(如果我空间没有开小就更美了) 我们先将整个…