presto内存分配参数

假如设置最大Heap内存为35G

需要考虑的Heap最大值因素,因为需要给系统与其他守护进程留有空间,所以最好不要将内存设置为机器内存大小

prestor参数

query.max-memory-per-node

每个机器上用于执行用户任务的内存大小,比如:排序等操作,超出限制将kill

query.max-total-memory-per-node

每个节点上用于系统与用户任务的内存大小,该参数据包括上一个参数,多出系统所用内存,比如系统分配读写等,超出限制将kill

query.max-memory

整个集群可以使用的最大用户执行内存

query.max-total-memory

整个集群可以使用的最大的系统和用户执行内存

memory.heap-headroom-per-node

各人理解是预保留的内存区域,用于一些非用户查询,有点像jvm perm(错误的理解)

该区域为不监控内存区,主要保存一些辅助信息,比如帮助jvm gc回收等 

presto内存分类:通用pool,系统 pool,预留pool

通用pool主要是执行查询

系统pool主要执行查询的系统调用

预留pool与上面的memory.heap-headroom-per-node对应(错误的理解)

预留pool是为一些大的查询预留的内存空间,比如有很多并发查询,占用了大多数的空间,当有一个大的查询它一直获得不到

资源会将它分配预留空间,但是该空间的查询只 能是排队执行的

 

参数与pool的对应关系 

0.201 前 query.max-memory-per-node 代表预留pool的大小

0201后 query.max-total-memory-per-node代表预留pool的大小

0.201后系统pool被废除,可以看到 query.max-total-memory/query.max-total-memory-per-node

来控制用户加系统内存大小

 

所以通用pool 在最新版本 = max heap - query.max-memory-per-node -  memory.heap-headroom-per-node

 

  • query.max-memory-per-node = 12GB
  • query.max-total-memory-per-node =15GB
  • memory.heap-headroom-per-node = 8GB

计算通用pool=35G - 15G - 8G

假如我们确定query.max-memory 48G还需要考虑query.initial-hash-partitions 的设置

如果query.initial-hash-partitions =8那么

48G / 8 =6G

那么 12G/6G =2,这表示如果在hash partition的时候,现有通用pool大小可以容忍两倍的数据倾斜。

初次察看presto相关文档,不对之处,请大家指证。

你可能感兴趣的:(bigdata)