欢迎关注大数据技术架构与案例微信公众号:过往记忆大数据
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
过往记忆大数据

Velox query 内存

当 Presto CPP 接收到新的 Task 时,它会根据以下几个规则创建一个四级层次的 MemoryPool:
1、首先,系统会为该 Task 创建一个 Query 级别的 root MemoryPool,由 QueryCtx 维护, 这个内存池的最大容量(capacity)由 query_max_memory_per_node 或 query.max-memory-per-node 参数决定,其默认值为 4GB;如果同一查询下的其他任务被分配到这个 Worker,那么将重复使用这个 query MemoryPool。也就是说,在一个 Worker 上,同一个查询只会创建一个 query MemoryPool。
2、接着,在 query MemoryPool 下为这个 Task 创建一个 task MemoryPool。同一个 Work 上同一个 Task 只会建一个 task MemoryPool,不同 Task 会创建多个 Task MemoryPool。Task MemoryPool 是在初始化 Task 类时创建的。
3、在执行 Task 时,执行计划树中的每个 PlanNode 都将创建一个 node MemoryPool,node MemoryPool 的 parent 是 Task MemoryPool,且同一个 Task 中的 PlanNode 对应的 node MemoryPool 属于同一个 Task MemoryPool;
4、每个 PlanNode 在转换成 Operator 的时候,会初始化一个 operator MemoryPool,operator MemoryPool 的 parent 就是其对应 PlanNode 的 node MemoryPool。

在四层 MemoryPool 结构中,除了 operator MemoryPool 是 leaf memory pool,其他三个 MemoryPool 都是 aggregation memory pool。在 Velox 中,分配内存时,只能从 leaf memory pool 中进行;而 aggregation memory pool 不能分配内存,它只能创建子 MemoryPool,并聚合子内存池的内存使用情况。

本博客文章除特别声明,全部都是原创!
原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【Velox query 内存】(https://www.iteblog.com/archives/10241.html)
喜欢 (0)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!