龙8国际娛乐网页

Presto安装完成之后需要做的

龙8国际网页版 ?

Qianfeng JAVA Development Institute我想分享3天前

image.php?url=0MmnS3zwx3

Presto以其出色的查询速度而闻名。它基于MPP架构,可以快速查询Hive数据。它还支持扩展连接器。目前,它为Mysql,MongoDB,Cassandra,Hive等提供了一系列数据库。连接器支持。是我们在Hadoop解决方案上的常见SQL。让我们来看看今天,当我们选择Presto作为我们的查询引擎时,我们需要考虑这个问题。

Presto性能调整和稳定性

Presto的问题

协调器单点问题(常见解决方案:ip漂移,nginx代理动态采集等)

大型查询很容易OOM(0.186+版本支持转储到未验证的磁盘)

没有容错,没有重试机制

Presto部署环境很复杂,MPP架构易受单个机器的影响

Presto并发性不足

调整策略

部署多个协调器以避免单点问题,上层封装一层查询服务以避免jdbc直接连接

如果有必要重试查询服务(需要确定任务状态)

合理配置与工作人员相关的内存参数以避免OOM

启用Presto自己的资源队列,构建符合业务场景的查询队列,控制并发和查询优先级,并确保任务有效完成

开发Presto监控系统,监控Presto集群的状态并及时发出警告。动态调整Presto群集的大小

内存调整

Presto分为三种类型的内存池,即GENERAL_POOL,RESERVED_POOL和SYSTEM_POOL。

SYSTEM_POOL是系统保留的内存,是工作者初始化和执行任务所必需的内存。默认值为Xmx_0.4。资源可以由resources.reserved-system-memory指定。 RESERVED_POOL是最大查询内存。 Presto将使用最大内存切断查询。内存区域,默认为Xmx_0.1,由query.max-memory-per-node

配置

GENERAL_POOL其他查询内存,即除最大查询外的其他查询的查询内存,大小为Xmx-SYSTEM_POOL-RESERVED_POOL

整体内存配置受以下情况影响:

用户查询数据量,复杂度(确定应使用多少查询内存)

用户查询的并发度(确定应该使用多大的jvm堆)

应该注意的是,简单地增加RESERVED_POOL的值并不能解决Presto的查询问题,因为RESERVED_POOL大部分时间都不参与计算,只会使用以下场景,并且只能由一个Query使用。

GENERAL_POOL有一个节点被阻塞的节点,即内存不足

RESERVED_POOL未被使用

因此,三者需要配置合理的值。如果并发数很大,SYSTEM_POOL需要保持默认值或略大,并且RESERVED_POOL可以略微增加到大约八分之一。

同时,对于jvm OOM,您需要配置Presto的jvm.config:

-XX: G1ReservePercent=15-XX: InitiatingHeapOccupancyPercent=40-XX: ConcGCThreads=8

Presto监控

Presto自己的监控页面只能显示当前Presto集群的状态和最新的部分查询,这些查询无法满足需求。需要有关查询相关信息的数据收集:

查询基本信息(状态,内存使用情况,总时间,错误信息等)

查询性能信息(每个步骤的时间,数据输入和输出数据量信息等,包括阶段详细信息和阶段下任务的详细信息)

异常警告

Presto后续优化

控制分区表中的最大查询分区数

控制单个查询生成的最大拆分数,以防止消耗大量计算资源

自动发现并终止长时间运行的查询

Presto查询当前限制(限制查询超过xx数据量)

启用Presto资源队列

统一查询引擎

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

独立维度

GENERAL_POOL将在每次应用内存时判断内存使用量是否超过最大内存。如果超过错误,则错误为“查询超出x的本地内存限制”,这可以保护Presto无限地申请内存,这只会导致当前查询。发生错误。同时,如果节点的GENERAL_POOL可以使用存储器并且可回收存储器为0,则该节点被认为是块节点。

可以将RESERVED_POOL视为查询的最大SQL,它可以满足GENERAL_POOL内存限制策略,那么它肯定会满足RESERVED_POOL策略(循环使用GENERAL_POOL策略)。

尚未发现当前版本的RESERVED_POOL限制内存,因此当并发性非常高且扫描数据非常大时,OOM问题发生的可能性很小。但是使用资源组,内存设置是合理的,基本上避免了OOM问题。

群集维度

当满足以下两个要点时,Presto会认为群集超出了所需的内存:

GENERAL_POOL有一个阻塞节点

RESERVED_POOL已在使用中

当确定群集超出CLuster内存时,有两种方法可以管理内存:

遍历每个查询以确定当前查询占用的总内存是否超过query.max-memory(在config.properties中配置)。如果超出,则查询失败。

如果query.max-memory配置不合理且值非常大,则可能需要5秒(默认时间)仍然不满足第一种情况,那么第二种方法将用于管理查询。第二种管理方法分为两个小管理。 Kill查询策略是根据LowMemoryKillerPolicy确定的,LowPemoryKillerPolicy分为total-reservation和total-reservation-blocked-nodes节点。配置总预留的目的是在所有查询中终止最昂贵的查询;并且被阻止的整个预留节点会杀死在内存不足(阻塞)的节点上使用最多内存的查询。

资源组

可以将资源组视为Presto实施的弱资源限制和隔离功能。它可以指定每个组的队列大小,并发大小和内存使用大小。为每个组设置合理的hardConcurrencyLimit(最大并发),softMemoryLimit(最大内存使用值)和maxQueued(队列大小)一方面可以减少不同服务的影响,另一方面可以避免OOM问题,当然,好用用户和下一个开发,您可以让Presto支持多个用户共享相同的组和权限身份验证。

收集报告投诉

image.php?url=0MmnS3zwx3

Presto以其出色的查询速度而闻名。它基于MPP架构,可以快速查询Hive数据。它还支持扩展连接器。目前,它为Mysql,MongoDB,Cassandra,Hive等提供了一系列数据库。连接器支持。是我们在Hadoop解决方案上的常见SQL。让我们来看看今天,当我们选择Presto作为我们的查询引擎时,我们需要考虑这个问题。

Presto性能调整和稳定性

Presto的问题

协调器单点问题(常见解决方案:ip漂移,nginx代理动态采集等)

大型查询很容易OOM(0.186+版本支持转储到未验证的磁盘)

没有容错,没有重试机制

Presto部署环境很复杂,MPP架构易受单个机器的影响

Presto并发性不足

调整策略

部署多个协调器以避免单点问题,上层封装一层查询服务以避免jdbc直接连接

如果有必要重试查询服务(需要确定任务状态)

合理配置与工作人员相关的内存参数以避免OOM

启用Presto自己的资源队列,构建符合业务场景的查询队列,控制并发和查询优先级,并确保任务有效完成

开发Presto监控系统,监控Presto集群的状态并及时发出警告。动态调整Presto群集的大小

内存调整

Presto分为三种类型的内存池,即GENERAL_POOL,RESERVED_POOL和SYSTEM_POOL。

SYSTEM_POOL是系统保留的内存,是工作者初始化和执行任务所必需的内存。默认值为Xmx_0.4。资源可以由resources.reserved-system-memory指定。 RESERVED_POOL是最大查询内存。 Presto将使用最大内存切断查询。内存区域,默认为Xmx_0.1,由query.max-memory-per-node

配置

GENERAL_POOL其他查询内存,即除最大查询外的其他查询的查询内存,大小为Xmx-SYSTEM_POOL-RESERVED_POOL

整体内存配置受以下情况影响:

用户查询数据量,复杂度(确定应使用多少查询内存)

用户查询的并发度(确定应该使用多大的jvm堆)

应该注意的是,简单地增加RESERVED_POOL的值并不能解决Presto的查询问题,因为RESERVED_POOL大部分时间都不参与计算,只会使用以下场景,并且只能由一个Query使用。

GENERAL_POOL有一个节点被阻塞的节点,即内存不足

RESERVED_POOL未被使用

因此,三者需要配置合理的值。如果并发数很大,SYSTEM_POOL需要保持默认值或略大,并且RESERVED_POOL可以略微增加到大约八分之一。

同时,对于jvm OOM,您需要配置Presto的jvm.config:

-XX: G1ReservePercent=15-XX: InitiatingHeapOccupancyPercent=40-XX: ConcGCThreads=8

Presto监控

Presto自己的监控页面只能显示当前Presto集群的状态和最新的部分查询,这些查询无法满足需求。需要有关查询相关信息的数据收集:

查询基本信息(状态,内存使用情况,总时间,错误信息等)

查询性能信息(每个步骤的时间,数据输入和输出数据量信息等,包括阶段详细信息和阶段下任务的详细信息)

异常警告

Presto后续优化

控制分区表中的最大查询分区数

控制单个查询生成的最大拆分数,以防止消耗大量计算资源

自动发现并终止长时间运行的查询

Presto查询当前限制(限制查询超过xx数据量)

启用Presto资源队列

统一查询引擎

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

独立维度

GENERAL_POOL将在每次应用内存时判断内存使用量是否超过最大内存。如果超过错误,则错误为“查询超出x的本地内存限制”,这可以保护Presto无限地申请内存,这只会导致当前查询。发生错误。同时,如果节点的GENERAL_POOL可以使用存储器并且可回收存储器为0,则该节点被认为是块节点。

可以将RESERVED_POOL视为查询的最大SQL,它可以满足GENERAL_POOL内存限制策略,那么它肯定会满足RESERVED_POOL策略(循环使用GENERAL_POOL策略)。

尚未发现当前版本的RESERVED_POOL限制内存,因此当并发性非常高且扫描数据非常大时,OOM问题发生的可能性很小。但是使用资源组,内存设置是合理的,基本上避免了OOM问题。

群集维度

当满足以下两个要点时,Presto会认为群集超出了所需的内存:

GENERAL_POOL有一个阻塞节点

RESERVED_POOL已在使用中

当确定群集超出CLuster内存时,有两种方法可以管理内存:

遍历每个查询以确定当前查询占用的总内存是否超过query.max-memory(在config.properties中配置)。如果超出,则查询失败。

如果query.max-memory配置不合理且值非常大,则可能需要5秒(默认时间)仍然不满足第一种情况,那么第二种方法将用于管理查询。第二种管理方法分为两个小管理。 Kill查询策略是根据LowMemoryKillerPolicy确定的,LowPemoryKillerPolicy分为total-reservation和total-reservation-blocked-nodes节点。配置总预留的目的是在所有查询中终止最昂贵的查询;并且被阻止的整个预留节点会杀死在内存不足(阻塞)的节点上使用最多内存的查询。

资源组

可以将资源组视为Presto实施的弱资源限制和隔离功能。它可以指定每个组的队列大小,并发大小和内存使用大小。为每个组设置合理的hardConcurrencyLimit(最大并发),softMemoryLimit(最大内存使用值)和maxQueued(队列大小)一方面可以减少不同服务的影响,另一方面可以避免OOM问题,当然,好用用户和下一个开发,您可以让Presto支持多个用户共享相同的组和权限身份验证。