impala在查询时,是全部资源可用才会执行查询语句,不过有时候某个不友好的查询语句会导致整个集群负载飙升,所以我们需要限制impala的资源使用。不同CDH版本推荐的资源管理方案不太一样。本文以CDH 5.10为例。
Creating Static Service Pools
通过Cloudera Manager分配整个hadoop集群的资源。包括CPU、IO、memory。对于使用CLI的我直接放弃(主要是没找到CLI配置方法)
Using Admission Control
动态资源配置解释:
1 Max Running Queries: 队列中允许的最大查询数量
2 Max Memory Resources: 资源池中的查询允许使用的最大内存。 此值在许可时使用,并且不在查询运行时强制执行。
3 Default Query Memory Limit: 定义每个查询可在每个节点上分配的最大内存量。 这在运行时强制执行。 如果查询尝试使用更多内存,它被强制溢出。 否则,它被取消。 查询可以使用的总内存是MEM_LIMIT乘以节点数。
4 Max Queued Queries: 在拒绝其他查询之前,可以在池中排队的查询的最大数量。
5 Queue Timeout: 查询在队列中等待的最大时间
Setting Per-query Memory Limits
设置每个查询可用的内存,可以设置set MEM_LIMIT=Xg查询变量
Creating Dynamic Resource Pools
需要Admission Control来配合
Tips
也可以在impalad启动的时候设置查询变量和相关值,这些设置控制impalad在查询时的行为。
-default_query_options='option=value,option=value,...'
ps:impalad的启动变量看这里
资源控制详情请看这里