presto领读 查询引擎翻译

原文链接:https://prestodb.io/docs/current/overview/concepts.html#data-sources

 

最近在看presto-分布式SQL查询引擎的代码,使用翻译工具翻译了一版,有些概念比较难以理解,整理如下:

一、概览

 

虽然很容易理解语句和查询,但作为最终用户,您应该熟悉一些概念,例如stage和split,以充分利用Presto执行有效的查询。作为一个Presto管理员或一个Presto贡献者,您应该理解Presto的阶段映

射到任务的概念,以及任务如何包含一组处理数据的驱动程序。

这一节为整个Presto中引用的核心概念提供了一个可靠的定义,这些部分按照通用程度进行了排序。

二、服务节点类型

Presto中的服务节点有两种具体类型:Coordinator和Worker。下面的章节会具体介绍他们之间的区别。

2.1 Coordinator

Presto中的Coordinator节点负责解析查询语句、生成查询计划并调度Presto的Worker节点。它是Presto架构中的“大脑”并且也是presto client连接和提交执行语句的对象。每一个Presto集群都必须有

一个Presto Coordinator和至少一个Worker节点。在开发和测试过程中,单个Presto实例可以通过配置来同时具有这两种角色。

Coordinator节点会保持对Worker节点的监听并且协调一次查询中的执行过程。Coordinator节点会创建一个包含一系列stage的查询逻辑模型,然后将这些stage转换为一系列的连接任务,运行在

Presto集群中的Worker节点上。

Coordinator和Worker节点以及client之间通过REST API来进行通信。

2.2 Worker

Worker节点在Presto集群中负责执行任何和处理数据。Worker节点从连接中获取数据并相互交换中间数据。Coordinator节点负责从Worker节点上获取数据并返回最终结果到client上。

当一个Presto的Worker启动时,它会将自身信息广播到Coordinator中的发现服务中,这使得它在Presto的Coordinator节点的任务执行中是可用的。

Worker节点和其他Worker节点以及Coordinator节点通过REST API进行通信。

三、数据源

本文整体介绍了Presto中的connector、catalog、schema和table等概念。这些在Presto中用于描述特定数据源的基础信息将会在本章进行具体介绍。

3.1 Connector

Connector让Prestor能够适配诸如Hive或是关系型数据库。你可以认为Connector是一种数据库驱动。它由Presto的SPI实现,允许Presto通过标准API和外部资源进行交互。

Presto具有几个内置的Connector:JMX Connector,提供对于内置系统table的系统Connector,Hive Connector和用于提供TPC-H基准数据的TPCH Connector。除此之外,许多第三方开发者也向

Presto贡献了不同数据源的Connector。

每个Catalog都和一个指定的Connector绑定。如果你检查Catalog的配置文件,就会发现每一个Catalog都包含了一个强制的属性connector.name,用于Catalog Manager来针对给定的Catalog创建

Connector。在Presto,可以支持多个Catalog使用相同的Connector来访问两个类似的不同数据库实例。例如,如果你有两个Hive集群,你可以在一个Presto集群中配置两个都是用Hive Connector的Catalog,允许用户从两个Hive集群中查询数据(甚至在一个查询SQL中也支持)。

3.2 Catalog

一个Presto中的Catalog维护了Schema信息和通过Connector连接的数据源信息。例如,你可以使用JMX Connector配置一个JMX Catalog来提供对JMX信息的访问。当你再Presto上运行一个SQL语

句时,实际上是在一个或多个Catalog上运行。

在Presto中对一个table进行寻址时,表的全限定名称总是在Catalog中管理。例如,hive.test_data.test的全限定表名会指向hive catalog的test_data schema中的test table。

Catalog在Presto的配置路径中存储的属性文件中定义。

3.3 Schema

Schema是一种组织表的方式。Catalog和Schema定义了一组可以被查询的table集合。当在Presto中访问Hive或是类似于MySQL的关系型数据库时,Schema会将概念转换为目标数据库中的对应概

念。其他类型的Connector可以选择以一种对底层数据源有意义的方式将tale以Schema的形式组织管理起来。

3.4 Table

Table是一组以有类型的命名列组织起来的无序行的集合。这在任何关系型数据库中都是一样的。从元数据到table的映射关系定义在Connector中。

四、查询执行模型

Presto执行SQL语句并将这些语句转换为执行在由Coordinator和Worker的分布式系统中的查询。

4.1 Statement

Presto执行与ANSI标准兼容的SQL语句。当Presto文档引用一个查询语句时,它指的是ANSI SQL标准中定义的查询语句,包含子句、表达式和谓词。

一些堵着可能会好奇为什么本章把Statement和Query两个概念进行了分离。这是必须的,因为,在Presto中,语句只指向SQL语句的文本标识。在执行语句时,Presto会创建一个查询和一个执行计划,它们会在Presto的Worker节点集合中进行分发。

4.2 Query

当Presto解析一个语句时,它将其转换为一个查询,并创建一个分布式查询计划,然后将其实现为在Presto Worker节点上上运行的一系列相互连接的阶段。当你在Presto中检索有关查询的信息时,您

将接收到为响应语句而生成结果集所涉及的每个组件的快照。

Statement和Query之间的区别是很简单的。一个Statement是传递给Presto的SQL文本,然而一个Query指的是用于执行Statement而创建的一系列配置项和组件。Query包含stage、task、split、

connector和其他配置以及为产生结果集而协作的data source。

4.3 Stage

当Presto执行查询时,它通过将查询执行过程拆分为分层stage来达成目的。例如,如果Presto需要对存储在Hive中的亿级别的数据进行聚合,它会创建一个根stage来对多个stage的输出,所有这些阶

段的设计都是为了实现分布式查询计划的不同部分。

构成一个Query的层次stage结构类似树。每个Query都有一个根stage,来负责聚合其他stage的输出。Coordinator使用Stage用来对分布式查询进行建模,但是stage本身并不会在Presto的Worker节

点上运行。

4.4 Task

如上章所说,stage对一个分布式查询计划进行建模,但是stage自身不会在Presto的Worker节点上运行。为了理解stage是如何执行的,我们需要了解stage是由分布在Presto集群中的Worker节点上

task集合实现的。

任务是Presto架构中的“work horse”,因为分布式查询计划被分解为一系列的阶段,然后被翻译成任务,然后执行或处理分割。一个Presto任务有输入和输出,就像一个阶段可以并行执行一系列任务

一样,一个任务与一系列驱动程序并行执行。

4.5 Split

任务是在一个大数据集上分段进行的。分布式查询计划的最底层stage会执行从split的Connector中检索数据的操作,并且分布式查询计划的高层中间stage会从其他stage上检索数据。

当Presto调度一个查询时,Coordinator会向一个Connector查询可用于表的split的所有列表。Coordinator会跟踪哪些机器正在运行哪些任务、哪些任务正在处理哪些split。

4.6 Driver

Task包含一个或多个并行Driver。Driver在数据上运行并且结合运算符来生产输出,这些输出稍后将会由一个task来进行聚合并传递给另外一个stage中的另外一个task上。Driver是一组Operator实例的

序列,或者你可以认为Driver是一组内存中的Operator的物理集合。它是Presto架构中的最低级的并行性。一个Driver会有一个输入和一个输出。

4.7 Operator

Operator消费、转换并生成数据。例如,一个table scan fetch可以从Connector中获取数据,并生成可以被其他Operator消费的数据,一个文件operator消费数据并且通过在输入数据上运行一个谓词

来产生一个数据子集。

4.8 Exchange

Exchange在Presto节点上为单次查询的不同stage来传输数据。Task向output缓存产生数据并且通过一个exchange client消费其他task产生的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VisualStudioAddIn2017.vsix的下载安装和使用

本加载项是用于Visual Studio的,下载以后按照如下步骤进行安装: 完全退出Visual Studio把下载了的文件解压缩,会产生一个VisualStudioAddIn2017.vsix文件双击该文件,按照提示安装重启Visual Studio安装完成后的使用方法&#xff0…

Presto基本概念

Presto基本概念 Presto是Facebook开源的MPP SQL引擎,旨在填补Hive在速度和灵活性(对接多种数据源)上的不足。相似的SQL on Hadoop竞品还有Impala和Spark SQL等。这里我们介绍下Presto的基本概念,为后续的笔记做基础。 Operator …

2019春第六周编程总结

这个作业属于哪个课程C语言程序设计Ⅱ这个作业要求在哪里https://edu.cnblogs.com/campus/zswxy/MS/homework/2829我在这个课程的目标是利用指针知识解决相关实际问题在具体哪方面帮我实现目标设计密码开锁、交换变量解决问题以及电码加密参考文献C语言基础、http://www.w3scho…

昨天7月21号,笑笑又生病了

21号从上午就开始发烧,中午吃了安瑞克烧退了,但是下午6点左右又开始发烧了,再次吃安瑞克,效果不是太好,还是烧,睡了觉之后烧退了。晚上十点又开始发烧,吃美林悬浮液烧还是没退,又吃安瑞克,还是烧,到了一点钟,烧,但稍微好一点 22号…

Exchange企业实战技巧(26)在Outlook中打开多个邮箱

工作中,有时要需要让某个用户在outlook中同时打开多个exchange邮箱,对于outlook2010来说,是支持多个Exchange邮箱用户账户的并存,而outlook2007则不支持。那该功能有没其他实现方法呢?答案是有的。 如果你的Exchange是…

sql 为什么要用where 1=1或者where 1 =0 ?

一、不用where 11 在多条件查询中的困扰   举个例子,如果您做查询页面,并且,可查询的选项有多个,同时,还让用户自行选择并输入查询关键词,那么,按平时的查询语句的动态构造,代码…

Java元数据总结:Java注释的使用和定义

元数据从metadata一词译来,就是“关于数据的数据”的意思。越来越的开源框架都提供了“元数据”支持了,其实也就是注释支持。今天系统学习一下Java注释(Java元数据)。本文内容不限于Javadoc的注释。  1.什么是Java元数据,有什么作用?  元…

Emulator Error: Could not load OpenGLES emulati...

为什么80%的码农都做不了架构师?>>> 模拟器提示警告:Emulator Error: Could not load OpenGLES emulation library: Could not load DLL! 亲测可用: 从SDK\tools\lib目录下将一下四个dll文件复制到SDK\tools,重启模…

C++中的模板展开问题

在c中使用模板的目的是:减少代码量,相同功能的代码只写一份,根据传入不同的参数,实现相同的功能。 优点:减少了程序开发者的工作 量,只写一份相同功能的代码 缺点:编译器在展开时,每…

请教设计模式大牛们几点

我在做一个3D场景编辑器,假如所有物体从ObjectX而来,现在在此对象层,不知道如何设计出较好的结构来。问题如下: 1:每个物体都可以被单独的设置各种效果——阴影、多重纹理贴图、反射。 也可以设置一些动画&#xff1…

关于.net的垃圾回收和大对象处理_标记

CLR垃圾回收器根据所占空间大小划分对象。大对象和小对象的处理方式有很大区别。比如内存碎片整理 —— 在内存中移动大对象的成本是昂贵的,让我们研究一下垃圾回收器是如何处理大对象的,大对象对程序性能有哪些潜在的影响。 大对象堆和垃圾回收 在.Net …

TiKV 源码解析系列 - Raft 的优化

这篇文章转载TiDB大牛 唐刘 的博客:https://mp.weixin.qq.com/s?__bizMzI3NDIxNTQyOQ&mid2247484544&idx1&sn7d8e412ecc5aaeb3f9b7cf391bdcf398&chksmeb1623eadc61aafcefcfbdf36b388a5f96d3009d21641eb6ac67c57317d6c397ddeb58fc7d06&scene21#…

IE9 Preview 4的CSS3支持。

1、完美支持了box-shadow,无需前缀。【哈哈说曹操曹操到,还剩下text-shadow未支持了。】 2、有了支持CSS3 Gradient的迹象,但是很神奇的是IE9现在支持的是-webkit-gradient的写法,不过尚不支持color-stop。嗯,相信下个…

三篇文章了解 TiDB 技术内幕——说存储

此文转载了 申砾 PingCAP 的文章:https://mp.weixin.qq.com/s?__bizMzI3NDIxNTQyOQ&mid2247484822&idx1&sn5434362800d8dcc0ca69d2f3f3260173&chksmeb1622fcdc61abea428f74b26a24bc589d524dd3b666d9b124809300f488d00b33a315a87792&scene21#we…

复制数组方法总结

为什么80%的码农都做不了架构师&#xff1f;>>> 在java中&#xff0c;对数组复制有多种 1.通过循环来复制 比如用for循环 int a[]{1,2,3}; int b[]new int[a.length]; for(int i0;i<a.length;i){ b[i]a[i]; } 2.直接复制 int a[]{1,2,3}; int b[]a…

JS/Cs相互调用

js调用cs中函数的方法 在前台js代码里写上<%method();%>举例:cs文件中写的有public void method(){....执行某些操作.}这个函数,然后在前台页面的js里面调用.<script type"text/javascript"><%method();%></script>在cs中调用js函数法一:C…

学习进度_第六周

第六周主要就是针对结对开发项目&#xff0c;又赶上清明节假期&#xff0c;所以学习时间打了些折扣。 编程时间&#xff1a;课上3小时课下5小时。 博客1篇。转载于:https://www.cnblogs.com/flw0322/p/10680226.html

PostgreSQL体系架构

PostgreSQL 使用客户机/服务器&#xff08;C/S&#xff09;的模式提供服务&#xff0c;一个PostgreSQL会话由下列相关的进程&#xff08;程序&#xff09;组成&#xff1a; (1)一个服务器端进程。该进程管理数据库文件&#xff0c;接受客户端与数据库的连接&#xff0c;且代表…

地址运算符:

C语言中的指针&#xff0c;是用来存储变量地址。 int i 34; printf("i %d, address %p",i,&i); i 34, address 0x7fff5fbff85c转载于:https://www.cnblogs.com/sell/archive/2012/12/26/2834174.html

做好一个team leader的几点看法

每年给组员做PR的时候&#xff0c;总会谈及职业规划的问题。也总会被被问到怎样何时才可以做一个lead&#xff0c;为什么自己不能做lead&#xff1f;就从别处收集了一些自己也加了一些作为一个指引。但实际在具体操作时&#xff0c;也是每个manager见仁见智的事情&#xff0c;而…