美文网首页
Presto内存数据管理

Presto内存数据管理

作者: liuzx32 | 来源:发表于2020-06-18 18:29 被阅读0次

内存管理

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内存管理,分两部分:

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

  2. 机器内存管理
    coordinator有一个线程,定时的轮训每台机器,查看当前的机器内存状态。
    当query内存和机器内存汇总之后,coordinator会挑选出一个内存使用最大的query,分配给Reserved Pool。

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

相关文章

  • Presto内存数据管理

    内存管理 Presto是一款内存计算型的引擎,所以对于内存管理必须做到精细,才能保证query有序、顺利的执行,部...

  • Presto源码分析之Slice

    Slice是Presto里面用来对内存高效地、自由地进行操作的接口。它在Presto里面很关键, Presto里面...

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

    上一篇文章,我们讲了Presto的架构。Presto是一款内存计算型的引擎,所以对于内存管理必须做到精细,才能保证...

  • presto内存配置

    说明 query.max-memory: The maximum amount of distributed me...

  • presto安装配置,及连接mysql、hive、elastic

    0、前言 Presto是分布式SQL查询引擎,基于内存的并⾏计算,用来专门处理高速,实时的数据分析。Presto本...

  • Presto内存及优化

    1.1 内存调优参数 query.max-memory:表示单个查询在分布在所有相关节点上能用的内存之和的最大值。...

  • Presto 配置

    Presto架构图 下载presto-server-317.tar.gz解压到/opt/app/presto-se...

  • presto jdbc java

    com.facebook.presto presto...

  • presto升级操作文档

    1、前言 由于presto基于内存计算,相比较与hive(on spark)有更好的交互查询体验,组织决定使用pr...

  • 目录

    基于presto0.155,以一条主线 : cli查询presto+hive返回 一、cli与presto通信机制...

网友评论

      本文标题:Presto内存数据管理

      本文链接:https://www.haomeiwen.com/subject/zcfpxktx.html