Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Presto安装完成之后需要做的

Presto安装完成之后需要做的

作者头像
叁金
发布于 2019-07-25 10:39:34
发布于 2019-07-25 10:39:34
1.1K00
代码可运行
举报
文章被收录于专栏:叁金大数据叁金大数据
运行总次数:0
代码可运行

Presto因其优秀的查询速度被我们所熟知,它本身基于MPP架构,可以快速的对Hive数据进行查询,同时支持扩展Connector,目前对Mysql、MongoDBCassandra、Hive等等一系列的数据库都提供了Connector进行支持。是我们常用的SQL on Hadoop的解决方案。那么我们今天就来看一下,当我们选择Presto作为我们的查询引擎之后,我们需要考虑的问题。

Presto 性能调优和稳定性

Presto 存在的问题
  1. Coordinator单点问题(常见方案:ip漂移、nginx代理动态获取等)
  2. 大查询容易OOM(0.186+版本支持dump到磁盘 未验证)
  3. 没有容错能力,无重试机制
  4. Presto部署环境复杂,MPP架构容易受到单台机器影响
  5. Presto并发能力不足
调优策略
  1. 部署多台Coordinator避免单点问题,上层封装一层查询服务 避免jdbc直连
  2. 如果有必要在查询服务进行重试操作(需要判断任务状态)
  3. 对worker相关内存参数进行合理配置,避免OOM
  4. 启用Presto本身资源队列的同时,构建符合业务场景的查询队列,控制并发量及查询优先级,确保任务高效完成
  5. 开发Presto监控系统,监测Presto集群状态,及时预警。动态调整Presto集群规模
内存调优

Presto分为三类内存池,分别为GENERAL_POOL、RESERVED_POOL、SYSTEM_POOL。

SYSTEM_POOL是系统预留内存,worker初始化和执行任务必要的内存,默认为Xmx0.4 也可由resources.reserved-system-memory指定 RESERVED_POOL是最大查询内存,Presto会将当前好用内存最大的query切到该内存区域,默认为Xmx0.1 由query.max-memory-per-node配置 GENERAL_POOL其他查询内存,即除最大查询外其他query的查询内存,大小为Xmx-SYSTEM_POOL-RESERVED_POOL

整体内存配置受以下场景的影响:

  1. 用户查询数据量、复杂性(决定该用多大的查询内存)
  2. 用户查询的并发度(决定该用多大的jvm堆)

需要注意的是:单纯的增大RESERVED_POOL的值并不能解决Presto的查询问题,因为RESERVED_POOL大部分时间是不参与计算的,只有满足以下情景才会被使用,而且只能被一个Query所使用。

  1. GENERAL_POOL有节点出现阻塞节点的情况,即内存不足
  2. RESERVED_POOL没有被使用

所以三者需要配置合理的值,如果并发比较大需要SYSTEM_POOL保持默认或者稍微再大一点,RESERVED_POOL可以稍微增大到八分之一左右。

同时对于jvm OOM的问题,需要对Presto的jvm.config进行配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-XX:G1ReservePercent=15
-XX:InitiatingHeapOccupancyPercent=40
-XX:ConcGCThreads=8

Presto监控

Presto自带的监控页面只能显示当前Presto集群的状态和最近的部分查询,不能满足需求。需要对查询相关信息进行数据采集

  1. 查询基本信息(状态、内存使用、总时间、错误信息等)
  2. 查询性能信息(每一步的时间、数据输入输出数据量信息等,包括stage详情和stage下task的详情)
  3. 异常预警

Presto后续优化

  1. 控制分区表最大查询分区数量限制
  2. 控制单个查询生成的split数量上限,防止计算资源大量消耗
  3. 自动发现并杀死长时间运行的查询
  4. Presto查询限流(限制超过xx数据量的查询)
  5. 启用Presto资源队列
  6. 统一查询引擎

Presto当前版本内存限制和管理

单机维度
  1. GENERAL_POOL每次内存申请时,都会判断内存使用量是否超过了最大内存,如果超过了就报错,错误为“Query exceeded local memory limit of x”,这保护了Presto会无限申请内存,只会导致当前查询出错。同时,如果该节点的GENERAL_POOL可使用内存以及可回收内存为0,那么认为该node为Block node。
  2. RESERVED_POOL可以认为是查询最大的SQL,其能满足GENERAL_POOL的内存限制策略,那么肯定会满足RESERVED_POOL的策略(复用了GENERAL_POOL策略)。
  3. RESERVED_POOL目前版本未发现可以限制内存,所以当并发非常高,且scan的数据非常大时,有低概率会引起OOM问题。但是配合Resource Group,内存设置合理,也基本会避免OOM问题。
集群维度

同时满足以下两点时,Presto便认为集群超出要求的内存了:

  • GENERAL_POOL出现阻塞节点(Block node)
  • RESERVED_POOL已经被使用
  • 当判断出集群超出CLuster Memory时,有两种方式管理内存:
  1. 挨个遍历每个查询,判断当前查询占用的总内存是否超过了query.max-memory(config.properties里配置),如果超过了,那么该查询就被failed。
  2. 如果query.max-memory配置的不合理,值非常大,那么可能过了5秒(默认时间)依然不满足第一种情形,那么将会使用第二种方法管理查询。第二种管理方法又分为两种小的管理,根据LowMemoryKillerPolicy来决定Kill查询策略,其分为total-reservation和total-reservation-on-blocked-nodes。配置total-reservation的作用是kill掉所有查询里最费内存的查询;而total-reservation-on-blocked-nodes杀死在内存不足(阻塞)的节点上使用最多内存的查询。
Resource Groups

Resource Groups 可以认为是Presto实现了一个弱资源限制和隔离功能。其可以为每个group指定队列大小、并发大小、内存使用大小。为每个group设置合理的hardConcurrencyLimit(最大并发数)、softMemoryLimit(内存最大使用值)及maxQueued(队列大小)一方面可以使不同业务影响降低,另一方面也大概率避免OOM问题,当然善于运用user及做下二次开发,就可以让Presto支持多用户共用同一分组和权限认证功能。

参考资料: http://armsword.com/2018/05/22/the-memory-management-and-tuning-experience-of-presto/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Presto内存调优及原理(基础篇)
Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。
sundyxiong
2018/07/04
9.6K7
Presto内存调优及原理(基础篇)
Presto原理&调优&面试&实战全面升级版
很久之前,曾经写过一篇 《Presto在大数据领域的实践和探索》 。文中详细讲解了Presto的原理和应用。
王知无-import_bigdata
2021/07/12
2.3K0
Presto原理&调优&面试&实战全面升级版
Presto 安装与部署
Presto 在访问 Hive 中的数据时需要得到 Hive 中的所有元数据信息,因此需要部署一个 HiveMetaStore 服务提供 Hive 的元数据信息。
smartsi
2020/02/25
3.1K1
大数据Presto(二):Presto安装搭建
https://prestodb.io/docs/current/installation/deployment.html#installing-presto
Lansonli
2022/10/08
1.7K0
大数据Presto(二):Presto安装搭建
大数据平台建设 —— SQL查询引擎之Presto
Presto的安装方式有两种,一是到官网下载编译好的二进制包进行安装,二是从Github仓库上拉取源码进行编译安装。为了简单起见,我这里选择第一种方式,Server和Client都需要下载。
端碗吹水
2020/11/17
2.5K0
大数据平台建设 —— SQL查询引擎之Presto
快速学习-Presto安装部署
支持以下文件类型:Text, SequenceFile, RCFile, ORC 此外,需要有远程的Hive元数据。 不支持本地或嵌入模式。 Presto不使用MapReduce,只需要HDFS。
cwl_java
2020/03/24
3.4K0
Presto实战
Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。
全栈程序员站长
2022/09/20
2.1K0
Presto连接MySQL
准备两台机器,机器名为 bd1 和 bd2,,并且在这两个节点上安装 hadoop,hive,并且准备一个mysql数据库。
kongxx
2018/12/04
2.8K0
比hive快10倍的大数据查询利器-- presto
目前最流行的大数据查询引擎非hive莫属,它是基于MR的类SQL查询工具,会把输入的查询SQL解释为MapReduce,能极大的降低使用大数据查询的门槛, 让一般的业务人员也可以直接对大数据进行查询。但因其基于MR,运行速度是一个弊端,通常运行一个查询需等待很久才会有结果。对于此情况,创造了hive的facebook不负众望,创造了新神器---presto,其查询速度平均比hive快10倍,现在就来部署体验一下吧。
俊才
2019/08/07
2.2K0
比hive快10倍的大数据查询利器-- presto
presto环境搭建
1、环境准备 支持操作系统: Linux or Mac OS X Java 8, 64-bit Python 2.4+
cwl_java
2020/03/24
1.8K0
大数据实时查询-Presto集群部署搭建
Presto是一个分布式SQL查询引擎, 它被设计为用来专门进行高速、实时的数据分析。它支持标准的ANSI SQL,包括复杂查询、聚合(aggregation)、连接(join)和窗口函数(window functions)。Presto的运行模型和Hive或MapReduce有着本质的区别。Hive将查询翻译成多阶段的MapReduce任务, 一个接着一个地运行。 每一个任务从磁盘上读取输入数据并且将中间结果输出到磁盘上。 然而Presto引擎没有使用MapReduce。它使用了一个定制的查询和执行引擎和响应的操作符来支持SQL的语法。除了改进的调度算法之外, 所有的数据处理都是在内存中进行的。 不同的处理端通过网络组成处理的流水线。 这样会避免不必要的磁盘读写和额外的延迟。 这种流水线式的执行模型会在同一时间运行多个数据处理段, 一旦数据可用的时候就会将数据从一个处理段传入到下一个处理段。 这样的方式会大大的减少各种查询的端到端响应时间。
高广超
2018/12/12
3.5K0
Presto集群部署
  随着大数据的普及,大部分企业的大数据查询与统计渐渐出现瓶颈。虽说存储方面有分布式的HDFS,HBSE,MongoDB等可以应对,但是面对千万级别(1x10^7)界别的数据量查询时,以上组件也不免显得力不从心。正因此,分布式查询引擎应运而生。而基于内存查询的分布式查询引擎--Presto正是其中之一。很多人都说现代计算机技术的发展都是拼开源,拼社区。而Presto的社区也不小,国际化的Facebook,也有国内电商大头京东。正因此,在经过实际尝试与测验之后决定简要地介绍一下presto的部署方式,希望能给有需要的朋友提供一些参考。
云海谷天
2022/08/09
1.4K0
Presto集群部署
如何在CDH集群中部署Presto
温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。 Fayson的github: https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.文档编写目的 ---- Presto是由Facebook开源,完全基于内存的并行计算以及分布式SQL交互式查询引擎。它可以共享Hive的元数据,然后直接访问HDFS中的数据,同时支持Hadoop中常见的文件格式比如文本,ORC和Parquet。同Impala一样,作为Hado
Fayson
2018/07/12
4.9K0
使用presto查询同步到hive的hudi数据
上述配置项为presto-server配置信息,同时将coordinator以及worker都集中在同一台主机。
从大数据到人工智能
2022/01/19
1.2K0
使用presto查询同步到hive的hudi数据
Presto之分布式安装查询Hive
    工作需要使用Presto,记录下。Presto需要Hive,安装Hive的步骤略,可参考我的这篇博客。
克虏伯
2019/07/29
1.4K0
OLAP引擎:基于Presto组件进行跨数据源分析
Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节,Presto虽然具备解析SQL的能力,但它并不属于标准的数据库范畴。
知了一笑
2021/04/29
1.2K0
OLAP引擎:基于Presto组件进行跨数据源分析
从 0 到 1 学习 Presto,这一篇就够了
Presto 作为现在在企业中流行使用的即席查询框架,已经在不同的领域得到了越来越多的应用。本期内容,我会从一个初学者的角度,带着大家从 0 到 1 学习 Presto,希望大家能够有所收获!
大数据梦想家
2021/10/22
8.5K1
Presto+yanagishima部署
Presto下载页面 https://prestodb.io/docs/current/installation/deployment.html
范一刀
2022/06/29
1.1K0
Presto+yanagishima部署
Presto Web UI
每个 Presto 服务都会提供一个 Web 界面,通常称为 Presto Web UI。可以使用与 Presto 服务器相同地址和 HTTP 端口号来访问 Presto Web UI。默认情况下,端口为 8080。例如,http://presto.example.com:8080。Presto Web UI 可在每个 Presto 的 Coordinator 上访问,并可用于检查和监控 Presto 集群以及已处理的查询。
smartsi
2020/08/04
6.2K0
Presto Web UI
小姐姐都能听懂的 ​Presto 详解!揭秘 Presto 最佳实践
Presto 最初是由 Facebook 开发的一个分布式 SQL 执行引擎, 它被设计为用来专门进行高速、实时的数据分析,以弥补 Hive 在速度和对接多种数据源上的短板。
玄姐谈AGI
2021/02/08
3K0
相关推荐
Presto内存调优及原理(基础篇)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验