Impala队列内存参数分析
问题
对Impala队列内存的几个参数分析了下,欢迎指正
队列资源池的几个内存配置
Maximum Query Memory Limit
某个队列资源池,一个查询在一个Impala节点上下执行需要的最小内存
Minimum Query Memory Limit
某个队列资源池,一个查询在一个Impala节点上下执行需要的最大内存
最大内存
可用于此池中执行的所有查询的最大内存
给一个Impala队列提交查询时,Impala如何判断是否接受查询请求
实验sql
set request_pool = hqueue;
select tally_id, acctset_code from testtable where acctset_code='00001'order by acctset_code limit 5 offset 5;
查询sql分析
[ip:21000] testdb> explain select tally_id, acctset_code from testtable where acctset_code='00001'order by acctset_code limit 5 offset 5;
Query: explain select tally_id, acctset_code from testtable where acctset_code='00001'order by acctset_code limit 5 offset 5
+------------------------------------------------------------------------------------+
| Explain String |
+------------------------------------------------------------------------------------+
| Max Per-Host Resource Reservation: Memory=8.00MB Threads=3 |
| Per-Host Resource Estimates: Memory=256MB |
| WARNING: The following tables are missing relevant table and/or column statistics. |
| testdb.testtable |
| |
| PLAN-ROOT SINK |
| | |
| 02:MERGING-EXCHANGE [UNPARTITIONED] |
| | offset: 5 |
| | order by: acctset_code ASC |
| | limit: 5 |
| | |
| 01:TOP-N [LIMIT=10] |
| | order by: acctset_code ASC |
| | row-size=22B cardinality=10 |
| | |
| 00:SCAN HDFS [testdb.testtable] |
| partitions=138/138 files=140 size=808.62MB |
| predicates: acctset_code = '00001' |
| row-size=22B cardinality=16 |
+------------------------------------------------------------------------------------+
注意的地方:这里面有个单节点需要内存值256M,不过Impala估算的不一定准确。
实验1
Left-Aligned | Left-Aligned | Left-Aligned | Left-Aligned |
---|---|---|---|
队列名称 | 最大内存 | Minimum Query Memory Limit | Maximum Query Memory Limit |
root.hqueue | 500M | 260M | 270M |
提交结果:
[ip:21000] testdb> select tally_id, acctset_code from testtable where acctset_code='00001'order by acctset_code limit 5 offset 5;
Query: select tally_id, acctset_code from testtable where acctset_code='00001'order by acctset_code limit 5 offset 5
Query submitted at: 2020-06-23 10:54:55 (Coordinator: http://ip:25000)
Query progress can be monitored at: http://ip:25000/query_plan?query_id=f54d764cf100d474:a89eec5c00000000
ERROR: Rejected query from pool root.hqueue: request memory needed 780.00 MB is greater than pool max mem resources 500.00 MB.
猜测是因为:260M(查询最小内存) * 3 =780M > 500M
实验2
Left-Aligned | Left-Aligned | Left-Aligned | Left-Aligned |
---|---|---|---|
队列名称 | 最大内存 | Minimum Query Memory Limit | Maxmum Query Memory Limit |
root.hqueue | 500M | 250M | 270M |
提交结果:
[ip:21000] testdb> select tally_id, acctset_code from testtable where acctset_code='00001'order by acctset_code limit 5 offset 5;
Query: select tally_id, acctset_code from testtable where acctset_code='00001'order by acctset_code limit 5 offset 5
Query submitted at: 2020-06-23 10:58:28 (Coordinator: http://ip:25000)
Query progress can be monitored at: http://ip:25000/query_plan?query_id=39423b17b20dc603:66c4de7400000000
ERROR: Rejected query from pool root.hqueue: request memory needed 768.23 MB is greater than pool max mem resources 500.00 MB.
猜测是因为:256M(查询计划里面估计的单节点内存) * 3 = 768M > 500M,综合实验1和实验2,估计Impala在判断查询是否会超内存时,对估计值和Minimum Query Memory Limit参数,会有个 Max(估计值,Minimum Query Memory Limit)操作,在实验1中,即Max(256M,260M),实验2中,即Max(256,250)。
实验3
Left-Aligned | Left-Aligned | Left-Aligned | Left-Aligned |
---|---|---|---|
队列名称 | 最大内存 | Minimum Query Memory Limit | Maxmum Query Memory Limit |
root.hqueue | 500M | 250M | 252M |
提交结果:
[ip:21000] testdb> select tally_id, acctset_code from testtable where acctset_code='00001'order by acctset_code limit 5 offset 5;
Query: select tally_id, acctset_code from testtable where acctset_code='00001'order by acctset_code limit 5 offset 5
Query submitted at: 2020-06-23 11:09:42 (Coordinator: http://ip:25000)
Query progress can be monitored at: http://ip:25000/query_plan?query_id=e24e74d387c201b5:9e72143600000000
ERROR: Rejected query from pool root.hqueue: request memory needed 756.00 MB is greater than pool max mem resources 500.00 MB
猜测是因为:252M * 3 = 756M > 500M,结合实验2,估计Impala在判断查询是否会超内存时,对于Maxmum Query Memory Limit参数,会有个Min操作,即Min(Max(估计值,Minimum Query Memory Limit),Maxmum Query Memory Limit),在本例中,即Min(Max(256M,250M),252M)
实验4
mem_limit:指定查询每个节点需要的内存
Left-Aligned | Left-Aligned | Left-Aligned | Left-Aligned |
---|---|---|---|
队列名称 | 最大内存 | Minimum Query Memory Limit | Maxmum Query Memory Limit |
root.hqueue | 500M | 100M | 200M |
[ip:21000] testdb> set mem_limit=170M;
MEM_LIMIT set to 170M
[ip:21000] testdb> select tally_id, acctset_code from testtable where acctset_code='00001'order by acctset_code limit 5 offset 5;
Query: select tally_id, acctset_code from testtable where acctset_code='00001'order by acctset_code limit 5 offset 5
Query submitted at: 2020-06-23 13:53:31 (Coordinator: http://ip:25000)
Query progress can be monitored at: http://ip:25000/query_plan?query_id=ba4fa4a44d2dac9d:b24a60d600000000
ERROR: Rejected query from pool root.hqueue: request memory needed 510.00 MB is greater than pool max mem resources 500.00 MB.
[ip:21000] testdb> set mem_limit=210M;
MEM_LIMIT set to 210M
[ip:21000] testdb> select tally_id, acctset_code from testtable where acctset_code='00001'order by acctset_code limit 5 offset 5;
Query: select tally_id, acctset_code from testtable where acctset_code='00001'order by acctset_code limit 5 offset 5
Query submitted at: 2020-06-23 13:54:07 (Coordinator: http://ip:25000)
Query progress can be monitored at: http://ip:25000/query_plan?query_id=ca49acba3c002727:2d69557a00000000
ERROR: Rejected query from pool root.hqueue: request memory needed 600.00 MB is greater than pool max mem resources 500.00 MB
分析:mem_limit=170M时,Min(Max(170,100),200) * 3 = 510M > 500M;mem_limit=210M时,Min(Max(210,100),200) * 3 = 600M > 500;猜测,指定mem_limit时,Impala会使用mem_limit值来代替自己估计的内存使用值,并结合Minimum Query Memory Limit和Maxmum Query Memory Limit来判断内存是否会超过最大内存,从而决定是否拒绝查询请求。
实验5
Left-Aligned | Left-Aligned | Left-Aligned | Left-Aligned |
---|---|---|---|
队列名称 | 最大内存 | Minimum Query Memory Limit | Maxmum Query Memory Limit |
root.hqueue | 500M | 39M | 39M |
[ip:21000] testdb> select tally_id, acctset_code from testtable where acctset_code='00001'order by acctset_code limit 5 offset 5;
Query: select tally_id, acctset_code from testtable where acctset_code='00001'order by acctset_code limit 5 offset 5
Query submitted at: 2020-06-23 15:26:42 (Coordinator: http://ip:25000)
Query progress can be monitored at: http://ip:25000/query_plan?query_id=234ca270d3731d06:9980e6fd00000000
ERROR: Rejected query from pool root.hqueue: minimum memory reservation is greater than memory available to the query for buffer reservations. Memory reservation needed given the current plan: 8.00 MB. Adjust either the mem_limit or the pool config (max-query-mem-limit, min-query-mem-limit) for the query to allow the query memory limit to be at least 40.00 MB. Note that changing the mem_limit may also change the plan. See the query profile for more information about the per-node memory requirements.
以下配置,查询成功提交并执行
Left-Aligned | Left-Aligned | Left-Aligned | Left-Aligned |
---|---|---|---|
队列名称 | 最大内存 | Minimum Query Memory Limit | Maxmum Query Memory Limit |
root.hqueue | 500M | 40M | 40M |
分析:max-query-mem-limit, min-query-mem-limit,不能设置的太小,测试环境中,单个节点最少需要40M
结论
当查询指定mem_limit,以下条件拒绝提交查询,报内存不够
__Min(Max(mem_limit,Minimum Query Memory Limit),Maxmum Query Memory Limit) * 节点数 __> 最大内存
未指定mem_limit,以下条件拒绝提交查询,报内存不够,估计值可以通过explain获得,不过Impala估计的不准
__Min(Max(估计值,Minimum Query Memory Limit),Maxmum Query Memory Limit) * 节点数 __> 最大内存
max-query-mem-limit, min-query-mem-limit,不能设置的太小,测试环境中,单个节点最少需要40M
建议
- 配置Maxmum Query Memory Limit * 节点数 <= 最大内存,查询应该不会被reject
- 若队列资源池中没有配置Minimum Query Memory Limit和Maxmum Query Memory Limit参数,那么从之前的结论也可以看出,Impala会根据__估计值 * 节点数__ 是否大于最大内存来判断是否拒绝该查询,但因为Impala估计出的单节点内存上限值很不准确,所以这种情况,可以通过 set mem_limit = XXM,人为设置一个合理的大小,后续Impala会根据__mem_limit__ * 节点数来判断是否会超过最大内存
Impala队列内存参数分析的更多相关文章
- JVM内存结构、参数调优和内存泄露分析
1. JVM内存区域和参数配置 1.1 JVM内存结构 Java堆(Heap) Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建.此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都 ...
- jvm内存溢出分析
概述 jvm中除了程序计数器,其他的区域都有可能会发生内存溢出 内存溢出是什么? 当程序需要申请内存的时候,由于没有足够的内存,此时就会抛出OutOfMemoryError,这就是内存溢出 内存溢出和 ...
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe
消息队列NetMQ 原理分析4-Socket.Session.Option和Pipe 前言 介绍 目的 Socket 接口实现 内部结构 Session Option Pipe YPipe Msg Y ...
- 细说并发5:Java 阻塞队列源码分析(下)
上一篇 细说并发4:Java 阻塞队列源码分析(上) 我们了解了 ArrayBlockingQueue, LinkedBlockingQueue 和 PriorityBlockingQueue,这篇文 ...
- .NET内存性能分析宝典
.NET Memory Performance Analysis 知道什么时候该担心,以及在需要担心的时候该怎么做 译者注 **作者信息:Maoni Stephens ** - 微软架构师,负责.NE ...
- 转: 关于Linux与JVM的内存关系分析
转自: http://tech.meituan.com/linux-jvm-memory.html Linux与JVM的内存关系分析 葛吒2014-08-29 10:00 引言 在一些物理内存为8g的 ...
- Linux TCP队列相关参数的总结 转
在Linux上做网络应用的性能优化时,一般都会对TCP相关的内核参数进行调节,特别是和缓冲.队列有关的参数.网上搜到的文章会告诉你需要修改哪些参数,但我们经常是知其然而不知其所以然,每次照抄过 ...
- Android内存机制分析1——了解Android堆和栈
//----------------------------------------------------------------------------------- Android内存机制分析1 ...
- Android 内存管理分析(四)
尊重原创作者,转载请注明出处: http://blog.csdn.net/gemmem/article/details/8920039 最近在网上看了不少Android内存管理方面的博文,但是文章大多 ...
随机推荐
- 来吧,展示!Redis的分布式锁及其实现Redisson的全过程
前言 分布式锁是控制分布式系统之间同步访问共享资源的一种方式. 在分布式系统中,常常需要协调他们的动作.如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要 ...
- 使用CorelDRAW修饰用于打印的图像
CorelDRAW在打印输出方面一直做的非常棒,它不仅是一款专业的矢量绘图软件,位图处理也是很厉害的.本文我们讲述修饰.处理数码相机图像,以便将其用于 CMYK 打印作业的一些重要步骤,先来看下被调整 ...
- 什么是NTFS文件格式
说到磁盘格式,想必大家对于NTFS格式并不陌生.我们使用的u盘等硬盘设备很多都应用了此格式.NTFS文件格式究竟是什么?它都有哪些特点?今天,小编将利用这篇文章为大家进行介绍. 一.什么是NTFS文件 ...
- guitar pro系列教程(七):Guitar Pro丰富的演奏技巧
这一章,我们来讲guitar pro的演奏技巧 上一章节我们了解了Guitar Pro的音轨菜单,对于玩吉他的小伙伴肯定比较想要了解其的演奏方面的技巧,毕竟我们使用这款软件就是希望自己在吉他方面有更多 ...
- Java基础教程——线程同步
线程同步 synchronized:同步的 例:取钱 不做线程同步的场合,假设骗子和户主同时取钱,可能出现这种情况: [骗子]取款2000:账户余额1000 [户主]取款2000:账户余额1000 结 ...
- Snap Build Your Own Block修炼之道-添加自定义类别
Snap Build Your Own Block自我修炼方法:1.所有的面向对象,其实是对面向过程的抽象过程而已: 2.面对别人的开源项目时,需要找准源头(即项目运行的起点,当然有的是没有的哈,没有 ...
- 树莓派4b 安装最新wiringpi库
树莓派4自带的wiringPi库默认是2.50,无法映射到gpio,所以需要更新到2.52才能与树莓派映射: 1. 安装自带的wiringPi库 $ Sudo apt-get install wiri ...
- 冲刺随笔——Day_Nine
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺 作业正文 正文 其他参考文献 无 ...
- shiro利用过期时间,解决用户冻结踢出问题
背景 shiro中需要冻结某个用户,但是此时此刻这个用户在线,如果冻结只是改变状态的话,只会导致用户不满,所以要改变这个办法. 在查找过程中发现都是告诉shiro写自定义过滤器,那么我如果自定义过滤器 ...
- CSP2020复赛游记
CSP2020复赛游记 由于本蒟蒻侥幸通过PJ和TG的分数线并且侥幸的拿了一等,所以侥幸的来参加复赛 11.04~11.05 期中考,挂 11.06 对答案,炸 11.07 开始了第一次CSP复赛 坐 ...