1.
命令行
Client
安装
1
)下载
Presto
的客户端
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
上传到
hadoop102
的
/opt/module/presto
文件夹下
3
)修改文件名称
[atguigu@hadoop102 presto]$ mv presto-cli-0.196-executable.jar
prestocli
4
)增加执行权限
[atguigu@hadoop102 presto]$ chmod +x prestocli
5
)启动
prestocli
[atguigu@hadoop102 presto]$ ./prestocli --server hadoop102:8881
--catalog hive --schema default
6
)
Presto
命令行操作
Presto
的命令行操作,相当于
Hive
命令行操作。每个表必须要加上
schema
。
例如:
select * from schema.table limit 100
2.可视化
Client
安装
1
)将
yanagishima-18.0.zip
上传到
hadoop102
的
/opt/module
目录
2
)解压缩
yanagishima
[atguigu@hadoop102 module]$ unzip yanagishima-18.0.zip
cd yanagishima-18.0
3
)进入到
/opt/module/yanagishima-18.0/conf
文件夹,编写
yanagishima.properties
配置
[atguigu@hadoop102 conf]$ vim yanagishima.properties
添加如下内容
jetty.port=7080
presto.datasources=atguigu-presto
presto.coordinator.server.atguigu-presto=http://hadoop102:8881
catalog.atguigu-presto=hive
schema.atguigu-presto=default
sql.query.engines=presto
4
)在
/opt/module/yanagishima-18.0
路径下启动
yanagishima
[atguigu@hadoop102 yanagishima-18.0]$
nohup bin/yanagishima-start.sh >y.log 2>&1 &
5
)启动
web
页面
http://hadoop102:7080
看到界面,进行查询了。
6
)查看表结构
![](https://i-blog.csdnimg.cn/blog_migrate/2e6c660532d35abe5e4b546f65eb998f.png)
这里有个
Tree View
,可以查看所有表的结构,包括
Schema
、表、字段等。
比如执行
select * from hive.dw_weather.tmp_news_click limit 10
,这个句子里
Hive
这个
词可以删掉,是上面配置的
Catalog
![](https://i-blog.csdnimg.cn/blog_migrate/94a59d40dd3ece0fc3487528b1799d65.png)
每个表后面都有个复制键,点一下会复制完整的表名,然后再上面框里面输入
sql
语句,
ctrl+enter
键执行显示结果
![](https://i-blog.csdnimg.cn/blog_migrate/b6d6a0c049bba24e4884920cd56175c6.png)
3 Presto
优化之数据存储
1.3.1
合理设置分区
与
Hive
类似,
Presto
会根据元数据信息读取分区数据,合理的分区能减少
Presto
数据
读取量,提升查询性能。
1.3.2
使用列式存储
Presto
对
ORC
文件读取做了特定优化,因此在
Hive
中创建
Presto
使用的表时,建议采
用
ORC
格式存储。相对于
Parquet
,
Presto
对
ORC
支持更好。
1.3.3
使用压缩
数据压缩可以减少节点间数据传输对
IO
带宽压力,对于即席查询需要快速解压,建议
采用
Snappy
压缩。
Presto
优化之查询
SQL
1.4.1
只选择使用的字段
由于采用列式存储,选择需要的字段可加快字段的读取、减少数据量。避免采用
*
读取
所有字段。
![](https://i-blog.csdnimg.cn/blog_migrate/973d7ad3553b28a959a60503957594e8.png)
1.4.2
过滤条件必须加上分区字段
对于有分区的表,
where
语句中优先使用分区字段进行过滤。
acct_day
是分区字段,
visit_time
是具体访问时间。
![](https://i-blog.csdnimg.cn/blog_migrate/2be7ee0f898c3ebd3e2f64d489b315ca.png)
1.4.3 Group By
语句优化
合理安排
Group by
语句中字段顺序对性能有一定提升。将
Group By
语句中字段按照每
个字段
distinct
数据多少进行降序排列。
![](https://i-blog.csdnimg.cn/blog_migrate/c9d2b1cbfa5c844957ce4f74488b711f.png)
1.4.4 Order by 时使用 Limit
Order by
需要扫描数据到单个
worker
节点进行排序,导致单个
worker
需要大量内存。
如果是查询
Top N
或者
Bottom N
,使用
limit
可减少排序计算和内存压力。
![](https://i-blog.csdnimg.cn/blog_migrate/be63109186ad58605cd7fc2f96b559d1.png)
1.4.5
使用
Join
语句时将大表放在左边
Presto
中
join
的默认算法是
broadcast join
,即将
join
左边的表分割到多个
worker
,然后
将
join
右边的表数据整个复制一份发送到每个
worker
进行计算。如果右边的表数据量太大,
则可能会报内存溢出错误。
![](https://i-blog.csdnimg.cn/blog_migrate/0ecfd6b0a21ceb9a80e98efb7f6c59eb.png)
1.5
注意事项
1.5.1
字段名引用
避免和关键字冲突:
MySQL
对字段加反引号
`
、
Presto
对字段加
双引号分割
当然,如果字段名称不是关键字,可以不加这个双引号。
1.5.2
时间函数
对于
Timestamp
,需要进行比较的时候,需要添加
Timestamp
关键字,而
MySQL
中对
Timestamp
可以直接进行比较。
/*MySQL
的写法
*/
![](https://i-blog.csdnimg.cn/blog_migrate/71dc52eded41f91e5943a553c483c565.png)
1.5.3
不支持
INSERT OVERWRITE
语法
Presto
中不支持
insert overwrite
语法,只能先
delete
,然后
insert into
。
1.5.4 PARQUET
格式
Presto
目前支持
Parquet
格式,支持查询,但不支持
insert
。