Facebook的数据库查询引擎Presto在美团的应用:配合Hadoop集群来优化大数据的处理
2020-12-30 11:23:53 阅读(178) 评论(0)
在少量大型Hadop/HDFS集群中存储Facebook数据仓库。Hive是Facebook几年前专门为Hadoop设计的数据仓库工具。过去,Facebook的科学家和分析师一直依靠Hive进行数据分析。但是Hive使用MapReduce作为底层计算框架,是专门为批处理设计的。然而,随着数据的增加,使用Hive进行简单的数据查询可能需要几分钟到几个小时,这显然不能满足交互式查询的需要。Facebook还研究了其他比Hive更快的工具,但要么功能有限,要么太简单,无法操作Facebook庞大的数据仓库。一些外部项目在2012年开始试用是不合适的,他们决定自己开发,这就是Presto。该项目于2012年秋季开始开发,目前已在1000多名Facebook员工中使用,运行了3万多个查询,每日数据为1PB级。Facebook称Presto的性能是Hive的10倍多。Faceboook于2013年正式宣布开源Presto。本文首先介绍了Presto从用户提交SQL到执行的过程,然后尝试分析总结Presto实现实时查询的原理,最后介绍了Presto在美团的使用情况。Presto架构Presto查询引擎是Master-Slave架构,由Coordinator节点、DiscoveryServer节点、多个Worker节点组成,DiscoveryServer通常嵌入Cordinator节点。Coordinator负责分析SQL语句,生成执行计划,将执行任务分发给Worker节点执行。Worker节点负责实际执行查询任务。Worker节点启动后,向DiscoveryServer服务注册,Cordinator从DiscoveryServer获得Worker节点,可以正常工作。如果配置了Hiveconector,则需要配置Hivemetastore服务,为Presto提供Hive元信息,Worker节点与HDFS互动读取数据。由于Presto是一个交互式查询引擎,我们最关心的是Presto实现低延迟查询的原理。我认为这主要是以下几个关键点,当然,还有一些传统的SQL优化原理,这里不介绍。为了介绍上述几点,首先介绍Presto执行查询的过程,提交查询用户使用PrestoCli提交查询句后,Cli使用HTTP协议与Cordinator通信,收到查询请求后,Coordinator调用SqlParser解析SQL语句获取Statement对象,并将Statement封装成QueryStarter对象,放入线程池中等待执行。像Hive一样,SQL编译过程Presto使用Antlr编写SQL语法,语法规则定义为Statementto.g和StatementBuilder.g两个文件中。如下图所示,从SQL编译到最终的物理执行计划大约分为五个部分,最终生成在每个Worker节点上运行的LocalexecutionPlan。这里不详细介绍SQL分析为逻辑执行计划的过程,通过SQL语句了解查询计划生成后的计算过程。样例SQL:复制代码如下:selectc11.rank,count(*)fromdim.cityc1joindim.cityc2onc1.id=c2.idwherec1.id>10groupbyc11.ranklimit100;上述SQL语句生成的逻辑执行计划Plan如上图所示。那么,Presto是如何将上述逻辑执行计划拆分,以更高的并行性来执行该计划的呢?让我们来看看物理执行计划。那么,Presto是如何将上述逻辑执行计划拆分并以更高的平行度执行该计划的呢?让我们来看看物理执行计划。物理执行计划逻辑执行计划图中的虚线是Presto对逻辑执行计划的切分点。逻辑计划Plan生成的Subplan分为四个部分,每个Subplan将提交到一个或多个Worker节点。Subplan有几个重要属性:plandistribution、outputPartitioning、partitionBy属性。Plandistribution表示查询Stage的分发方式。逻辑执行计划图中的四个Subplan有三种不同的Plandistribution方式:Surce表示Subplan是数据源,Source类型的任务将根据数据源大小确定分配多少个节点;Fixed表示,Subplan将分配固定的节点进行执行(Config配置中的query).initial-hash-partitions参数配置,默认为8);None表示,SubPlan只分配到一个节点进行执行。Subplan1和Subplan0Plandistribution在以下执行计划中=Source,这两个SubPlan都是提供数据源的节点,Subplan1所有节点的读取数据都会发送到Subplan0的每个节点;Subplan2分配8个节点进行最终聚合操作;Subplan3负责输出最终计算的数据。Outputpartioning属性只有两个值HASH和NONE,表示Subplan的输出是否根据partionby的key值对数据进行Shuffle。在下面的执行计划中,只有Subplan0的Outputpartioning=HASH,因此,Subplan2收到的数据是按照rank字段Partition后的数据。PrestoSQL的执行过程完全基于内存并行计算查询,如下图所示,Cli通过HTTP协议提交SQL查询后,查询请求包装成SqlQueryExecution对象交给cordinator的SqlQueryExecution线程池,执行每个SqlQueryExecution线程(图中Q-X线程)启动后,对查询请求的SQL进行语法分析和优化,最终生成多个Stage的SqlStagecution任务。每个SqlStageexecution任务仍然交给相同的线程池执行每个SqlStageexecution线程(图中S-X线程)启动后,每个Stage任务根据Plandistribution属性构建一个或多个Remotetask,通过HTTP协议分配给远端Worker节点执行Worker节点接收Remotetask请求后,启动Sqltaskexecution线程(图中T-X线程),将此任务的每个Split包装成PrioritizedSplitrunner任务(图中SritioritizedSplitrner)-X)Taskexecutor#executor线程池交给Worker节点执行上述执行计划的实际执行效果如下图所示。通过HTTP协议调用Worker节点的/v1/task接口,Cordinator将执行计划分配给所有Worker节点(图中蓝色箭头)SubPlan1的每个节点读取一个Split数据,过滤后将数据分发给每个Subplan0节点进行Join操作和Partialagr操作。Subplan1的每个节点计算完成后,根据GroupbyKey的Hash值将数据分发给不同的Subplan2节点。计算完成后,将数据分发给Subplan3节点Subplan3节点计算完成后,通知Cordinator结束查询。Subplan1和Subplan0都是Source节点,并将数据发送到Cordinator源数据并行读取。事实上,他们读取HDFS文件数据的方式是调用HDFSInputSplitAPI,然后每个InputSplit分配一个Worker节点执行,每个Worker节点分配的InputSplit数量上限为参数可配置,Config中的query.max-pending-splits-per-默认为100的node参数配置。分布式Hash聚合的执行计划将在Subplan0中进行Partial聚合计算,计算每个Worker节点读取的部分数据的部分聚合结果,然后Subplan0的输出将根据Groupby字段的Hash值分配不同的计算节点,最后,Subplan3合并所有结果并输出流水线数据模型Presto中处理的最小数据单元是Page对象,如下图所示。一个Page对象包含多个Block对象,每个Block对象是一个字节数组,存储一个字段。一个Page对象包含多个Block对象,每个Block对象是一个字节数组,存储一个字段的几行。多个Block的横切线是真实的线数据。Page最大1MB,最多16*1024行数据。下图是Worker节点内部的计算流程图,左边是任务执行流程图。Worker节点将最细粒度的任务封装成PrioritizedSplitRunner对象,并将其放入pendingsplit优先队列中。每个Worker节点启动一定数量的线程计算,线程数task.shard.max-threads=availableProcessors()*4,配置在config中。每个免费线程从队列中取出一个PrioritizedSplitrunner对象执行。如果执行完成一个周期,超过最大执行时间1秒,则判断任务是否完成。如果完成,从allsplits队列中删除。如果没有,则将其放回pendingSplits队列中。每个任务的执行过程如下图右侧,依次遍历所有Operator,并尝试从最后一个Operator中获取一个Page对象。如果获得的Page不是空的,则交给下一个Operator执行。节点间流水线计算下图为Exchangeoperator执行流程图,Exchangeoperator为每个Split启动Httpagebuferclient对象,主动向上一个Stageworker节点拉数据,最小数据单位也是Page对象,在选择Source任务计算节点时,将数据放入Pages队列中本地化计算Presto,对于每个Split,根据以下策略,选择一些mincandidates,优先选择与Split相同的hostworker节点。如果节点不够,优先选择与Split相同的rackworker节点。如果节点不够,随机选择其他rack节点。对于所有candidate节点,选择assignedsplits最少的节点。动态编译执行计划Presto将ScanfilterandProjectoperator和FilterandProjectoperator动态编译成Bytecode,并将其交给JIT编译成native代码。Presto还使用了GoogleGuava提供的LoadingCache缓存生成的ByteCode。Presto还使用了由谷歌Guava提供的LoadingCache缓存生成的ByteCode。在上述两个代码片段中,第一段是动态编译前的代码,第二段是动态编译生成的ByteCode反编译后恢复的优化代码。我们可以看到,这里采用了循环优化方法。循环开发最常用于减少循环开支,并为具有多个功能单元的处理器提供指令级并行。也有利于指令装配线的调度。使用内存和数据结构使用Slice进行内存操作,Slice使用Unsafe#copyMemory实现高效的内存复制,Slice仓库参考:https://github.com/airlift/sliceFacebook工程师在另一篇介绍orcfile优化的文章中还提到,使用slice将orcfile的写作性能提高20%~30%,参考:https://code.facebook.com/posts/229861827208629/scaling-the-facebook-data-warehouse-to-300-pb为了加快avgg、countdistinct、聚合函数的查询速度,如percentile,Presto团队与BlinkDB作者之一Sameragarwal合作,引入了一些类似的查询函数aprox_avg、approx_distinct、approx_percentile。approx_distinct使用Hyperloglogllloglogllistinct
推荐阅读
- 2021免费客服系统开源排行前5名
随着互联网的发展,市面上已经有了越来越多的电商,所以客服系统就越来越重要了,好的客服会给客户起很大的作用,那么选择免费客服系统开源呢?今天小编来给大家整理2021免费客服系统开源排行前5名,大家继续往下看。 1、春松客服免费客服系统开源 春…查看详情
- 亿客CRM,可自由配置的CRM
在种类繁多的CRM软件中,要挑选出最适用、性价比最高的一款实属不易。加之中小企业正处在发展阶段,随时可能产生新的功能需求,因此灵活性成为企业对CRM软件提出的新要求。在这方面,小万推荐亿客CRM。亿客CRM提倡企业个性化,其系统功能模块齐全…查看详情
- 绿色无毒的电脑杀毒软件有哪些?
电脑时代的到来,加上信息的日益复杂化,病毒的入侵基友可能会导致电脑文件的丢失以及个人信息泄密,那么绿色无毒的电脑杀毒软件有哪些? 1.Windows安全中心 Windows10系统其实按道理来讲根本就不需要安装安全软件,Windows10自…查看详情
- 2021云erp系统品牌排行榜
一套好的ERP管理系统是协助企业做好内控与提高管理效率的关键,作为近十年兴起的基于云服务器端部署的云erp系统,具有高性能、功能集成、安全可靠等优势特点,本文梳理了2021云erp系统品牌排行榜供大家参考。 1. 金蝶云erp系统 金蝶软件…查看详情
- 如何建设一个网站,用户量和功能需求不大的那种!
想要建站的朋友想必都看了很多关于建站的文章,查阅了大量相关信息,有没有越看越不知道从哪里着手,越看越复杂,越看越不知道如何建设一个网站。原因主要在于,你想要做一个高大上的网站,但一开始就把这件事情当成了一件很庞大的项目来进行,越重视越不敢着…查看详情
- 使用云邮箱有什么优势?
随着云计算技术的高速发展,云服务的应用越来越广泛。邮箱作为人们日常沟通的一个重要工具,也开始向云端发展。云邮箱相比传统邮箱具有很多优势,下面将从多个方面详细描述其优势。 1.数据安全可靠性高 云邮箱将用户的数据存放在云端服务器中,可…查看详情
- crm哪个好用?介绍一些现在较多企业在使用的crm
crm客户管理系统可以直接帮助企业减少销售的成本,提高市场竞争力,提高企业业绩,如何你现在正处于选择crm系统的过程中,不是很了解市场上的crm哪个好用,那下面小万就为你推荐一些。图片来源于网络 Crm哪个好用?好用的crm不是功能越多越好…查看详情
- 3款超实用压缩软件app,不再为内存小而担忧
当我们在传输文件的时候,有些文件需要解压出来之后才可以打开,所以,我们必须要知道压缩软件app有哪些,只有用软件才可以把传送的文档解压出来,所以这个大家一定要知道。 1、es文件浏览器app 是一款备受使用者喜欢的手机文件管…查看详情
- 企业如何运用零售crm系统管理客户
伴随着我国零售市场的发展,百货公司和连锁超市规模在全国迅速扩张,行业竞争现象日趋激烈。利用零售crm系统,帮助零售业更好地利用销售追踪手段.更精确的销售预测和实时可见的销售手段。零售业的crm系统帮助中小型企业快速高效地启动和运作企业。有了…查看详情
- 企业网站制作方案的流程有哪些?
企业网站制作方案是将企业网站制作成为一个优质网站。一个好网站建设不仅是企业的形象工程,更是企业运营在互联网及移动互联网时代获取、激活、服务客户和提升客户体验的最低成本和最优选择。企业网站制作方案的流程有哪些?具体的流程和步骤如下: 一、明确…查看详情
- 淘宝用户钻石等级有什么用?
淘宝店铺的五星和钻石哪个好?淘宝的钻和星,这是对淘宝荣誉的描述。钻的比星的好,说明店铺经营时间长,卖的东西多,更容易让人信任。 淘宝将消费者和企业分为四个阶段。每个阶段分为五个等级。四个阶段是心形、钻石和两种不同颜色的皇冠。每次在淘宝,网…查看详情
- 网站建设有哪些注意事项?这几点你得了解。
企业网站,对于许多朋友来说,并不会感到特别的陌生,特别是在随着社会的不断发展,企业网站的建立也是受到了越来越多企业的关注,而且小编网发现也有许多企业发现这样的一个问题,那么就是企业网站运营并没有达到自己想要的效果。那么,企业网站建设需要注意…查看详情
- 餐饮管理系统有哪些比较好用
随着餐饮行业的迅速发展,管理一家餐厅或连锁店变得越来越复杂和繁琐。为了提高效率、降低成本,并提供更好的顾客体验,许多餐饮的企业开始选择餐饮管理系统。下面将介绍几款被广泛认可和使用的优秀餐饮管理系统。 1.ToastToast是一款功能强大且…查看详情
- 苹果充电器原装和非原装什么区别?如何查询真伪?
苹果充电器是用于给苹果设备充电的电源适配器。市场上有很多种苹果充电器,包括原装的和非原装的。那么,原装和非原装的苹果充电器有什么区别?如何查询苹果充电器是否为正品?接下来,我将详细介绍这些问题。 1.原装和非原装的苹果充电器有什么区别…查看详情
- 美团跻身第三大中国互联网上市企业,离不开这两点
10月,美团上市一年爆出市值高达654亿美金的消息,成为股市市值仅次于阿里巴巴和腾讯的第三大中国互联网上市企业,许多人不禁感叹:BAT要变成ATM了。谈及互联网企业,相信大家脑海里首先出现的一定是阿里、百度、腾讯、京东、美团、拼多多等知名企…查看详情
猜你喜欢
最新文章

扫码二维码
立即领取《千元实战营销秘籍》
还可免费试用营销管理系统
*如有疑问,请随时拨打免费咨询热线:400-0033-166
服务时间:8:30-18:00
软件企业
认定号:川RQ-2018-0216
高新技术企业
认定号:GR201951001121

关注微信公众号
和10万中小企业共同成长

扫码下载APP
享全方位服务一触即达
Copyright © 2004-2022 万商云集(成都)科技股份有限公司 版权所有
蜀ICP备12001963号-2
川公网安备 51010402000322号

快速找产品
找一找哪款产品适合您?
咨询热线:400-0033-166
-


-
电话沟通
在线咨询
获取方案
下载APP
官方微信
扫码下载APP
全方位服务一触即达
关注万商云集
和10万中小企共成长
TOP

企业首选的数字选用平台






