本教程主要介绍Presto分布式SQL查询引擎的使用方法和实战技巧,包括安装配置、数据源连接、查询优化等内容。风哥教程参考bigdata官方文档Presto用户指南、配置说明等相关内容。
通过本教程的学习,您将掌握Presto的使用方法,实现对多种数据源的高效查询,为大数据分析和处理提供强大的查询支持。
目录大纲
Part01-基础概念与理论知识
1.1 Presto概述
Presto是一个分布式SQL查询引擎,主要功能:
- 支持多种数据源,如HDFS、Hive、MySQL、PostgreSQL等
- 高性能查询,支持PB级数据的快速分析
- 支持标准SQL语法
- 支持复杂查询,如连接、聚合、窗口函数等
- 可扩展架构,支持集群部署
Presto适合构建实时数据查询平台,为大数据分析和处理提供强大的查询支持,学习交流加群风哥微信: itpux-com
1.2 Presto架构原理
Presto架构包括:
- Coordinator:协调器,负责查询解析、计划生成和任务调度
- Worker:工作节点,执行查询任务
- Connector:连接器,用于连接不同的数据源
- Discovery Service:发现服务,用于服务发现
- Exchange:数据交换,用于节点间数据传输
1.3 核心概念
核心概念:
- Catalog:数据源的集合,对应一个连接器
- Schema:数据库模式,对应数据源中的数据库
- Table:表,对应数据源中的表
- Query:查询,用户提交的SQL语句
- Plan:执行计划,查询的执行步骤
- Task:任务,执行计划的基本单位
Part02-生产环境规划与建议
2.1 环境配置
风哥提示:Presto环境配置应考虑查询负载、数据源类型和可靠性要求,确保系统的稳定运行。
环境配置建议:
- 安装Java JDK 8或更高版本
- 配置足够的内存和CPU资源
- 确保网络连接畅通,数据源可访问
- 使用SSD存储,提高查询性能
- 配置合理的JVM参数
2.2 性能调优
性能调优建议:
- 调整JVM参数:设置合适的堆内存和GC策略
- 优化查询计划:避免全表扫描,使用索引
- 调整并发度:根据集群资源设置合理的并发查询数
- 使用分区裁剪:减少数据扫描量
- 优化连接器配置:根据数据源特点调整连接器参数
2.3 高可用设计
高可用设计:
- 部署多个Coordinator:避免单点故障
- 使用负载均衡:分发查询请求到多个Coordinator
- 部署足够的Worker:提高查询处理能力
- 实现监控告警:及时发现和解决问题
- 定期备份配置:防止配置丢失
Part03-生产环境项目实施方案
3.1 Presto安装与配置
安装Presto:
wget
https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.280/presto-server-0.280.tar.gz
# 解压
tar -xzvf presto-server-0.280.tar.gz -C /bigdata/app
# 创建配置目录
mkdir -p /bigdata/app/presto-server-0.280/etc/{catalog,node}
# 配置节点信息
echo ‘node.environment=production’ > /bigdata/app/presto-server-0.280/etc/node.properties
echo ‘node.id=node1’ >> /bigdata/app/presto-server-0.280/etc/node.properties
echo ‘node.data-dir=/bigdata/fgdata/presto/data’ >>
/bigdata/app/presto-server-0.280/etc/node.properties
# 配置JVM
echo ‘-server’ > /bigdata/app/presto-server-0.280/etc/jvm.config
echo ‘-Xmx16G’ >> /bigdata/app/presto-server-0.280/etc/jvm.config
echo ‘-XX:+UseG1GC’ >> /bigdata/app/presto-server-0.280/etc/jvm.config
echo ‘-XX:G1HeapRegionSize=32M’ >> /bigdata/app/presto-server-0.280/etc/jvm.config
echo ‘-XX:+ExplicitGCInvokesConcurrent’ >> /bigdata/app/presto-server-0.280/etc/jvm.config
echo ‘-XX:+ExitOnOutOfMemoryError’ >> /bigdata/app/presto-server-0.280/etc/jvm.config
echo ‘-XX:+HeapDumpOnOutOfMemoryError’ >> /bigdata/app/presto-server-0.280/etc/jvm.config
echo ‘-XX:HeapDumpPath=/bigdata/fgdata/presto/dumps’ >>
/bigdata/app/presto-server-0.280/etc/jvm.config
# 配置Coordinator
echo ‘coordinator=true’ > /bigdata/app/presto-server-0.280/etc/config.properties
echo ‘node-scheduler.include-coordinator=false’ >>
/bigdata/app/presto-server-0.280/etc/config.properties
echo ‘http-server.http.port=8080’ >> /bigdata/app/presto-server-0.280/etc/config.properties
echo ‘query.max-memory=50GB’ >> /bigdata/app/presto-server-0.280/etc/config.properties
echo ‘query.max-memory-per-node=8GB’ >> /bigdata/app/presto-server-0.280/etc/config.properties
echo ‘query.max-total-memory-per-node=12GB’ >>
/bigdata/app/presto-server-0.280/etc/config.properties
echo ‘discovery-server.enabled=true’ >> /bigdata/app/presto-server-0.280/etc/config.properties
echo ‘discovery.uri=http://fgedu01:8080’ >> /bigdata/app/presto-server-0.280/etc/config.properties
# 配置Worker
# 在Worker节点上执行
echo ‘coordinator=false’ > /bigdata/app/presto-server-0.280/etc/config.properties
echo ‘http-server.http.port=8080’ >> /bigdata/app/presto-server-0.280/etc/config.properties
echo ‘query.max-memory=50GB’ >> /bigdata/app/presto-server-0.280/etc/config.properties
echo ‘query.max-memory-per-node=8GB’ >> /bigdata/app/presto-server-0.280/etc/config.properties
echo ‘query.max-total-memory-per-node=12GB’ >>
/bigdata/app/presto-server-0.280/etc/config.properties
echo ‘discovery.uri=http://fgedu01:8080’ >> /bigdata/app/presto-server-0.280/etc/config.properties
3.2 数据源连接
配置数据源:
cat > /bigdata/app/presto-server-0.280/etc/catalog/hive.properties << 'EOF'
connector.name=hive-hadoop2
hive.metastore.uri=thrift://fgedu01:9083
hive.config.resources=/bigdata/app/hadoop-3.3.5/etc/hadoop/core-site.xml,/bigdata/app/hadoop-3.3.5/etc/hadoop/hdfs-site.xml
EOF
# 配置MySQL数据源
cat > /bigdata/app/presto-server-0.280/etc/catalog/mysql.properties << 'EOF'
connector.name=mysql
connection-url=jdbc:mysql://192.168.1.100:3306
connection-user=fgedu
connection-password=fgedu123
EOF
# 配置PostgreSQL数据源
cat > /bigdata/app/presto-server-0.280/etc/catalog/postgresql.properties << 'EOF'
connector.name=postgresql
connection-url=jdbc:postgresql://192.168.1.101:5432
connection-user=fgedu
connection-password=fgedu123
EOF
3.3 查询执行
启动Presto:
/bigdata/app/presto-server-0.280/bin/launcher start
# 启动Worker
/bigdata/app/presto-server-0.280/bin/launcher start
# 连接Presto
/bigdata/app/presto-cli-0.280-executable.jar –server fgedu01:8080 –catalog hive –schema fgedu
Part04-生产案例与实战讲解
4.1 基本查询操作
案例:基本查询操作
# 连接Presto
presto:fgedu>
# 查看表
Table
———————-
customers
sales
sales_summary
(3 rows)
Query 20260408_100000_00001_abcde, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
0:00:00.123 [3 rows, 84B] [24 rows/s, 689B/s]
# 查询数据
id | product_id | customer_id | amount | sale_date | region
—-+————+————-+——–+————+——–
1 | P001 | C001 | 100.0 | 2026-04-08 | North
2 | P002 | C002 | 200.0 | 2026-04-08 | South
3 | P003 | C003 | 300.0 | 2026-04-09 | East
4 | P004 | C004 | 400.0 | 2026-04-09 | West
5 | P005 | C005 | 500.0 | 2026-04-10 | North
(5 rows)
Query 20260408_100000_00002_abcde, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
0:00:00.234 [5 rows, 210B] [21 rows/s, 900B/s]
# 聚合查询
region | total_sales
——–+————-+
North | 600.0
South | 800.0
East | 300.0
West | 400.0
(4 rows)
Query 20260408_100000_00003_abcde, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
0:00:00.345 [4 rows, 144B] [11 rows/s, 417B/s]
4.2 多数据源查询
案例:多数据源查询
# 跨数据源连接查询
-> FROM hive.fgedu.sales s
-> JOIN mysql.fgedudb.customers c
-> ON s.customer_id = c.id
-> LIMIT 5;
id | product_id | amount | name
—-+————+——–+———-
1 | P001 | 100.0 | Alice
2 | P002 | 200.0 | Bob
3 | P003 | 300.0 | Charlie
4 | P004 | 400.0 | David
5 | P005 | 500.0 | Eve
(5 rows)
Query 20260408_100000_00004_abcde, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
0:00:01.234 [5 rows, 210B] [4 rows/s, 170B/s]
4.3 查询优化实战
案例:查询优化
# 查看查询计划
Query Plan
———————————————————————————————————————————————————————————-
Fragment 0 [SINGLE]
Output layout: [region, total_sales]
Output partitioning: SINGLE []
Stage 1 [AGGREGATE]
Output layout: [region, total_sales]
Output partitioning: SINGLE []
Grouped by: [region]
Stage 2 [SCAN]
Output layout: [region, amount]
Output partitioning: HASH [region]
ScanFilterProject[table = hive.fgedu.sales, filterPredicate = true]
Layout: [region:varchar(6), amount:double]
Estimates:
Input rows: 10000
Input size: 1.0 MB
Output rows: 10000 (100.00%)
Output size: 1.0 MB (100.00%)
region := region
amount := amount
(15 rows)
Query 20260408_100000_00005_abcde, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
0:00:00.123 [15 rows, 1.2KB] [122 rows/s, 9.8KB/s]
# 使用分区裁剪
id | product_id | customer_id | amount | sale_date | region
—-+————+————-+——–+————+——–
1 | P001 | C001 | 100.0 | 2026-04-08 | North
2 | P002 | C002 | 200.0 | 2026-04-08 | South
(2 rows)
Query 20260408_100000_00006_abcde, FINISHED, 1 node
Splits: 19 total, 1 done (5.26%)
0:00:00.098 [2 rows, 84B] [20 rows/s, 857B/s]
Part05-风哥经验总结与分享
5.1 常见问题解决方案
常见问题解决方案:
- 查询执行慢:优化查询计划,使用分区裁剪,避免全表扫描
- 内存溢出:调整JVM参数,增加内存分配,限制查询内存使用
- 连接失败:检查数据源连接信息,确保数据源可访问
- 并发查询限制:调整并发度,避免过多查询同时执行
- 连接器问题:确保连接器版本与Presto版本兼容
5.2 最佳实践分享
风哥提示:在Presto使用中,应注重查询优化和资源管理,确保系统的高效运行。
最佳实践分享:
- 查询优化:使用分区裁剪,避免全表扫描,优化JOIN操作
- 资源管理:根据查询负载调整内存和CPU资源
- 数据源配置:根据数据源特点调整连接器参数
- 监控告警:建立查询性能和系统状态监控机制
- 版本管理:定期升级Presto版本,修复bug和安全漏洞
5.3 性能优化建议
性能优化建议:
- 内存配置:根据查询负载设置合理的内存限制
- 并发度调整:根据集群资源设置合理的并发查询数
- 查询计划优化:使用EXPLAIN分析查询计划,优化执行路径
- 分区策略:为表设置合理的分区策略,提高查询性能
- 数据压缩:使用压缩减少数据传输和存储开销
- 更多视频教程www.fgedu.net.cn
通过本教程的学习,您已经掌握了Presto分布式SQL查询引擎的使用方法和实战技巧。在实际生产环境中,应根据具体业务场景和数据特点,优化查询执行和资源管理,确保系统的高效运行,为大数据分析和处理提供强大的查询支持。学习交流加群风哥QQ113257174
更多学习教程公众号风哥教程itpux_com
from bigdata视频:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
