1.Presto 简单介绍

1.1 Presto基本概念

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

Presto是一个分布式的查询引擎,本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。Presto是一个OLAP的工具,擅长对海量数据进行复杂的分析;但是对于OLTP场景,并不是Presto所擅长,所以不要把Presto当做数据库来使用。

和大家熟悉的Mysql相比:首先Mysql是一个数据库,具有存储和计算分析能力,而Presto只有计算分析能力;其次数据量方面,Mysql作为传统单点关系型数据库不能满足当前大数据量的需求,于是有各种大数据的存储和分析工具产生,Presto就是这样一个可以满足大数据量分析计算需求的一个工具。

1.2 数据源

Presto需要从其他数据源获取数据来进行运算分析,它可以连接多种数据源,包括Hive、RDBMS(Mysql、Oracle、Tidb等)、Kafka、MongoDB、Redis等。

一条Presto查询可以将多个数据源的数据进行合并分析。

比如:select * from a join b where a.id=b.id;,其中表a可以来自Hive,表b可以来自Mysql。

1.2 Presto架构

1.3 Presto 优缺点

1.4 Presto、Impala性能比较

https://blog.csdn.net/u012551524/article/details/79124532

测试结论:Impala性能稍领先于Presto,但是Presto在数据源支持上非常丰富,包括Hive、图数据库、传统关系型数据库、Redis等。

2.Presto 安装部署

2.1 Presto Server安装

2.1.0 官网地址:https://prestodb.github.io/

2.1.1 下载地址:https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.196/presto-server-0.196.tar.gz

2.1.2 将presto-server-0.196.tar.gz导入hadoop102的/opt/software目录下,并解压到/opt/module目录

[mkluo@hadoop102 software]$ tar -zxvf presto-server-0.196.tar.gz -C /opt/module/

2.1.3 修改名称为presto

[mkluo@hadoop102 module]$ mv presto-server-0.196/ presto

2.1.4 进入到/opt/module/presto目录,并创建存储数据文件夹

[mkluo@hadoop102 presto]$ mkdir data

2.1.5 进入到/opt/module/presto目录,并创建存储配置文件文件夹

[mkluo@hadoop102 presto]$ mkdir etc

2.1.6 配置在/opt/module/presto/etc目录下添加jvm.config配置文件

[mkluo@hadoop102 etc]$ vim jvm.config

添加如下内容

-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError

2.1.7 Presto可以支持多个数据源,在Presto里面叫catalog,这里我们配置支持Hive的数据源,配置一个Hive的catalog

[mkluo@hadoop102 etc]$ mkdir catalog

[mkluo@hadoop102 catalog]$ vim hive.properties

添加如下内容

connector.name=hive-hadoop2
hive.metastore.uri=thrift://hadoop102:9083

2.1.8 将hadoop102上的presto分发到hadoop103、hadoop104

[mkluo@hadoop102 module]$ xsync presto

2.1.9 分发之后,分别进入hadoop102、hadoop103、hadoop104三台主机的/opt/module/presto/etc的路径。配置node属性,node id每个节点都不一样。

[mkluo@hadoop102 etc]$vim node.properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/opt/module/presto/data[mkluo@hadoop103 etc]$vim node.properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-fffffffffffe
node.data-dir=/opt/module/presto/data[mkluo@hadoop104 etc]$vim node.properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-fffffffffffd
node.data-dir=/opt/module/presto/data

2.1.10 Presto是由一个coordinator节点和多个worker节点组成。在hadoop102上配置成coordinator,在hadoop103、hadoop104上配置为worker。

(1)hadoop102上配置coordinator节点

[mkluo@hadoop102 etc]$ vim config.properties

添加内容如下

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery-server.enabled=true
discovery.uri=http://hadoop102:8881

(2)hadoop103、hadoop104上配置worker节点

[mkluo@hadoop103 etc]$ vim config.properties

添加内容如下

coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery.uri=http://hadoop102:8881

[mkluo@hadoop104 etc]$ vim config.properties

添加内容如下

coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery.uri=http://hadoop102:8881

2.1.11 在hadoop102的/opt/module/hive目录下,启动Hive Metastore。

[mkluo@hadoop102 hive]$
nohup bin/hive --service metastore >/dev/null 2>&1 &

2.1.12 分别在hadoop102、hadoop103、hadoop104上启动Presto Server

(1)前台启动Presto,控制台显示日志

[mkluo@hadoop102 presto]$ bin/launcher run

[mkluo@hadoop103 presto]$ bin/launcher run

[mkluo@hadoop104 presto]$ bin/launcher run

(2)后台启动Presto

[mkluo@hadoop102 presto]$ bin/launcher start

[mkluo@hadoop103 presto]$ bin/launcher start

[mkluo@hadoop104 presto]$ bin/launcher start

2.1.13 日志查看路径/opt/module/presto/data/var/log

2.2 Presto命令行Client安装

2.2.1 下载Presto的客户端:https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.196/presto-cli-0.196-executable.jar

2.2.2 将presto-cli-0.196-executable.jar上传到hadoop102的/opt/module/presto文件夹下

2.2.3 修改文件名称

[mkluo@hadoop102 presto]$ mv presto-cli-0.196-executable.jar  prestocli

2.2.4 增加执行权限

[mkluo@hadoop102 presto]$ chmod +x prestocli

2.2.5 启动prestocli

[mkluo@hadoop102 presto]$ ./prestocli --server hadoop102:8881 --catalog hive --schema default

2.2.6 Presto命令行操作

Presto的命令行操作,相当于Hive命令行操作。每个表必须要加上schema。

例如:

select * from schema.table limit 100

2.3 Presto可视化Client安装

2.3.1 将yanagishima-18.0.zip上传到hadoop102的/opt/module目录

2.3.2 解压缩yanagishima

[mkluo@hadoop102 module]$ unzip yanagishima-18.0.zip

cd yanagishima-18.0

2.3.3 进入到/opt/module/yanagishima-18.0/conf文件夹,编写yanagishima.properties配置

[mkluo@hadoop102 conf]$ vim yanagishima.properties

添加如下内容

jetty.port=7080
presto.datasources=atiguigu-presto
presto.coordinator.server.atiguigu-presto=http://hadoop102:8881
catalog.atiguigu-presto=hive
schema.atiguigu-presto=default
sql.query.engines=presto

2.3.4 在/opt/module/yanagishima-18.0路径下启动yanagishima

[mkluo@hadoop102 yanagishima-18.0]$
nohup bin/yanagishima-start.sh >y.log 2>&1 &

2.3.5 启动web页面:http://hadoop102:7080

看到界面,进行查询了。

3.Presto优化之数据存储

3.1 合理设置分区

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

3.2 使用列式存储

Presto对ORC文件读取做了特定优化,因此在Hive中创建Presto使用的表时,建议采用ORC格式存储。相对于Parquet,Presto对ORC支持更好。

3.3 使用压缩

数据压缩可以减少节点间数据传输对IO带宽压力,对于即席查询需要快速解压,建议采用Snappy压缩。

4.Presto优化之查询SQL

4.1 只选择使用的字段

由于采用列式存储,选择需要的字段可加快字段的读取、减少数据量。避免采用*读取所有字段。

[GOOD]: SELECT time, user, host FROM tbl
[BAD]:  SELECT * FROM tbl

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

对于有分区的表,where语句中优先使用分区字段进行过滤。acct_day是分区字段,visit_time是具体访问时间。

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

4.3 Group By语句优化

合理安排Group by语句中字段顺序对性能有一定提升。将Group By语句中字段按照每个字段distinct数据多少进行降序排列。

[GOOD]: SELECT GROUP BY uid, gender
[BAD]:  SELECT GROUP BY gender, uid

4.4 Order by时使用Limit

Order by需要扫描数据到单个worker节点进行排序,导致单个worker需要大量内存。如果是查询Top N或者Bottom N,使用limit可减少排序计算和内存压力。

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

4.5 使用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

5 注意事项

5.1 字段名引用

避免和关键字冲突:MySQL对字段加反引号`、Presto对字段加双引号分割

当然,如果字段名称不是关键字,可以不加这个双引号。

5.2 时间函数

对于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';

5.3 不支持INSERT OVERWRITE语法

Presto中不支持insert overwrite语法,只能先delete,然后insert into。

5.4 PARQUET格式

Presto目前支持Parquet格式,支持查询,但不支持insert。

Presto 详细介绍相关推荐

  1. HTML页面加载和解析流程详细介绍

    浏览器加载和渲染html的顺序.如何加快HTML页面加载速度.HTML页面加载和解析流程等等,在本文将为大家详细介绍下,感兴趣的朋友不要错过 浏览器加载和渲染html的顺序 1. IE下载的顺序是从上 ...

  2. mysql为什么要压测_mysql集群压测的详细介绍

    本篇文章给大家带来的内容是关于mysql集群压测的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. mysql压测 mysql自带就有一个叫mysqlslap的压力测试工具,通 ...

  3. php比较运算符案列,PHP实例:PHP比较运算符的详细介绍

    <PHP实例:PHP比较运算符的详细介绍>要点: 本文介绍了PHP实例:PHP比较运算符的详细介绍,希望对您有用.如果有疑问,可以联系我们. 比拟运算符种类 PHP实战如同它们名称所暗示的 ...

  4. Tempdb数据库详细介绍

    Tempdb数据库详细介绍 一.Tempdb简介 tempdb是SQLServer的系统数据库一直都是SQLServer的重要组成部分,用来存储临时对象.可以简单理解tempdb是SQLServer的 ...

  5. linux路由介绍,Linux的路由表详细介绍

    Linux的路由表详细介绍 一 在Linux下执行route命令[root@localhost backup]# route -nKernel IP routing tableDestination ...

  6. pythonexcel介绍_Python 中pandas.read_excel详细介绍

    Python 中pandas.read_excel详细介绍 #coding:utf-8 import pandas as pd import numpy as np filefullpath = r& ...

  7. 渡神纪帧数测试软件,渡神纪芬尼斯崛起配置要求高吗 渡神纪配置要求详细介绍_游侠网...

    渡神纪芬尼斯崛起配置要求高吗?本作将在12月3日登陆主机和PC,很多玩家比较关心游戏的配置,这里给大家带来了渡神纪配置要求详细介绍,快来了解下吧. 渡神纪配置要求详细介绍 最低要求(720p/30 f ...

  8. C++11 unordered_map详细介绍

    整理的算法模板合集: ACM模板 目录: 1.介绍 1.1 特性 2. 模版 2.1 迭代器 3. 功能函数 3.1 构造函数 3.2 容量操作 3.2.1 size 3.2.2 empty 3.3 ...

  9. autosar中com模块_详细介绍AUTOSAR各个模块作用PART1(OS,SYS)

    这片文章中我们详细讲解下每个模块的功能,上图是vector的autosar方案,每个模块的详细介绍后续会有单独文章进行讲解,请关注.以下是各个模块的简介 1.VHSM hardware Securit ...

最新文章

  1. 决策树模型与学习《一》
  2. ubuntu软件安装(个人PC)
  3. Android .mk文件语法解析
  4. 支付产品必懂的会计基础及如何应用
  5. Linux常用的基本命令head、tail、tar、grep、date、cal(二)
  6. Vue—核心概念—异步组件和路由懒加载
  7. 【渝粤题库】国家开放大学2021春2634推销策略与艺术题目
  8. 杭电2531Catch him
  9. python错误和调试
  10. vue项目中的回车登录
  11. VC字符处理(二)转换(修改)
  12. Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9083
  13. 基于springboot2.0.6版本的TX-LCN分布式事务搭建说明
  14. 宅男福利:Python爬取某站所有漫画(赶紧收藏)
  15. 小学教师计算机培训记录内容,中小学教师信息技术培训计划
  16. 自抗扰控制matlab仿真,自抗扰控制器的simulink建模与仿真.pdf
  17. Towards Fine-Grained Prosody Control for Voice Conversion 论文理解
  18. CSS——网易云音乐之登录页面的实现
  19. MySQL窗口函数OVER()
  20. AE学习的艰难困苦历程

热门文章

  1. 未来智能手机完全不需要动手 现在的手机弱爆了
  2. 100999凑整到万位进一_【小学奥数题库系统】1-1-1-1 整数加减法速算与巧算.教师版...
  3. 【discuzx2】space_feed_li.htm模板文件解析
  4. 数据、传感器、打车服务,哪个才是未来无人车制胜关键?
  5. 用AI实现一张图四季变换特效的代码
  6. OpenVPN 支持Radius
  7. p-范数(2-范数 即 欧几里得范数)
  8. C语言运算符优先级表
  9. 撕破CPU的伪装(一)
  10. RNN详解(Recurrent Neural Network)