百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

presto技术文档

ccwgpt 2024-11-24 12:35 29 浏览 0 评论

是一个开源的分布式Sql查询引擎,数据量支持到GB到PB级别,主要用处理秒级查询的场景

注意:虽然Presto可以解析SQL,但它不是一个标准的数据库,不是mysql,Oracle的替代品,也不能用来处理自爱西安事务(OLTP)

Presto的架构

由一个Croodinator和多个Worker组成


?Presto Coordinator

–是主架构

–用来接受客户端的请求(解析sql)

–发送给Presto Worker

–可以对接多种多样的sql(hive,kafka,redis,关系型数据库)

–去hive访问元数据,再去hdfs获取源数据

?Catalog就是一个数据源

–Hive Connector

?连接器,不同的数据源,不同的连接器

–Schema

?hive的数据库的概念差不多

–Table

?和hive的table一致

流程:

?由客户端提交查询,从Presto命令行CLI提交到Coordinator

?coordinator解析查询计划,然后把任务分发给worker执行

?worker负责执行任务,和处理数据

?Catolog表示数据源,一个Catelog含Schema和Connector

?Connector是适配器,用于Presto和数据源(Hive,Redis等)的连接,类似于JDBC

?Schema类似于Mysql中数据库,Table类似于Mysql中表

?Coordiator是负责从Worker获取结果并返回最终结果给Client

Presto和MapReduce对比

?比MR快5到10倍

?内存足够大,中间计算结果不落磁盘,若内存不够大,中间结构还是落地磁盘的

impala领先于presto,但是presto再数据源支持上更丰富

Presto的优缺点

优点

?Presto基于内存运算,减少硬盘IO,计算更快

?连接多个数据源,跨数据源表查

缺点

?presto不是把PB级数据都放在内存中计算,根据场景,若AVG,Count,是边读数据边计算,再清理内存,再计算,这种耗的内存不高

?连表查,可能产生大量的临时表,速度变慢,反而不如Hive

Presto优化之数据存储

?合理设置分区

–Presto会根据元数据信息读取分区数据,合理的分区能减少Presto数据取量,提升查询性能

?列式存储

–Presto对ORC文件读取做了特定优化,建议使用ORC格式存储

?压缩

–数据压缩减少节点间数据传输对IO带宽压力,对即席查询需要快速解压

–建议Snappy压缩

Presto优化之查询Sql

?只选择使用的字段

–采用列式存储

–建议选择需要的字段加快字段的读取,减少数据量

–避免*读取

?过滤条件必须加上分区字段

–对于由分区的表,where语句中优先使用分区字段进行过滤

–acct_day是分区字段

–visit_time是具体访问时间

–[GOOD]: SELECT time, user, host FROM tbl where acct_day=20171101
[BAD]: SELECT * FROM tbl where visit_time=20171101

?group by语句优化

–合理安排group by语句中字段对性能有一定提升

–将group by语句中字段按照每个字段去重数据多少进行降序

?order by使用Limit

–Oreder by需要扫描数据到单个worker节点进行排序

–导致单个worker需要大量内存

–若在取TOPN,使用limit可以减少排序计算和内存压力

–[GOOD]: SELECT * FROM tbl ORDER BY time LIMIT 100
[BAD]: SELECT * FROM tbl ORDER BY time

?使用Join语句时将大表放在左边

–Presto中Join的默认算法时broadcast join

?即将join左边的表分割多个worker,然后将Join右边的表数据整个复制一份发送到每个worker进行计算

?若右边表数据量太大,会报内存溢出错误

?[GOOD] SELECT ... FROM large_table l join small_table s on l.id = s.id
[BAD] SELECT ... FROM small_table s join large_table l on l.id = s.id

注意事项

?字段名引用

–避免关键字冲突

–mysql对字段加反引号·

–Presto对字段加双引号分割

–若字段名称不是关键字,可以不加这个双引号

?时间函数

–对Timestamp,需要比较的时候,需要添加Timestamp关键字,而mysql中对Timestamp可以直接进行比较

–/*MySQL的写法*/
SELECT t FROM a WHERE t > '2017-01-01 00:00:00';
/*Presto中的写法*/
SELECT t FROM a WHERE t > timestamp '2017-01-01 00:00:00';

?不支持insert overwrite语法

–Presto 中不支持 insert over write 语法,只能先delete然后insert into

?parquet格式

–目前不支持parquert格式,支持查询,但不支持insert


注意:presto不识别&这个符号,我搞了我好久啊

相关推荐

腾讯开源框架TarsCpp-rpc设计分析-server(二)

2Tars协议2.1是什么借用官方说法:TARS编码协议是一种数据编解码规则,它将整形、枚举值、字符串、序列、字典、自定义结构体等数据类型按照一定的规则编码到二进制数据流中。对端接收到二进制数据流...

微服务调用为什么用RPC框架,http不更简单吗?

简单点,HTTP是协议,RPC是概念!实现RPC可以基于HTTP协议(Feign),TCP协议(Netty),RMI协议(Soap),WebService(XML—RPC)框架。传输过程中,也因为序列...

go-zero:开箱即用的微服务框架(gin框架微服务)

go-zero是一个集成了各种工程实践的Web和rpc框架,它的弹性设计保障了大并发服务端的稳定性,并且已经经过了充分的实战检验。go-zero在设计时遵循了“工具大于约定和文档”的理...

SOFARPC :高性能、高扩展性、生产级的 Java RPC 框架

#暑期创作大赛#SOFARPC是一个高性能、高扩展性、生产级的JavaRPC框架。在蚂蚁金服,SOFARPC已经使用了十多年,已经发展了五代。SOFARPC致力于简化应用程序之间的RPC...

自研分布式高性能RPC框架及服务注册中心ApiRegistry实践笔记

痛点1.bsf底层依赖springcloud,影响bsf更新springboot新版本和整体最新技术版本升级。2.eureka已经闭源,且框架设计较重,同时引入eureka会自行引入较多sprin...

Rust语言从入门到精通系列 - Tonic RPC框架入门实战

Rust语言是一种系统级语言,被誉为“没有丧失性能的安全语言”。Rust语言的优势在于其内存安全机制,在编译时就能保证程序的内存安全。Tonic模块是Rust语言的一个RPC(RemoteProce...

腾讯开源框架TarsCpp-rpc设计分析-client(一)

前言Tars是腾讯开源的微服务平台,包含了一个高性能的rpc框架和服务治理平台,TarsCpp是其C++版本。对于以C++为主要开发语言,同时还想深入了解rpc和微服务框架具体实现的同学来说,Tars...

设计了一款TPS百万级别的分布式、高性能、可扩展的RPC框架

为啥要开发RPC框架事情是这样的,在开发这个RPC框架之前,我花费了不少时间算是对Dubbo框架彻底研究透彻了。冰河在撸透了Dubbo2.x和Dubbo3.x的源码之后,本来想给大家写一个Dubbo源...

rpc框架使用教程,超级稳定好用,大厂都在使用

rpc是什么远程调用协议如何使用导入依赖<dependency><groupId>org.apache.dubbo</groupId><art...

Layui 框架实战:动态加载 Select 与二级联动全解析

在现代Web开发中,下拉选择框(Select)是用户输入数据时不可或缺的组件。很多时候,我们需要的选项并非静态写死在HTML中,而是需要根据业务逻辑从后端动态获取。更有甚者,我们可能需要实现“...

15个能为你节省数百小时的前端设计神器,从UI库到文档生成

无论你是刚开始开发之旅的新手,还是疲于应付生产期限的资深程序员,有一个真理始终不变:正确的工具能彻底改变你的工作流程。多年来,我测试了数百个开发工具——有些实用,大多数平庸。但有一批免费网站经受住了时...

Layui与WinForm通用权限管理系统全解析

嘿,小伙伴们,今天咱们来聊聊Layui和WinForm这两个框架在通用权限管理系统中的应用。别担心,我会尽量用简单易懂的语言来讲解,保证让大家都能跟上节奏!首先说说Layui。Layui是一个前端UI...

纯Python构建精美UI!MonsterUI让前端开发效率飙升

“无需CSS知识,告别类名记忆,11行代码实现专业级卡片组件”在传统Web开发中,构建美观界面需要同时掌握HTML、CSS、JavaScript三剑客,开发者不得不在多种语言间频繁切换。即使使用Boo...

WebTUI:将终端用户界面(TUI)之美带到浏览器的CSS库

在当今Web技术飞速发展的时代,界面设计愈发复杂多样。然而,随着现代化工具的广泛使用,一些开发者开始回归极简风格,追求一种简洁而富有韵味的设计。WebTUI正是这样一款CSS库,它将经典的终...

人教版二年级下册生字描红汇总(拼音+笔顺+描红),可打印!

可定制内容,评论区留言。本次整理的为人教版二年级下册所有生字,共计300个;写字是小学阶段一项重要的基本功训练,把汉字写得正确、工整、美观,可以提高运用汉字这一交际工具的准确性和效率。对小学生进行写字...

取消回复欢迎 发表评论: