深入理解Presto(3):Presto内存管理

简介: 上一篇文章,我们讲了Presto的架构。Presto是一款内存计算型的引擎,所以对于内存管理必须做到精细,才能保证query有序、顺利的执行,部分发生饿死、死锁等情况。 内存池 Presto采用逻辑的内存池,来管理不同类型的内存需求。

上一篇文章,我们讲了Presto的架构。Presto是一款内存计算型的引擎,所以对于内存管理必须做到精细,才能保证query有序、顺利的执行,部分发生饿死、死锁等情况。

内存池

Presto采用逻辑的内存池,来管理不同类型的内存需求。

Presto把整个内存划分成三个内存池,分别是System Pool ,Reserved Pool, General Pool。

image.png

  1. System Pool 是用来保留给系统使用的,默认为40%的内存空间留给系统使用。
  2. Reserved Pool和General Pool 是用来分配query运行时内存的。
  3. 其中大部分的query使用general Pool。 而最大的一个query,使用Reserved Pool, 所以Reserved Pool的空间等同于一个query在一个机器上运行使用的最大空间大小,默认是10%的空间。
  4. General则享有除了System Pool和General Pool之外的其他内存空间。

为什么要使用内存池

System Pool用于系统使用的内存,例如机器之间传递数据,在内存中会维护buffer,这部分内存挂载system名下。

那么,为什么需要保留区内存呢?并且保留区内存正好等于query在机器上使用的最大内存?

如果没有Reserved Pool, 那么当query非常多,并且把内存空间几乎快要占完的时候,某一个内存消耗比较大的query开始运行。但是这时候已经没有内存空间可供这个query运行了,这个query一直处于挂起状态,等待可用的内存。 但是其他的小内存query跑完后,又有新的小内存query加进来。由于小内存query占用内存小,很容易找到可用内存。 这种情况下,大内存query就一直挂起直到饿死。

所以为了防止出现这种饿死的情况,必须预留出来一块空间,共大内存query运行。 预留的空间大小等于query允许使用的最大内存。Presto每秒钟,挑出来一个内存占用最大的query,允许它使用reserved pool,避免一直没有可用内存供该query运行。

内存管理

image.png

Presto内存管理,分两部分:

  • query内存管理

    • query划分成很多task, 每个task会有一个线程循环获取task的状态,包括task所用内存。汇总成query所用内存。
    • 如果query的汇总内存超过一定大小,则强制终止该query。
  • 机器内存管理

    • coordinator有一个线程,定时的轮训每台机器,查看当前的机器内存状态。

当query内存和机器内存汇总之后,coordinator会挑选出一个内存使用最大的query,分配给Reserved Pool。

内存管理是由coordinator来管理的, coordinator每秒钟做一次判断,指定某个query在所有的机器上都能使用reserved 内存。那么问题来了,如果某台机器上,,没有运行该query,那岂不是该机器预留的内存浪费了?为什么不在单台机器上挑出来一个最大的task执行。原因还是死锁,假如query,在其他机器上享有reserved内存,很快执行结束。但是在某一台机器上不是最大的task,一直得不到运行,导致该query无法结束。

目录
相关文章
|
6月前
|
SQL 分布式计算 大数据
大数据处理平台Hive详解
【7月更文挑战第15天】Hive作为基于Hadoop的数据仓库工具,在大数据处理和分析领域发挥着重要作用。通过提供类SQL的查询语言,Hive降低了数据处理的门槛,使得具有SQL背景的开发者可以轻松地处理大规模数据。然而,Hive也存在查询延迟高、表达能力有限等缺点,需要在实际应用中根据具体场景和需求进行选择和优化。
|
流计算
Flink内存管理完全解读
Flink内存管理完全解读
110 0
|
SQL 分布式计算 Hadoop
配置Hive使用Spark执行引擎
在Hive中,可以通过配置来指定使用不同的执行引擎。Hive执行引擎包括:默认MR、tez、spark。
298 0
|
SQL 分布式计算 资源调度
hive-3.1.2安装以及使用tez作为执行引擎指南
本文介绍hive-3.1.2安装以及使用tez作为执行引擎指南
hive-3.1.2安装以及使用tez作为执行引擎指南
|
SQL 存储 分布式计算
Hive运行机制与使用
Hive运行机制与使用
151 0
|
SQL 存储 分布式计算
「Hive进阶篇」万字长文超详述hive企业级优化
肝了几个晚上,梳理总结了一份万字长文超详述hive企业级优化文章,也整理了一份hive优化总结思维导图和hive优化详细PDF文档,欢迎阅读。毕业几年了才想起以前大学时光创作的阿里云博客,借着10.1号祝贺祖国昌荣繁盛,庆祝国庆假期到来,重新拾起来,后续会在大数据技术领域创作发力,持续更新优质好文,欢迎关注。
「Hive进阶篇」万字长文超详述hive企业级优化
|
存储 缓存 分布式计算
flink内存管理
flink内存管理
flink内存管理
|
SQL 存储 分布式计算
Presto架构原理
Presto架构原理
559 0
Presto架构原理
|
SQL 存储 分布式计算
Hive 调优集锦,让 Hive 调优想法不再碎片化1
Hive 调优集锦,让 Hive 调优想法不再碎片化1
357 0
Hive 调优集锦,让 Hive 调优想法不再碎片化1
|
SQL 机器学习/深度学习 存储
Hive 调优集锦,让 Hive 调优想法不再碎片化2
Hive 调优集锦,让 Hive 调优想法不再碎片化2
381 0
Hive 调优集锦,让 Hive 调优想法不再碎片化2