【impala】because it would exceed an applicable memory limit

478 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

错误信息

在这里插入图片描述

ExecQueryFInstances rpc query_id=bf408e145c3fc6fb:b3e100c100000000

failed: Failed to get minimum memory reservation of 105.88 MB on daemon dx-hadoop115.dx:22000 for query bf408e145c3fc6fb:b3e100c100000000 because it would exceed an applicable memory limit. 

Memory is likely oversubscribed. Reducing query concurrency or configuring admission control may help avoid this error. 

Memory usage: 
Process: Limit=16.00 GB Total=9.95 GB Peak=14.61 GB 
  Buffer Pool: Free Buffers: Total=172.00 MB 
  Buffer Pool: Clean Pages: Total=1.28 GB 
  Buffer Pool: Unused Reservation: Total=-6.11 GB 
  Free Disk IO Buffers: Total=623.88 MB Peak=623.88 MB       RequestPool=root.hive: Total=12.82 GB Peak=12.88 GB 
  Query(224a58d7a2aefc66:d931db1200000000): Reservation=12.80 GB ReservationLimit=12.80 GB OtherMemory=23.31 MB Total=12.82 GB Peak=12.82 GB 
  Query(bf408e145c3fc6fb:b3e100c100000000): Reservation=0 ReservationLimit=12.80 GB OtherMemory=0 Total=0 Peak=0
RequestPool=root.wangshuangjie: Total=0 Peak=12.16 MB 
RequestPool=root.baixike: Total=0 Peak=112.13 MB
RequestPool=root.macheng: Total=0 Peak=116.15 MB
RequestPool=root.liuyiyu: Total=0 Peak=7.52 MB
RequestPool=root.risk: Total=0 Peak=7.52 MB 

Untracked Memory: Total=1.18 GB 

可能原因:

  1. impala内存溢出异常
  2. 有资源限制

问题原因:

通过分析日志 bf408e145c3fc6fb:b3e100c100000000 任务失败的原因是内存可能超额订阅。 减少查询并发或配置准入控制可能有助于避免此错误。

继续往下看: 下面是这个问题的主要原因:

RequestPool=root.hive: Total=12.82 GB Peak=12.88 GB
Query(224a58d7a2aefc66:d931db1200000000): Reservation=12.80 GB ReservationLimit=12.80 GB OtherMemory=23.31 MB Total=12.82 GB Peak=12.82 GB 
Query(bf408e145c3fc6fb:b3e100c100000000): Reservation=0 ReservationLimit=12.80 GB OtherMemory=0 Total=0 Peak=0

root.hive资源池只有12GB,被224a58d7a2aefc66:d931db1200000000这个任务基本全部耗尽,导致bf408e145c3fc6fb:b3e100c100000000这个任务失败。

解决方案:

  1. kill掉占资源的任务
  2. 解决方法就是把内存限制取消,或者加大 set mem_limit=-1 #取消 或者 1gb 100mb 1000b等值 如果以上还不行,就要去配置文件修改 Impala Daemon 内存限制 mem_limit=-1b

单池内存限制 default_pool_mem_limit=-1b

说明 : default_pool_mem_limit: 配置使用单个池时用于 Admission Control 的运行查询的最大内存。-1 或 0 表示无限制。已启用“用于 Admission Control 的动态资源池”时忽略。

mem_limit: 由守护程序本身强制执行的 Impala Daemon 的内存限制(以字节为单位)。如果达到该限制,Impalad Daemon 上运行的查询可能会被停止。将其留空可以让 Impala 选择自己的限制。使用 -1 B 值将指定无任何限制。

如图: 在这里插入图片描述