1. 首页 > Hadoop教程 > 正文

大数据教程FG115-Presto分布式SQL查询引擎实战

本教程主要介绍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:

# 下载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 数据源连接

配置数据源:

# 配置Hive数据源
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:

# 启动Coordinator
/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

$ java -jar presto-cli-0.280-executable.jar –server fgedu01:8080 –catalog hive –schema fgedu
presto:fgedu>

# 查看表

presto:fgedu> SHOW TABLES;
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]

# 查询数据

presto:fgedu> SELECT * FROM sales LIMIT 5;
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]

# 聚合查询

presto:fgedu> SELECT region, SUM(amount) AS total_sales FROM sales GROUP BY region;
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 多数据源查询

案例:多数据源查询

# 跨数据源连接查询

presto:fgedu> SELECT s.id, s.product_id, s.amount, c.name
-> 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 查询优化实战

案例:查询优化

# 查看查询计划

presto:fgedu> EXPLAIN SELECT region, SUM(amount) AS total_sales FROM sales GROUP BY region;
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]

# 使用分区裁剪

presto:fgedu> SELECT * FROM sales WHERE sale_date = ‘2026-04-08’;
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

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息