impala查询作业超时分析

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/979eca668755

生产在线集群impala查询,多个作业超时

现象:

1、业务方反馈impala查询失败,未返回结果;

2、可看到CM页面上大量impala查询语句正在运行,持续时间>5m(已超时,该值为impala admission control的timeout参数,可设置)

【分析过程】

对于一条超时语句,在default队列上进行测试,

名称            最大内存            最大运行查询     最大队列查询      Queue Timeout   Default Query Memory Limit

default        100 吉字节                   2                         200                          1 分钟                       2 吉字节

执行

[IP:21000] > set request_pool=default;

REQUEST_POOL set to default

对其中一张表做compute stats,得到该表的分区和列数——【COMPUTE STATS可用来收集涉及到的所有表的统计信息,并让Impala基于每一个表的大小、每一个列不同值的个数、等等信息自动的优化查询,impala查询时计算内存消耗会更加准确】

[IP:21000] > compute stats gl_hisdb.tbl_orhis_trans_log;

Query: compute stats gl_hisdb.tbl_orhis_trans_log

+--------------------------------------------+

| summary                                    |

+--------------------------------------------+

| Updated 143 partition(s) and 61 column(s). |

+--------------------------------------------+

Fetched 1 row(s) in 74.17s

[IP:21000] > show table stats gl_hisdb.tbl_orhis_trans_log;    (做了compute stats之后的表)

Query: show table stats gl_hisdb.tbl_orhis_trans_log

+--------------+----------+--------+----------+--------------+-------------------+---------+-------------------+----

| hp_settle_dt | #Rows    | #Files | Size    | Bytes Cached | Cache Replication | Format  | Incremental stats | Location                                                                              |

+--------------+----------+--------+----------+--------------+-------------------+---------+-------------------+----

| 20180813    | 338489  | 1      | 28.92MB  | NOT CACHED  | NOT CACHED        | RC_FILE | false            | hdfs://nameservice/user/dw_hbkal/db/gl_hisdb/tbl_orhis_trans_log/hp_settle_dt=20180813 |

…………………………………………

【同时可以做show column stats 表名】

查看执行计划

[IP:21000] > explain SELECT COUNT(*), hp_settle_dt FROM gl_hisdb.tbl_orhis_trans_log GROUP BY hp_settle_dt;

Query: explain SELECT COUNT(*), hp_settle_dt FROM gl_hisdb.tbl_orhis_trans_log GROUP BY hp_settle_dt

+-----------------------------------------------------------+

| Explain String                                            |

+-----------------------------------------------------------+

| Estimated Per-Host Requirements: Memory=132.00MB VCores=2 |

|                                                          |

…………

| 00:SCAN HDFS [gl_hisdb.tbl_orhis_trans_log]              |

|    partitions=143/143 files=144 size=6.35GB              |

+-----------------------------------------------------------+

Fetched 16 row(s) in 0.02s

可知,该语句运行所需单节点内存大小132M

手工执行查询语句:

[IP:21000] > SELECT COUNT(*), hp_settle_dt FROM gl_hisdb.tbl_orhis_trans_log GROUP BY hp_settle_dt;

Query: select COUNT(*), hp_settle_dt FROM gl_hisdb.tbl_orhis_trans_log GROUP BY hp_settle_dt

Query submitted at: 2019-01-03 10:27:55 (Coordinator: http://hostname:25000)

ERROR: Rejected query from pool root.default : request memory needed 234.00 GB is greater than pool max mem resources 100.00 GB.

Use the MEM_LIMIT query option to indicate how much memory is required per node. The total memory needed is the per-node MEM_LIMIT times the number of nodes executing the query. See the Admission Control documentation for more information.

[IP:21000] >

查询失败的提示为 request memory needed 234.00 GB is greater than pool max mem resources 100.00 GB.

该查询语句估算需消耗队列234G内存资源,大于该队列内存资源上限100G,因此提示可用资源不足而报错。

应用方在执行该查询前指定了tqueue,该资源队列资源上限为300g,是大于234G的,因此该查询作业可被提交,在impala页面显示为运行状态,但由于tqueue队列上运行的作业往往多个,因此会出现排队现象,而后续作业等待时间在超过queue timeout时间(5分钟)后便会失败。依次类推。

ps:default的Default Query Memory Limit为2G,因此可推算出该查询是分配在234/2=117个节点上运行。集群中共有145个impala daemon,而该表的partitions是143个,非均匀分布在117个节点上。

在动态资源池impala中,有两个参数需关注:第一个参数是资源队列的最大内存;第二个参数是Default Query Memory Limit

第一个参数是对整个资源池进行资源限定,是一个集群范围的限制,它根据每个主机的Default Query Memory Limit(查询内存上限)乘以集群中的IMPALA节点数来确定可以同时安全运行多少查询。

第二个参数引用cloudera官网的一段话:

"That value affects the execution of each query, preventing it from overallocating memory on each host, and potentially activating the spill-to-disk mechanism or cancelling the query when necessary."——该值将会影响每个query的运行,它能尽可能地降低在单个主机上过度的内存分配,还能触发溢写磁盘机制,并在必要时取消query。

简单来说,该值的含义是:每台节点上,每个query的内存限定。

两者需满足如下关系:Default Query Memory Limit*运行impala查询节点数量<资源队列的可用最大内存,这是显然的。

eg:impala daemon节点数有150个,Default Query Memory Limit的值设置为2g,那么分配的query资源队列大小需大于2*150=300g。

若队列资源<300g,该查询可能会提交不上(query需要资源大于资源队列可用内存上限)或处于等待状态(query需要资源虽然小于资源队列可用内存上限,但由于有前序查询,需等待资源释放)。

根据以上,为确保在impala的某个资源池中,能并发运行多个impala作业,需注意两点:

1、指定合适的最大内存设置,即第一个参数值,这是一个集群范围的限制,它根据每个主机的Default Query Memory Limit(查询内存上限)乘以集群中的IMPALA节点数来确定可以同时安全运行多少查询。

2、指定合适的Default Query Memory Limit(根据实际query所需的单节点内存可适当降低)

以生产集群为例,资源队列tqueue的最大内存上限为300g,设置的可同时并行运行的作业数量为50,impala daemon节点数145个,Default Query Memory Limit为2g。

在该设置的情形下,对于一个大表来说,假设查询运行在145个impala daemon节点上,impala估算所需的资源为145*2=290g,临界该资源队列上限,可保证该作业提交;由于设置了并行作业数50,后续提交的作业大概率会因为资源不足而发生等待,当等待时间超过5分钟,作业将会失败。

从之前的执行计划可看出,Estimated Per-Host Requirements: Memory=132.00MB VCores=2 一个查询大约消耗132M内存,设置2g的Default Query Memory Limit偏大,将其调整为1g,那么为保证并行50个作业运行,需设置队列最大内存为1g*145*50=7250g。考虑到实际并行作业并没有这么多,且集群内存还需给到其他服务,可适当降低该值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,273评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,349评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,709评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,520评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,515评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,158评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,755评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,660评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,203评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,287评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,427评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,122评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,801评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,272评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,393评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,808评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,440评论 2 359

推荐阅读更多精彩内容