2023.12.3 分布式SQL查询引擎-Presto

目录

目录

1.Prosto简介

==Apache Hadoop-MapReduce==

==Apache Hive==

2.Presto的优缺点

3.个人自用启动服务

个人自用启动服务

 3.Presto的架构

4.presto和hive的区别 

5.presto优化

6.Presto-内存调优



1.Prosto简介

  • ==Apache Hadoop-MapReduce==

    • 优点:统一、通用、简单的编程模型,分而治之思想处理海量数据。

    • 缺点:java学习成本高、MR执行慢、内部过程繁琐

  • ==Apache Hive==

    • 优点:SQL on Hadoop。sql语言上手方便。学习成本低。

    • 缺点:底层默认还是MapReduce引擎、慢、延迟高

  • 各种SQL类计算引擎开始出现,主要追求的就是一个问题:==计算如何更快,延迟如何降低==。

    • ==Presto/trino==

    • Spark On Hive、Spark SQL

    • Flink

交互查询引擎:Presto是一款Facebook开源的MPP架构的OLAP查询引擎,可针对不同数据源执行大容量数据集的一款分布式SQL执行引擎,数据量支持GB到PB字节,主要用来处理秒级查询的场景。Presto 本身并不存储数据,,但是可以接入多种数据源,并且支持跨数据源的级联查询,而且基于内存运算,速度很快,实时性高。

Presto是一个开源的==分布式SQL查询引擎==,适用于==交互式查询==,数据量支持GB到PB字节。

Presto的设计和编写完全是为了解决==Facebook==这样规模的商业数据仓库交互式分析和处理速度的问题。

presto简介: 一条Presto查询可以将多个数据源进行合并,可以跨越整个组织进行分析;

presto特点: Presto以分析师的需求作为目标,他们期望响应速度小于1秒到几分钟;

注意:虽然 Presto 可以解析 SQL,但它不是一个标准的数据库。不是 MySQL、Oracle 的代替品,也不能用来处理在线事务(OLTP)

2.Presto的优缺点

# 优点
1)Presto与Hive对比,都能够处理PB级别的海量数据分析,但Presto是基于内存运算,减少没必要的硬盘IO,所以更快。

2)能够连接多个数据源,跨数据源连表查,如从Hive查询大量网站访问记录,然后从Mysql中匹配出设备信息。

3)部署也比Hive简单,因为Hive是基于HDFS的,需要先部署HDFS。

# 缺点
1)虽然能够处理PB级别的海量数据分析,但不是代表Presto把PB级别都放在内存中计算的。而是根据场景,如count,avg等聚合运算,是边读数据边计算,再清内存,再读数据再计算,这种耗的内存并不高。但是连表查,就可能产生大量的临时数据,因此速度会变慢,反而Hive此时会更擅长。

2)为了达到实时查询,可能会想到用它直连MySql来操作查询,这效率并不会提升,瓶颈依然在MySql,此时还引入网络瓶颈,所以会比原本直接操作数据库要慢。

3.个人自用启动服务

个人自用启动服务

datax-web启动

cd /export/server/datax-web-2.1.2

./bin/start-all.sh

海豚调度ds启动

cd /export/server/dolphinscheduler/

./bin/start-all.sh

postgres 虚拟机使用pg数据库服务

#psql -h 服务器 -p 端口地址 -d 数据库 -U 用户名    
psql -h 127.0.0.1 -p 5432 -d postgres -U postgres 

或者
psql -h hadoop01 -d postgres -U postgres
#密码:itcast123

退出 \q

Prosto集群启动

/export/server/presto/bin/launcher start

 3.Presto的架构

整个presto是一个 M-S架构 (主从架构):

coordinator: 主节点  
    作用: 负责接收客户端发送的SQL, 对SQL进行编译, 形成执行计划, 根据执行计划, 分发给各个从节点进行执行操作
discovery service: 附属节点
    作用: 一般内嵌在主节点中, 主要负责维护从节点列表, 当从节点启动后, 都需要到 discovery 节点进行注册操作
worker节点: 从节点
    作用: 负责接收coordinator传递过来任务, 对任务进行具体处理工作(读取数据, 处理数据, 将处理后结果数据返回给coordinator)

 connector连接器

1、Presto通过Connector连接器来连接访问不同数据源,例如Hive或mysql。连接器功能类似于数据库的驱动程序。允许Presto使用标准API与资源进行交互。

2、Presto包含几个内置连接器:JMX连接器,可访问内置系统表的System连接器,Hive连接器和旨在提供TPC-H基准数据的TPCH连接器。许多第三方开发人员都贡献了连接器,因此Presto可以访问各种数据源中的数据,比如:ES、Kafka、MongoDB、Redis、Postgre、Druid、Cassandra等。

catalog连接目录hive或者mysql等数据源

1、Presto Catalog是数据源schema的上一级,并通过连接器访问数据源。

2、例如,可以配置Hive Catalog以通过Hive Connector连接器提供对Hive信息的访问。

3、在Presto中使用表时,标准表名始终是被支持的。
例如,hive.test_data.test的标准表名将引用hive catalog中test_data schema中的test table。
Catalog需要在Presto的配置文件中进行配置。

 schema库

Schema是组织表的一种方式。Catalog和Schema共同定义了一组可以查询的表。

当使用Presto访问Hive或关系数据库(例如MySQL)时,Schema会转换为目标数据库中的对应Schema(database)。

= schema通俗理解就是我们所讲的database.
= 想一下在hive中,下面这两个sql是否相等。
show databases; -- presto不支持
show schemas;

4.presto和hive的区别 

1.一般用presto查询数据,因为快,一般用hive开发数据

2.presto调取表格的方式是
from
a.b.c
hive是from b.c 只需要库.表

3.current_date等日期相关的功能,presto可以用,但这类函数的写法hive往往不通用,hive用的是‘${yesterday}’等。
一些日期的不同,例如我们在presto可以使用
format_datetime(date_add(‘day’,-1,current_date),‘yyyyMMdd’)自动获取昨天的日期,hive是不能用的,hive中可以改为:
date_format(date_add(current_date,-1),‘yyyyMMdd’)

类似的,date_diff 不同版本的presto 和hive也是不同的,具体如下
presto:date_dff(‘day’,date1,date2)
hive : datediff(date1,date2)

4.hive 最后是需要分号的; presto无

5.presto 可以用double,不能用float,presto hive都可以用varchar,但presto不能用string
例如一个字段长度20,presto 用cast(a as varchar(3))能识别出来,但 hive不可以。为了兼容,可以都写为cast(a as varchar(30))

6.新版本的hive 为了安全性,必须要对数据进行分区,要选定etl_dt,presto暂无要求

7.hive 在使用order时候需要配合limit使用,presto无要求

8.presto可以使用group by 1,2,3等简写,hive 是不能识别出来123简写的。
特别要注意的是,在写一些复杂的查询语句时,“as"以前的部分都要group的,不要偷懒只group句子中的一部分

5.presto优化

--1)合理设置分区
    与Hive类似,Presto会根据元信息读取分区数据,合理的分区能减少Presto数据读取量,提升查询性能。

--2)使用列式存储
    Presto对ORC文件读取做了特定优化,因此在Hive中创建Presto使用的表时,建议采用ORC格式存储。相对于Parquet,Presto对ORC支持更好。
    Parquet和ORC一样都支持列式存储,但是Presto对ORC支持更好,而Impala对Parquet支持更好。在数仓设计时,要根据后续可能的查询引擎合理设置数据存储格式。

--3)使用压缩
    数据压缩可以减少节点间数据传输对IO带宽压力,对于需要快速解压的,建议采用Snappy压缩。

--4)预先排序
    对于已经排序的数据,在查询的数据过滤阶段,ORC格式支持跳过读取不必要的数据。比如对于经常需要过滤的字段可以预先排序。
 

  • SQL优化

    • 列裁剪

    • 分区裁剪

    • group by优化

      • 按照数据量大小降序排列

    • order by使用limit

    • ==join时候大表放置在左边==

      ...

  • 替换非ORC格式的Hive表

6.Presto-内存调优

  • 内存管理机制--内存分类

    Presto管理的内存分为两大类:==user memory==和==system memory==

    • user memory用户内存

      跟用户数据相关的,比如读取用户输入数据会占据相应的内存,这种内存的占用量跟用户底层数据量大小是强相关的
    • system memory系统内存

      执行过程中衍生出的副产品,比如tablescan表扫描,write buffers写入缓冲区,跟查询输入的数据本身不强相关的内存。
  • 内存管理机制--内存池

    ==内存池中来实现分配user memory和system memory==。

    内存池为常规内存池GENERAL_POOL、预留内存池RESERVED_POOL。

    1、GENERAL_POOL:在一般情况下,一个查询执行所需要的user/system内存都是从general pool中分配的,reserved pool在一般情况下是空闲不用的。

    2、RESERVED_POOL:大部分时间里是不参与计算的,但是当集群中某个Worker节点的general pool消耗殆尽之后,coordinator会选择集群中内存占用最多的查询,把这个查询分配到reserved pool,这样这个大查询自己可以继续执行,而腾出来的内存也使得其它的查询可以继续执行,从而避免整个系统阻塞。

    注意:
    reserved pool到底多大呢?这个是没有直接的配置可以设置的,他的大小上限就是集群允许的最大的查询的大小(query.total-max-memory-per-node)。

    reserved pool也有缺点,一个是在普通模式下这块内存会被浪费掉了,二是大查询可以用Hive来替代。因此也可以禁用掉reserved pool(experimental.reserved-pool-enabled设置为false),那系统内存耗尽的时候没有reserved pool怎么办呢?它有一个OOM Killer的机制,对于超出内存限制的大查询SQL将会被系统Kill掉,从而避免影响整个presto。

  • 内存相关参数

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

日志模块Loguru

安装 Loguru 仅支持 Python 3.5 及以上的版本,使用 pip 安装即可: pip install loguru开箱即用 Loguru 的主要概念是只有一个:logger from loguru import loggerlogger.info("This is log info!") logger.warning("This i…

备忘录模式 rust和java的实现

文章目录 备忘录模式介绍实现javarustrust仓库 备忘录模式 备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先…

U1编译概述

文章目录 基本概念定义一些概念 编译流程词法分析语法分析语义分析、生成中间代码中间代码 代码优化生成目标程序五个阶段中都需要做的两件事符号表管理出错处理 总结 其他概念多层中间表示和遍(PASS)三端模式课程概述 基本概念 定义 用高级语言编制的…

【Linux】第二十六站:软硬链接

文章目录 一、软链接二、硬链接三、ln命令四、该如何理解硬链接?五、如何理解软链接六、为什么要用软硬链接1.软链接的应用场景2.硬链接的应用场景 一、软链接 如下所示,我们创建一个文件以后,然后执行下面的指令 ln -s file.txt soft-link…

DDOS攻击为何永不过时?

文章目录 一、DOS二、DDOS三、如何防范DDOS 1.可以过滤IP地址2.增加设备3.在骨干节点配置防火墙4.开启过滤5.配置DNS抗攻击6.白帽团队 四、白帽子 为什么二十年前中国红客们就在用的DDOS攻击直到现在还依然是黑客们最爱的攻击方法?二十年前的攻击技术为什么还不过…

总结react中css的使用

1、css in js css in js有很多库,这里介绍styled-components styled-components 下载【vscode可以安装vscode-styled-components 插件,有代码提示】 npm i styled-components 1、然后为某个组件新建style.js文件,然后写一些样式。 impo…

字符串冲刺题

关卡名 字符串冲刺题 我会了✔️ 内容 1.掌握最长公共前缀问题 ✔️ 2.掌握字符串压缩问题 ✔️ 3.如果想挑战一下就研究:表示数值的字符串 ✔️ 1 最长公共前缀 这是一道经典的字符串问题,LeetCode14 先看题目要求:编写一个函数来查找…

如何通过K线发现短线机会?

一、K线的含义 股票一天之内有4个最关键的价格,开盘价、收盘价、最高价和最低价,把这个价格显示在图上就是K线图。 以金斗云智投电脑版为例,打开软件,任意搜索一支个股,就可以看到这支股票的K线。 股市新手看到这儿多…

tomcat运行项目时,前端页面中文乱码

如图&#xff1a; 解决办法&#xff1a; 在前端页面添加下面代码 <%page language"java" pageEncoding"utf-8"%>再次运行

「Swift」取消UITableView起始位置在状态栏下方开始

前言&#xff1a;在写页面UI时发现&#xff0c;当隐藏了NavigationBar时&#xff0c;即使UITableView是从(0,0)进行布局&#xff0c;也会一直在手机状态栏下方进行展示布局&#xff0c;而我的想法是希望UITableView可以从状态栏处就进行展示布局 当前页面展示&#xff1a; 问题…

Docker快速入门(docker加速,镜像,容器,数据卷常见命令操作整理)

Docker本质是将代码所需的环境依赖进行打包运行,而在Docker中最重要的是镜像和容器 镜像:可以简单地理解为每启动一个docker镜像就会占用计算机一个进程,这个进程和另外起的docker镜像的进程是相互独立的,以数据库为例,每个镜像都会copy一份数据库,在他所在的进程中.别的镜像在…

qt-C++笔记之QStringList

qt-C笔记之QStringList —— 杭州 2023-12-03 code review! 文章目录 qt-C笔记之QStringList1.1.《Qt官方文档》第一部分翻译&#xff1a;继承自QList\<QString\>-初始化-添加字符串1.2.迭代字符串1.3.join()和split()1.4.filter()1.5.lastIndexOf()1.6.indexOf()1.7.…

设置WPF启动画面

WPF启动时间比较长&#xff0c;总让人觉得程序好像没有启动起来&#xff0c;所以想设置一个启动画面 发现WPF设置启动画面竟然如此的简单 第一步将图片放置在主工程目录下&#xff0c;如下图 第二步 将图片生成属性设置为SplashScreen即可 第三步 启动项目你就看到效果了

C++:异常

文章目录 传统的处理错误的方式C异常C异常的使用抛异常的举例异常的重新抛出异常规范 自定义异常体系C标准库中的异常体系异常的优缺点 本篇总结的是C中关于异常的内容 传统的处理错误的方式 在C语言中&#xff0c;对于传统的错误方式有 终止程序&#xff1a;例如assert&…

linux创建分区

6.2.4 创建分区&#xff1a;MBR 将房子分成小房间&#xff0c;如卧室等。 6.2.4.1 fdisk 创建和维护分区表的程序。 fdisk命令的基本语法如下&#xff1a; fdisk [必要参数][选择参数] 参数说明&#xff1a; 必要参数 -l 列出素所有分区表 -u 与 -l搭配使用&#xff0c…

什么?居然可以免费使用Jetbrains?!

JetBrains是一家捷克的软件开发公司&#xff0c;该公司位于捷克的布拉格&#xff0c;并在俄罗斯的圣彼得堡及美国麻州波士顿都设有办公室&#xff0c;该公司最为人所熟知的产品是Java编程语言开发撰写时所用的集成开发环境&#xff1a;IntelliJ IDEA。 如下是jetbrains旗下的产…

销帮帮如何和金蝶云星空对接

销帮帮介绍 销帮帮平台是一款以客户关系管理为基础&#xff0c;集团队协作、营销推广、数据分析于一体的SAAS型企业管理平台。其开放API接口包括用户认证、客户信息、用户任务、销售记录、事务记录等&#xff0c;可方便企业对平台的二次开发和集成。在应用方面&#xff0c;销帮…

设计简单高效的短链系统

目录 引言 1. 短链系统的原理 1.1 长链接生成短码 1.2 短码映射到长链接 1.3 短码重定向 1.4 过期短 URL 清理 2. 设计与实现 2.1 数据存储 2.2 短码生成 2.3 接口设计 2.4 安全性考虑 2.5 访问性能优化 引言 在当今数字化时代&#xff0c;人们对信息的分享需求不断…

树_完全二叉树的节点个数

//给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 // // 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最左边的若干位…

Windows下安全认证机制

NTLM&#xff08;NT LAN Manager&#xff09; NTLM协议是在Microsoft环境中使用的一种身份验证协议&#xff0c;它允许用户向服务器证明自己是谁&#xff08;挑战&#xff08;Chalenge&#xff09;/响应&#xff08;Response&#xff09;认证机制&#xff09;&#xff0c;以便…