由于公司的安规要求,不允许又第三方的聊天工具、云盘及笔记,导致有道云无法使用,故将有道云笔记整理发布在CSDN

首先,可以把Presto理解为一个类似ES的搜索引擎,主要是加快各种数据库的实时查询速度。

一、Presto的服务进程:

  1. Coordinato:Presto的管理节点

Coordinator服务进程部署于集群中一个单独的节点上,是整个Presto集群的管理节点。

Coordinator服务进程主要用于接收客户端提交的查询,查询语句解析,生成查询执行计划、Stage和Task并对生成的Task进行调度。除此之外,Coordinator还对集群中的所有Worker进行管理。Coordinator 进程是整个Presto集群的Master 进程,该进程既与Worker进行通信从而获得最新的Worker信息,又与Client进行通信,从而接受查询请求,而所有的这些工作都是通过Coordinator 上的StatementResource类提供的RESTful服务来完成的。

  1. Worker:Persto的工作节点

在一个Presto集群中,存在一个Coordinator 节点和多个Worker 节点。Coordinator 节点是管理节点,而Worker节点就是工作节点。在每个Worker节点上都会存在一个Worker服务进程,该服务进程主要进行数据的处理以及Task的执行。Worker服务进程每隔一定的时间都会向Coordinator 上的RESTful服务发送心跳,从而告知Coordinator:我还活着,并接受你的调度。当客户端提交一个查询的时候,Coordinator则会从当前存活的Worker列表中选择出合适的Worker节点去运行Task。而Worker在执行每个Task的时候又会进一步对当前Task读入的每个Spit进行一系列的操作和处理。

二、Presto模型

Presto 可以通过多种不同类型的Connector 访问多种数据源,目前支持的Connector包括:Hive、JMX、MySQL、Cassandra、PostgreSQL以及Kafka。

  1. Connector(连接器):通过Connector访问不同数据源,具体如下

Presto是通过多种多样的Connector来访问多种不同的数据源的。你可以将Connector当作Presto访问各种不同数据源的驱动程序。一般情况下,Presto针对每种数据源都有与之对应的Connector。每种Connector都实现了Presto中标准的SPI接口,因此只要你实现Presto中标准的SPI接口,就可以轻易地实现使用适合自己特定需求的Connector来访问特定的数据源。Presto目前可以支持的Connector有 Hive、Kafka、JMX、MySQL、Cassandra等,都有其对应的Build-In Connector(内置的Connector)。

当你需要使用某种Connector 访问特定的数据源时,需要在SPRESTO_HOME/etc/catalog/中创建一个配置文件:example.properties(文件名字无限制,但是其后缀名必须为properties),在该配置文件中必须要设置一个属性:connector.name,该属性是必须设置的。Presto中的Connector Manager 就是通过该配置属性来决定使用哪个Connector去访问相应的数据源的。例如,你现在需要访问一个Hive数据源,那么你在配置文件中就需要将属性connector.name设置为Hive-cdh5或者Hive-cdh4,这样Presto就会使用内置的Hive connector 去访问Hive数据仓库中相应的数据。

  1. Catalog:可以理解为一个MySQL数据库

Presto中的Catalog类似于MySQL中的一个数据库实例。而Schema就类似于MySQL中的一个Database。通过使用特定的Connector 访问Catalog中指定的数据源,一个Catalog中可以包含多个Schema。那么怎么定义一个Catalog呢?其实你不需要特意去指定Catalog。

假设你想要访问Hive中的数据,则需要在$PRESTO_HOME/etc/catalog/中创建一个配置文件:example.properties。该配置文件中定义了诸如Hive metastore的URI等访问Hive中的数据所需要的所有配置项,并且配置文件的名字就是Catalog的名称:example。从这里可以看出Presto中配置文件的名字(不带.properties)就是Catalog的名字。

当你访问Catalog中的某个表时,该表的全名总是以Catalog的名字开始。例如名字为example.schemal.table1的表,指的是表tablel位于名为schemal的schema中,而schemal又位于名为example的Catalog中。

  1. Schema:可以理解为MySQL里面的一个数据库

Presto 中的Schema就类似于MySQL中的Database。一个Catalog名称和一个Schema名称唯一确定了可以查询的一系列表的集合。当通过Presto 去查询Hive或者MySQL中的数据时,你会发现Presto中的Schema与Hive或者MySQL中的Database是相对应的。

  1. Table:就是一张表,不用理解

三、Presto查询执行模型

Presto在执行SQL语句时,将这些SQL语句解析为相应的查询,并在分布式集群中执行这些查询。

  1. Statement:就是我们输入的SQL语句

Statement语句。其实就是指我们输入的SQL语句。Presto支持符合ANSI标准的SQL语句。这种语句由子句(Clause)、表达式(Expression)和断言(Predicate)组成。

Presto为什么将语句(Statement)和查询(Query)的概念分开呢?因为在Presto中,语句和查询本身就是不同的概念。语句指的是终端用户输入的用文字表示的SQL语句;当Presto执行输入的SQL语句时,会根据SQL语句生成查询执行计划,进而生成可以执行的查询(Query),而查询代表的是分布到所有的Worker之间执行的实际查询操作。

  1. Query:查询执行结果

当Presto接收一个SQL语句并执行时,会解析该SQL语句,将其转变成一个查询执行和相关的查询执行计划。一个查询执行代表可以在Presto集群中运行的查询,是由运行在各个Worker上且各自之间相互关联的阶段(Stage)组成的。

那么SOL语句与查询执行之间有什么不同呢?

其实很简单,你可以认为SQL语句就是提交给Presto的用文字表示的SQL执行语句。

而查询执行则是为了完成SQL语句所表述的查询而实例化的配置信息、组件、查询执行计划和优化信息等。一个查询执行由Stage、Task、Driver、Split、Operator和DataSource组成。

这些组件之间通过内部联系共同组成了一个查询执行,从而得到SQL语句表述的查询,并得到相应的结果集。

  1.  Stage:查询执行阶段

当Presto运行Query时,Presto会将一个Query拆分成具有层级关系的多个Stage,一个Stage就代表查询执行计划的一部分。例如,当我们执行一个查询,从Hive的一张具有1亿条记录的表中查询数据并进行聚合操作时,Presto会创建一个Root Stage(在后面的章节你会知道,该Stage就是Single Stage),该Stage聚合其上游Stage的输出数据,然后将结果输出给Coordinator,并由Coordinator将结果输出给终端用户。

通常情况下,Stage之间是树状的层级结构。每个Query都有一个Root Stage。该Stage用于聚集所有其他Stage的输出数据,并将最终的数据反馈给终端用户。需要注意的是,Stage并不会在集群中实际执行,它只是Coordinator用于对查询执行计划进行管理和建模的逻辑概念。每个Stage(除了Single Stage和Source Stage)都会有输入和输出,都会从上游Stage读取数据,然后将产生结果输出给下游Stage。需要注意的是:Source Stage 没有上游Stage,它从Connector 获取数据。Single Stage没有下游Stage,它的结果直接输出给Coordinator,并由Coordinator输出给终端用户。

Presto中的Stage共分为4种,具体介绍如下。

Coordinator_Only:这种类型的Stage用于执行DDL或者DML语句中最终的表结构创建或者更改。

Single:这种类型的Stage用于聚合子Stage的输出数据,并将最终数据输出给终端用户。

Fixed:这种类型的Stage用于接受其子Stage产生的数据并在集群中对这些数据进行分布式的聚合或者分组计算。

Source:这种类型的Stage用于直接连接数据源,从数据源读取数据,在读取数据的时候,该阶段也会根据Presto对查询执行计划的优化完成相关的断言下发(Predicate PushDown)和条件过滤等。

  1. Task:Stage的子集

在Presto集群中,一个查询执行被分解成具有层级关系的一系列的Stage,一个Stage又被拆分为一系列的Task。每个Task处理一个或者多个Split。每个Task都有对应的输入和输出。一个Stage被分解为多个Task,从而可以并行地执行一个Stage。Task也采用了相同的机制:一个Task也可以被分解为一个或者多个Driver,从而并行地执行一个Task。

说明:由于一个SQL查询可以被分解为多个前后关联的Stage,而每个Stage中均含有一个或者多个Task,在这里我们约定:按照数据的流向,越靠近数据源的Task越处于上游,越远离数据源的Task越处于下游。

  1. Driver:Task的子集

一个Task包含一个或者多个Driver。一个Driver其实就是作用于一个Split的一系列Operator的集合。因此一个Driver用于处理一个Split,并且生成相应的输出,这些输出由Task收集并且传送给其下游Stage中的一个Task。一个Driver拥有一个输入和一个输出。

  1. Operator:一种操作

一个Operator代表对一个Split的一种操作,例如过滤、加权、转换等。一个Operator依次读取一个Split中的数据,将Operator所代表的计算和操作作用于Split的数据上,并产生输出。每个Operator均会以Page为最小处理单位分别读取输入数据和产生输出数据。

Operator每次只会读取一个Page对象,相应地,每次也只会产生一个Page对象。

  1. Split:分片

Split即分片。一个分片其实就是一个大的数据集中的一个小的子集。而Driver则是作用于一个分片上的一系列操作的集合,而每个节点上运行的Task,又包含多个Driver,从而一个Task可以处理多个Split。其中每一种操作均由一个Operator表示。分布式查询执行计划的源 Stage(Source Stage)通过Connector从数据源获得多个分片。Source Stage对Split处理完毕之后,会将输出传递给其下游Stage(通常其下游Stage的类型为Fixed或者Single)。

当Presto执行一个查询的时候,首先会从Coordinator得到一个表对应的所有Split。然后Presto就会根据查询执行计划,选择合适的节点运行相应的Task处理Split。

  1. Page:

Page是Presto中处理的最小数据单元。一个Page对象包含多个Block对象,而每个Block对象是一个字节数组,存储一个字段的若干行。多个Block横切的一行是真实的一行数据。一个Page最大为1MB,最多16×1024行数据。Page的结构如图1-1所示。

综上所述,Presto执行查询的模型关系如图1-2所示。

Presto学习(1)-基本原理学习相关推荐

  1. 用高中数学理解AI “深度学习”的基本原理

    本文作者尚俊霖,全职产品经理,业余自学机器学习.最近开始写硬核科普,欢迎关注公众号欠拟合(ID:Underfit). Google 研发了十年自动驾驶后,终于在本月上线了自动驾驶出租车服务.感谢&qu ...

  2. Presto 与 Hive 语法学习

    Presto 与 Hive 语法学习 文章目录 Presto 与 Hive 语法学习 1. Presto语法 1.1 数据类型 布尔值 整数 浮点 固定精度 字符串 日期和时间 结构 网络地址 UUI ...

  3. PyTorch深度学习笔记之四(深度学习的基本原理)

    本文探讨深度学习的基本原理.取材于<PyTorch深度学习实战>一书的第5章.也融入了一些自己的内容. 1. 深度学习基本原理初探 1.1 关于深度学习的过程的概述 给定输入数据和期望的输 ...

  4. 深度学习神经网络基本原理

    一.深度学习 深度学习:顾名思义学习特征 从原始数据中提取模式的能力.机器学习就是让计算机模型学习到这些分类模型.深度学习面临的挑战是:图像的底层视觉特性和高层语义概念之间的鸿沟.例如人和狗是不一样的 ...

  5. 深度稳定学习:因果学习的最新进展 | 清华大学团队 CVPR 研究

    2021-05-02 13:44:18 作者 | 陈大鑫.张兴璇 这都2021年了,对 AI 而言,识别出猫猫狗狗肯定再简单不过了. 可是,可是,AI 真的有那么「丝滑」吗? 并没有--如上图所示,当 ...

  6. 嵌入式系统的知识体系、学习误区及学习建议

    嵌入式系统的知识体系.学习误区及学习建议 1.嵌入式系统的知识体系     嵌入式系统的应用范围可以粗略分为两大类:电子系统的智能化(工业控制.现代农业.家用电器.汽车电子.测控系统.数据采集等),计 ...

  7. 新手如何学习Java以及学习java的步骤

    第一步 首先要做好学习前的准备工作:java语言一般用于大型的服务器程序开发,所有有必要了解如下内容:Unix开发环境Unix系统原理.Unix开发环境.Unix常用命令.熟练掌握Unix常用命令:熟 ...

  8. 如何学习Hadoop,学习Hadoop要学什么?怎么学?

    如何学习Hadoop,学习Hadoop要学什么?怎么学? 第一章:初识Hadoop 第二章:更高效的WordCount 第三章:把别处的数据搞到Hadoop上 第四章:把Hadoop上的数据搞到别处去 ...

  9. 强化学习笔记-强化学习概述

    强化学习笔记-强化学习概述 机器学习分类 强化学习与监督学习的异同点 强化学习基本原理 强化学习解决的是什么样的问题 强化学习分类 请分别解释随机性策略和确定性策略 回报.值函数.行为值函数三个指标的 ...

  10. 【学习笔记】强化学习1——强化学习概述

    强化学习概述 机器学习主要分为监督学习.非监督学习.强化学习.强化学习的训练样本没有标记,根据训练样本学习迭代获得最优策略,强化学习需要与环境不断地交互学习. 强化学习的基本原理是智能体从环境中接收一 ...

最新文章

  1. 洛谷.4252.[NOI2006]聪明的导游(提答 直径 随机化)
  2. 【案例分享】crontab执行脚本异常问题
  3. .netcore 开发的 iNeuOS 物联网平台部署在 Ubuntu 操作系统,无缝跨平台
  4. 解决:vue 用 axios 发送请求,每次都会发送两次请求
  5. permutation 1(HDU-6628)
  6. 【云图】如何创建云图(云存储)
  7. CSS文件的三种引入方式
  8. 大数据商业智能的十大戒律
  9. Spark之functions
  10. 网络管理软件免费linux,最新Xmanager Power Suite6网络管理工具免费官方下载6.0.199 - 系统之家...
  11. python调试利器pysnooper实践使用分析
  12. 专升本C语言知识点笔记
  13. 开源项目_springboot的答题系统+spark大数据实时分析
  14. 安卓手机内外SD卡互换
  15. NetBeans IDE12.3无法卸载
  16. 用户头像上传(自用)
  17. 开个什么店赚钱?这5种实体店,妥妥的推荐!
  18. Mysql语句+Linux指令一步入门
  19. [机器学习与scikit-learn-8]:数据预处理-1-意义与概述
  20. unity塔防游戏怪物转向_萌宠打怪物游戏下载-萌宠打怪物最新安卓版下载

热门文章

  1. MATLAB GUI设计——绘图
  2. 2021.01.29小型计算器
  3. 蔡高厅老师 - 高等数学阅读笔记 - 14 定积分 - 积分中值定理 -牛顿莱布尼兹公式-(58 ~ 64)
  4. 鼠标移入table背景色改变
  5. 前后端分离,利用vue结合Springboot实现登录接口的制作并通过测试
  6. Excel利用随机排序功能安排考生座位
  7. itop启动mysql_CentOS 7 安装iTop
  8. 第57章、录制视频(从零开始学Android)
  9. NPDP 和PMP 产品经理应该考哪个?
  10. android mvp模式鸿洋,Android上的MVP模式