Presto安装介绍及使用

目录

Presto简介

Presto架构

Presto优缺点

Presto、Impala性能比较

Presto安装

Presto命令行Client安装

Presto可视化Client安装

关于不支持lzo的问题

Presto优化之数据存储

Presto优化之查询SQL


Presto简介

Presto是一个开源的分布式SQL查询引擎,数据量支持GB到PB字节,主要用来处理秒级查询的场景。

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

Presto架构

Presto由一个Connrdinator和多个Worker组成。

Presto优缺点

优点:

  • Presto基于内存运算,减少了硬盘IO,计算更快。
  • 能够连接多个数据源,跨数据源连表查,从Hive查询大量网站访问记录,然后从Mysql匹配出设备信息

缺点:

Presto能够处理PB级别的海量数据分析,但Presto并不是吧PB级数据都放在内存中计算的,而是根据场景,如Count,AVG等聚合运算,是边读数据边计算,在清内存,再计算,这种耗的内存并不高。但是连表查,就可能产生大量的临时数据,因此速度会变慢。

Presto、Impala性能比较

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

Presto安装

1.下载

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

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

2.安装解压

tar -zxvf presto-server-0.196.tar.gz -C /opt/module/

3.修改名字

mv presto-server-0.196/ presto

4.进入到presto目录,并创建存储数据文件夹与存储配置文件文件夹

mkdir data

mkdir etc

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

vim jvm.config
添加如下内容
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError

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

#创建catalog
mkdir catalog
#配置hive.properties
vim hive.properties
#添加如下内容
connector.name=hive-hadoop2
hive.metastore.uri=thrift://bigdata02:9083

7.将presto分发到其他节点上

xsync presto

8.分发之后,分别进入三台主机的presto/etc的路径。配置node属性,node id每个节点都不一样

#每个节点都需要修改
vim node.properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/opt/module/presto/data

9.Presto是由一个coordinator节点和多个worker节点组成。在01上配置成coordinator,在其他节点02,03上配置为worker。

先配置01的coordinator节点

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://bigdata02:8881

在02,03上配置worker节点

#02上配置
vim config.properties
添加内容如下
coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery.uri=http://bigdata02:8881

#03上配置

vim config.properties
添加内容如下
coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery.uri=http://bigdata02:8881

10.在01的/opt/module/hive目录下,启动Hive Metastore,用hadoop角色

nohup bin/hive --service metastore >/dev/null 2>&1 &

11.分别在01、02、03上启动Presto Server

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

 bin/launcher run

后台启动Presto

bin/launcher start

12.日志查看路径presto/data/var/log

Presto命令行Client安装

1.下载

https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.196/presto-cli-0.196-executable.jar

2.将presto-cli-0.196-executable.jar上传到01的/presto文件夹下

3.修改文件名称

mv presto-cli-0.196-executable.jar  prestocli

4.增加执行权限

chmod +x prestocli

5.启动prestocli

./prestocli --server bigdata02:8881 --catalog hive --schema default

6.Presto命令行操作

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

例如:

select * from schema.table limit 100

Presto可视化Client安装

1.将yanagishima-18.0.zip上传到01的/opt/module目录

2.解压缩yanagishima

unzip yanagishima-18.0.zip cd yanagishima-18.0

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

vim yanagishima.properties
	添加如下内容
jetty.port=7080
presto.datasources=hadoop-presto
presto.coordinator.server.hadoop-presto=http://bigdata02:8881
catalog.hadoop-presto=hive
schema.hadoop-presto=default
sql.query.engines=presto

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

nohup bin/yanagishima-start.sh >y.log 2>&1 &

5.启动web页面

http://bigdata02:7080

6.查看表结构

比如执行select * from hive.gmall.ads_user_topic limit 5,这个句子里Hive这个词可以删掉,是上面配置的Catalog。

每个表后面都有个复制键,点一下会复制完整的表名,然后再上面框里面输入sql语句,ctrl+enter键或者执行Run按钮,查看显示结果

关于不支持lzo的问题

我们的数据很多都是采用的lzo格式,presto不支持这种数据格式,但是如果我们是数据如果采用的是列式存储,存储里面用的是lzo,通过配置是可以支持的,我们可以把hadoop下的lzo包拷贝到presto下,分发到其他的presto节点,然后重启presto,就能支持了。

cp /opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar /opt/module/presto/plugin/hive-hadoop2/

切换到/opt/module/presto/plugin/hive-hadoop2/目录 :cd /opt/module/presto/plugin/hive-hadoop2/

分发到其他的节点:xsync hive-hadoop2

Presto优化之数据存储

1.合理设置分区

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

2.使用列式存储

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

3.使用压缩

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

Presto优化之查询SQL

1.只选择使用的字段

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

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

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

3.Group By语句优化

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

4.Order by时使用Limit

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

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

Presto中join的默认算法是broadcast join,即将join左边的表分割到多个worker,然后将join右边的表数据整个复制一份发送到每个worker进行计算。如果右边的表数据量太大,则可能会报内存溢出错误。

注意:

  • Presto中不支持insert overwrite语法,只能先delete,然后insert into。
  • Presto目前支持Parquet格式,支持查询,但不支持insert。

  • 对于时间函数Timestamp,需要进行比较的时候,需要添加Timestamp关键字,而MySQL中对Timestamp可以直接进行比较。

猜你喜欢

转载自blog.csdn.net/Poolweet_/article/details/110186767