impala超时任务取消2


```python
#!/usr/bin/python
# -*- coding:utf-8 -*-

import sys
import commands
XXXimport requests
XXX
cmip = "10.11.XXX.XXX"
#填写cm的用户名密码
cmuser = "admin"
cmpasswd = "XXXXXXXXXXXX"
cluster_name = "Cluster 1"

# 查询任务
# curl -u admin:XXXXXXX 'http://10.11.XXX.XXX:7180/api/v17/clusters/Cluster%201/services/impala/impalaQueries?filter=(queryState=RUNNING)'
# http://10.11.XXX.XXX:7180/api/v1/hosts/57c821ba-ed31-40fc-9754-dbae70f1e9b2    取得:ipAddress
# http://10.111.XXX.XXX:25000/cancel_query?query_id=9e473bb3786ab71c:abb3909100000000


def get_running_job():
  api = "http://%s:7180/api/v17/clusters/%s/services/impala/impalaQueries?filter=(queryState=RUNNING)"%(cmip,cluster_name)
  s = requests.session()
  s.auth = (cmuser, cmpasswd)
  try:
    res = s.get(api)
    data = res.json()
    querys = data['queries']
  except Exception:
    pass
  return querys
 
# 取消任务
def cancel_job(querys):
  for query in querys:
    querytime = query['durationMillis']
    queryId = query['queryId']
    hostId = query['coordinator']['hostId']
    if querytime > 6000:
        print "Use time: " + str(querytime)
        ipapi = "http://%s:7180/api/v1/hosts/%s"%(cmip,hostId)
        print ipapi
        s = requests.session()
        s.auth = (cmuser, cmpasswd)
        try:
          res1 = s.get(ipapi)
          data1 = res1.json()
          ipd = data1['ipAddress']
          print ipd
        except Exception:
          pass
        calapi = "http://%s:25000/cancel_query?query_id=%s"%(ipd,queryId)
        print calapi
        try:
          res2 = s.get(calapi)
          data2 = res2.json()
          print data2
        except Exception:
          pass
    else:
        print "Not Timeout!"

if __name__ == '__main__':
   querys = get_running_job()
   cancel_job(querys)

Impala 是一个高性能的查询引擎,支持大规模数据集的实时分析。Impala 提供了多种方式来配置查询或操作的超时时间,以确保在长时间运行或资源争用的情况下能够合理释放资源并避免系统阻塞。 Impala超时设置主要涉及以下几个方面: 1. **查询超时Query Timeout)** Impala 允许通过 `impala.query.timeout` 参数来设置查询的最大执行时间。如果查询在指定时间内未完成,Impala 将自动取消该查询。该参数可以在启动 Impala Daemon 时通过命令行设置,也可以在运行时通过 `SET` 命令设置当前会话的超时时间。例如: ```sql SET impala.query.timeout=600; -- 设置查询超时为600秒 ``` 2. **会话超时(Session Timeout)** Impala 会话的空闲超时时间可以通过 `impala.session.timeout` 参数进行配置。如果一个会话在指定时间内没有执行任何查询或操作,Impala 将自动关闭该会话以释放资源。例如: ```sql SET impala.session.timeout=3600; -- 设置会话超时为3600秒(1小时) ``` 3. **客户端连接超时(Client Connection Timeout)** 如果客户端在建立连接后一段时间内未发送任何请求,Impala 可以通过 `impala.client.connection.timeout` 参数来关闭该连接。此设置通常用于防止客户端长时间占用连接资源而不进行任何操作。 4. **RPC 超时(RPC Timeout)** Impala 的内部组件(如 Impalad 和 StateStore)之间的通信依赖于 RPC。可以通过 `impala.rpc.timeout` 设置 RPC 调用的最大等待时间,以防止因网络延迟或节点故障导致的长时间阻塞。 5. **Admission Control 超时(Admission Timeout)** Impala 的 Admission Control 功能用于控制查询的并发执行。如果查询在等待资源分配的时间超过 `impala.admission.timeout` 的设定值,查询将被拒绝或取消。该设置有助于防止资源争用导致的系统性能下降。 这些超时参数可以在 Impala 的配置文件 `impala-config.ini` 中设置,也可以在启动 Impala 服务时通过命令行参数传递。此外,对于会话级别的设置,可以通过 `SET` 语句动态调整当前会话的行为。 ### 示例配置 以下是一个典型的 Impala 配置文件中关于超时设置的示例: ```ini # impala-config.ini # Query timeout in seconds impala.query.timeout=600 # Session timeout in seconds impala.session.timeout=3600 # Client connection timeout in seconds impala.client.connection.timeout=300 # RPC timeout in seconds impala.rpc.timeout=60 # Admission control timeout in seconds impala.admission.timeout=30 ``` ### 注意事项 - 在调整超时设置时,应根据实际工作负载和集群资源进行合理配置,避免设置过短或过长的超时时间。 - 对于生产环境,建议通过监控工具跟踪查询执行时间、会话空闲时间等指标,以优化超时设置[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值