Presto基础学习--学习笔记

1,Presto背景

2011年,FaceBook的数据仓库存储在少量大型hadoop/hdfs集群,在这之前,FaceBook的科学家和分析师一直靠hive进行数据分析,但hive使用MR作为底层计算框架,是专为批处理设计的,但是随着数据的不断增多,使用hive进行一个简单的数据查询可能要花费几分钟或者几个小时,显然不能满足查询需求,Facebook也调研了其他比hive更快的工具,但是他们需要在功能有限的条件下做简单操作,以至于无法操作Facebook庞大的数据要求。
2012年开始研究自己的框架–presto,每日可以超过1pb查询,而且速度比较快,faceBook声称Presto的性能比hive要好上10倍或者100倍,presto和hive都是facebook开发的。2013年Facebook正式宣布开源Presto。

2. Presto简介

大数据分布式查询引擎
Presto是一个开源的分布式SQL查询引擎,适用于交互式查询,数据量支持GB到PB字节。
Presto的设计和编写完全是为了解决Facebook这样规模的商业数据仓库交互式分析和处理速度的问题。
Presto支持在线数据查询,包括Hive、kafka、Cassandra、关系数据库以及专门数据存储,一条Presto查询可以将多个数据源进行合并,可以跨越整个组织进行分析。
Presto以分析师的需求作为目标,他们期望相应速度小于1秒到几分钟,Presto终结了数据分析的两难选择,要么使用速度快的昂贵的商业方案,要么使用消耗大量硬件的慢速的“免费”方案。

3,主流大数据查询引擎性能对比

1,Hive

1,介绍
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。
Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 Mapper 和 Reducer 来处理内建的 Mapper 和 Reducer 无法完成的复杂的分析工作。
2,性能
Hive相对于其他查询引擎来说性能一般,主要的优势体现在系统负载低、稳定性高、数据格式支持面广、社区活跃度高,可以为其他多款查询引擎提供底层元数据,SparkSql、Presto、Impala、HAWQ等都支持基于Hive的查询。
成本低、稳定性好,生态兼容性好,因此Hive在企业中应用的较多。

2,sparkSQL

1,介绍
SparkSQL是Hadoop中另一个著名的SQL引擎,它以Spark作为底层计算框架,Spark使用RDD作为分布式程序的工作集合,它提供一种分布式共享内存的受限形式。 在分布式共享内存系统中,应用可以向全局地址空间的任意位置进行读写操作,而RDD是只读的,对其只能进行创建、转化和求值等操作。这种内存操作大大提高了计算速度。
SparkSQL作为Spark生态的一员继续发展,而不再受限于Hive,只是兼容Hive。可以利用hive作为数据源,Spark作为计算引擎,通过SQL解析引擎,实现基于Hive数据源,Spark作为计算引擎的方案。
2 性能
SparkSQL的性能相对其他的组件要差一些,多表单表查询性能都不突出。

Impala

1 ,介绍
Impala是Cloudera在受到Google的Dremel启发下开发的实时交互SQL大数据查询工具,它拥有和Hadoop一样的可扩展性、它提供了类SQL(类Hsql)语法,在多用户场景下也能拥有较高的响应速度和吞吐量。它是由Java和C++实现的,Java提供的查询交互的接口和实现,C++实现了查询引擎部分,除此之外,Impala还能够共享Hive Metastore,甚至可以直接使用Hive的JDBC jar和beeline等直接对Impala进行查询、支持丰富的数据存储格式(Parquet、Avro等)。
此外,Impala 没有再使用缓慢的 Hive+MapReduce 批处理,而是通过使用与商用并行关系数据库中类似的分布式查询引擎,可以直接从 HDFS 或 HBase 中用 SELECT、JOIN 和统计函数查询数据,从而大大降低了延迟。
2, 性能
Impala官方宣传其计算速度是一大优点,在实际测试中它的多表查询性能和presto差不多,但是单表查询方面却不如presto好。 而且Impala有很多不支持的地方,例如:不支持update、delete操作,不支持grouping sets语法,不支持Date数据类型,不支持ORC文件格式等等,所以impala一般采用Parquet格式进行查询,而且Impala在查询时占用的内存很大。

HAWQ

1 介绍
HAWQ 是一个 Hadoop 上的 SQL 引擎,是以 Greenplum Database 为代码基础逐渐发展起来的。HAWQ 采用 MPP 架构,改进了针对 Hadoop 的基于成本的查询优化器。除了能高效处理本身的内部数据,还可通过 PXF 访问 HDFS、Hive、HBase、JSON 等外部数据源。HAWQ全面兼容 SQL 标准,能编写 SQL UDF,还可用 SQL 完成简单的数据挖掘和机器学习。无论是功能特性,还是性能表现,HAWQ 都比较适用于构建 Hadoop 分析型数据仓库应用。
2 性能
HAWQ 吸收了先进的基于成本的 SQL 查询优化器,自动生成执行计划,可优化使用Hadoop 集群资源。 HAWQ 采用 Dynamic Pipelining 技术解决这一关键问题。Dynamic Pipelining 是一种并行数据流框架,利用线性可扩展加速Hadoop查询,数据直接存储在HDFS上,并且其SQL查询优化器已经为基于HDFS的文件系统性能特征进行过细致的优化。
但是HAWQ在多表查询时比Presto、Impala差一些;而且不适合单表的复杂聚合操作,单表测试性能方面要比其余四种组件差很多,HAWQ环境搭建也会遇到诸多问题。

ClickHouse

3.5.1 介绍
ClickHouse由俄罗斯Yandex公司开发。专为在线数据分析而设计。Yandex是俄罗斯搜索引擎公司。官方提供的文档表名,ClickHouse日处理记录数”十亿级”。

特性:
①采用列式存储
②数据压缩
③基于磁盘的存储,大部分列式存储数据库为了追求速度,会将数据直接写入内存,按时内存的空间往往很小
④CPU 利用率高,在计算时会使用机器上的所有 CPU 资源
⑤支持分片,并且同一个计算任务会在不同分片上并行执行,计算完成后会将结果汇总
⑥支持SQL,SQL 几乎成了大数据的标准工具,使用门槛较低
⑦支持联表查询
⑧支持实时更新
⑨自动多副本同步
10,支持索引
11,分布式存储查询
2 性能
ClickHouse 作为目前所有开源MPP计算框架中计算速度最快的,它在做多列的表,同时行数很多的表的查询时,性能是很让人兴奋的,但是在做多表的Join时,它的性能是不如单宽表查询的。
性能测试结果表明ClickHouse在单表查询方面表现出很大的性能优势,但是在多表查询中性能却比较差,不如Presto和Impala、HAWQ的效果好。

Greenplum

3.6.1 介绍
Greenplum是一个开源的大规模并行数据分析引擎。借助MPP架构,在大型数据集上执行复杂SQL分析的速度比很多解决方案都要快。
特性:
①GPDB完全支持ANSI SQL 2008标准和SQL OLAP 2003 扩展。
②从应用编程接口上讲,它支持ODBC和JDBC。
③完善的标准支持使得系统开发、维护和管理都大为方便。
④支持分布式事务,支持ACID。
⑤保证数据的强一致性。
⑥做为分布式数据库,拥有良好的线性扩展能力。
⑦GPDB有完善的生态系统,可以与很多企业级产品集成,譬如SAS、Cognos、Informatic、Tableau等。
⑧也可以很多种开源软件集成,譬如Pentaho、Talend 等。
2 性能
Greenplum作为关系型数据库产品,它的特点主要就是查询速度快,数据装载速度快,批量DML处理快。 而且性能可以随着硬件的添加,呈线性增加,拥有非常良好的可扩展性。因此,它主要适用于面向分析的应用。 比如构建企业级ODS/EDW,或者数据集市等,Greenplum都是不错的选择。
整体性能上Greenplum的表现比较中庸,单表查询不如clickhouse,多表查询不如impala,整体性能不如presto。

Presto

1 介绍
Presto是一个分布式SQL查询引擎,它被设计为用来专门进行高速、实时的数据分析。它支持标准的ANSI SQL,包括复杂查询、聚合(Aggregation)、连接(Join)和窗口函数(Window Functions)。作为Hive和Pig(Hive和Pig都是通过MapReduce的管道流来完成HDFS数据的查询)的替代者,Presto本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。Presto是一个OLAP的工具,擅长对海量数据进行复杂的分析;但是对于OLTP场景,并不是Presto所擅长,所以不要把Presto当做数据库来使用。
2 性能
Presto综合性能比起来要比其余组件好一些,无论是查询性能还是支持的数据源和数据格式方面都要突出一些,在单表查询时性能靠前,多表查询方面性能也很突出。
由于Presto是完全基于内存的并行计算,所以Presto在查询时占用的内存也不少,但是要比Impala少一些,比如多表Join时需要很大的内存,Impala占用的内存比Presto要多。

总结

1 多表查询
Presto、Impala以及HAWQ在多表查询方面更有优势。
虽说Presto和Impala在多表查询方面的性能差别不大,但是Impala的功能有一些局限性,Impala不支持的功能是没有办法参与性能对比测试的,例如:不支持update、delete操作,不支持grouping sets语法,不支持Date数据类型,不支持ORC文件格式等等,而Presto则基本没有这些局限问题。
2 单大表聚合
在单表测试方面ClickHouse性能最好,其次是Presto,相比于HAWQ和impala以及SparkSQL在单大表聚合操作方面的表现也相对优秀。

在这里插入图片描述

使用场景

1 Presto
多数据源时,可以使用presto进行统一查询。
快速查询时,presto查询性能高,但是需要的硬件资源也更昂贵。适合在单次扫描级别GB、TB级别的数据。
多张大表的关联查询时不应该使用presto,presto也不应作为etl工具,因此,在数仓的前两层很少使用presto。
2 Hive
海量数据的场景下,一是需要大量的硬件资源,二是海量的数据极可能造成内存溢出等各种异常。此时推荐使用Hive:成本低、稳定性好,且生态兼容性好。

4,Presto架构

Presto是一个运行在多台服务器上的分布式系统。 完整安装包括一个coordinator和多个worker。 由客户端提交查询,从Presto命令行CLI提交到coordinator。 coordinator进行解析,分析并执行查询计划,然后分发处理队列到worker。
Presto查询引擎是一个M-S的架构,由一个coordinator节点,一个Discovery Server节点,多个Worker节点组成,Discovery Server通常内嵌在Coordinator节点中。Coordinator负责SQL的解析,生成执行计划,分发给Worker节点进行执行,Worker节点负责实时查询执行任务。Worker节点启动后向discovery Server服务注册,Coordinator 从discovery server获取可以工作的Worker节点。如果配置了hive connector,需要配置hive MetaSote服务为Presto提供元信息,worker节点和HDFS进行交互数据。

5,相关术语

Connector 连接器

Presto通过Connector连接器来适应数据源,例如Hive或关系数据库。功能类似于数据库的驱动程序。允许Presto使用标准API与资源进行交互。
Presto包含几个内置连接器:JMX连接器,可访问内置系统表的System连接器,Hive连接器和旨在提供TPC-H基准数据的TPCH连接器。许多第三方开发人员都贡献了连接器,因此Presto可以访问各种数据源中的数据,比如:ES、Kafka、MongoDB、Redis、Postgre、Druid、Cassandra等。
每个Catalog都与一个特定的连接器关联。如果检查Catalog配置文件,将会看到每个都包含一个强制性属性connector.name,Catalog Manager使用此属性指定Catalog的连接器。可能有多个Catalog使用同一连接器来访问相似数据库的两个不同实例。比如,有两个Hive群集,则可以在单个Presto群集中配置两个都使用Hive连接器的Catalog,从而允许从两个不同的Hive集群中查询数

Catalog 连接目录

Presto Catalog是数据源schema的上一级,并通过连接器访问数据源。例如,可以配置Hive Catalog以通过Hive Connector连接器提供对Hive信息的访问。
在Presto中使用表时,标准表名始终是被支持的。例如,hive.test_data.test的标准表名将引用hive catalog中test_data schema中的test table。
Catalog需要在Presto的配置文件中进行配置。

Schema

Schema是组织表的一种方式。Catalog和Schema共同定义了一组可以查询的表。当使用Presto访问Hive或关系数据库(例如MySQL)时,Schema会转换为目标数据库中的对应Schema。

Table

Table表是一组无序的行,它们被组织成具有类型的命名列。与关系数据库中的含义相同。

6,日期与时间类型

1,时间转字符
date_format(timestamp, format) → varchar
将timestamp转换化为指定format格式的string。
Format的格式:
年:%Y
月:%m
日:%d
时:%H
分:%i
秒:%s
周几:%w(0…6)

--时间转字符串
select date_format(timestamp '2020-12-12 12:12:12' , '%Y-%m-%d %H:%i:%s');

2,字符转时间
date_parse(string, format) → timestamp
将format格式的string转换为时间类型。

--字符串转时间
select date_parse('2020-12-12 12:12:12' , '%Y-%m-%d %H:%i:%s');

3, 字符转日期
date(x) → date
等同于CAST(x AS date)

--字符串转日期
select date('2020-12-12');

4, 时间加减
date_add(unit, value, timestamp) → [same as input]
进行unit单位的时间运算。减法可以用负数来执行。
select date_add(‘hour’,-3,timestamp ‘2020-12-12 12:12:12’)

date_diff(unit, timestamp1, timestamp2) → bigint
时间timestamp2-timestamp1后,以unit单位进行展示差值。
select date_diff(‘hour’,timestamp ‘2020-12-12 12:12:12’,timestamp ‘2020-12-12 02:12:12’)

Unit单位可以是:year,month,day,hour

--分钟减去3
select date_add('second',3,timestamp '2020-12-12 12:12:12');--计算2个日期的差值,可以换算不同的单位
select date_diff('month',timestamp '2020-10-11 12:12:11',timestamp '2020-12-12 02:12:12');

请添加图片描述

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

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

相关文章

亿胜盈科ATR2037 无限射频前端低噪声放大器

亿胜盈科ATR2037 是一款应用于无线通信射频前端,工作频段为 0.7 到 6GHz 的超低噪声放大器。 ATR2037 低噪声放大器采用先进的 GaAs pHEMT 工艺设计和制作,ATR2037 低噪声放大器在整个工作频段内可以获得非常好的射频性能超低噪声系数。 亿胜盈科ATR203…

abapgit 安装及使用

abapgit 需求 SA[ BASIS 版本 702 及以上 版本查看路径如下: 安装步骤如下: 1. 下载abapgit 独立版本 程序 链接如下:raw.githubusercontent.com/abapGit/build/main/zabapgit_standalone.prog.abap 2.安装开发版本 2.1 在线安装 前置条…

揭秘:软件测试中Web请求的完整流程!

在软件开发的过程中,测试是一个至关重要的环节。而在现代互联网应用中,Web请求是很常见的一个测试需求。本文将介绍Web请求的完整测试流程,帮助读者更好地理解软件测试的关键步骤。 一、测试准备阶段 在进行Web请求测试之前,测试团…

Could not resolve all files for configuration ‘:app:debugCompileClasspath‘.

修改前 修改后 maven {url https://developer.huawei.com/repo/}

Scrum敏捷开发流程及支撑工具

Scrum是一种敏捷开发框架,用于管理复杂的项目。以下这些步骤构成了Scrum敏捷开发流程的核心。通过不断迭代、灵活应对变化和持续反馈,Scrum框架帮助团队快速交付高质量的产品。 以下是Scrum敏捷开发流程的基本步骤: 产品Backlog创建&#xf…

idea通过remote远程调试云服务器

引用了第三方的包,调试是看不到运行流程,于是想到了idea的remote方法 -agentlib:jdwptransportdt_socket,servery,suspendn,address9002 写一个.sh文件并启动 nohup java -jar -agentlib:jdwptransportdt_socket,servery,suspendn,address9002 ./demo.j…

Nacos多数据源插件

Nacos从2.2.0版本开始,可通过SPI机制注入多数据源实现插件,并在引入对应数据源实现后,便可在Nacos启动时通过读取application.properties配置文件中spring.datasource.platform配置项选择加载对应多数据源插件.本文档详细介绍一个多数据源插件如何实现以及如何使其生效。 注意:…

MYSQL练题笔记-高级查询和连接-连续出现的数字

一、题目相关内容 1)相关的表和题目 2)帮助理解题目的示例,提供返回结果的格式 二、自己初步的理解 其实这一部分的题目很简单,但是没啥思路啊,怎么想都想不通,还是看题解吧,中等题就是中等题…

【虚拟机】Docker基础 【二】【数据卷和挂载本地目录】

2.2.数据卷 容器是隔离环境,容器内程序的文件、配置、运行时产生的容器都在容器内部,我们要读写容器内的文件非常不方便。大家思考几个问题: 如果要升级MySQL版本,需要销毁旧容器,那么数据岂不是跟着被销毁了&#x…

机器学习---线性回归算法

1、什么是回归? 从大量的函数结果和自变量反推回函数表达式的过程就是回归。线性回归是利用数理统计中回归分析来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。 2、一元线性回归 3、多元线性回归 如果回归分析中包括两个或两个以上的自变量&a…

详解前后端交互时PO,DTO,VO模型类的应用场景

前后端交互时的数据传输模型 前后端交互流程 前后端交互的流程: 前端与后端开发人员之间主要依据接口进行开发 前端通过Http协议请求后端服务提供的接口后端服务的控制层Controller接收前端的请求Contorller层调用Service层进行业务处理Service层调用Dao持久层对数据持久化 …

Android : AndroidStudio开发工具优化

1.开启 gradle 单独的守护进程 Windows: 进入目录 C:\Users\Administrator\.gradle 创建文件: gradle.properties # Project-wide Gradle settings. # IDE (e.g. Android Studio) users: # Settings specified in this file will override any Gradle s…

MySQL安全最佳实践指南(2024版)

MySQL以其可靠性和效率在各种可用的数据库系统中脱颖而出。然而,与任何保存有价值数据的技术一样,MySQL数据库也是网络罪犯有利可图的目标。 这使得MySQL的安全性不再仅是一种选择,而是一种必要。这份全面的指南将深入研究保护MySQL数据库的…

集成开发环境 PyCharm 的安装【侯小啾python基础领航计划 系列(二)】

集成开发环境PyCharm的安装【侯小啾python基础领航计划 系列(二)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔…

AI - FlowField(流场寻路)

FlowField流场寻路,利用网格存储每个点对目标点的推力,网格上的单位根据对于推力进行移动。用于大量单位进行寻路对于同一目的地的寻路,常用于rts游戏等。 对应一张网格地图(图中黑块是不可行走区域) 生成热度图 计算所有网格对于目标点(…

Java零基础——docker篇

1.【熟悉】docker简介 1.1 什么是docker Docker是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余项目。它基于Google公司推出的Go语言实现。项目后来加入了Linux基金会,遵从了Apache2.0协议,项目代码在GitHub上进…

iptables防火墙之SNAT与DNET

NAT 1.SNAT:让内网可以访问外网 2.DNAT:让外网可以访问到内网的机器 网关服务器,要开启路由功能 内核功能: sysctl -a 列出所有参数 内核参数,然后grep可以查看到默认的内核参数 内核参数配置文件 /etc/sysctl.…

TLS、对称/非对称加密、CA认证

1. SSL与TLS SSL/TLS是一种密码通信框架,他是世界上使用最广泛的密码通信方法。SSL/TLS综合运用了密码学中的对称密码,消息认证码,公钥密码,数字签名,伪随机数生成器等,可以说是密码学中的集大成者。 TLS…

【android开发-16】android中文件和sharedpreferences数据存储详解

1,文件读写方式的数据存储 下面是一个简单的示例,演示如何在Android中使用内部存储来保存和读取文件: 保存文件: try { String data "这是要保存的数据"; FileOutputStream fos openFileOutput("myFile"…

在微信小程序中如何改变默认打开的页面

在微信小程序中,在我们编写页面的时候,可能会在重新渲染的时候导致页面跳转到默认打开的页面上,为了提升用户的一个体验,我们可以设置一些内容来修改小程序默认打开的页面,提升开发者的开发体验。 当我们打开一个微信…