Impala任务程序cancle
生活随笔
收集整理的這篇文章主要介紹了
Impala任务程序cancle
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#!/usr/bin/python
# -*- coding:utf-8 -*-
'''
功能:
1. 取消內存占用超過一定值 執行時間超過一定值 查殺某些用戶的任務 排除某些查詢ID
用例:
#取消查詢QUERY,用戶是zhagnwei 超過時間:10s 內存超過1E7
python cancle_impala_task.py 1E7 10000 "select" "zhangsan" ""
#取消查詢DDL,用戶是zhagnwei 超過時間:10s
python cancle_impala_task.py "" 10000 "invalidat" "zhangsan" ""
#取消查詢DDL,用戶是zhagnwei 超過時間:10s 排除查詢ID
python cancle_impala_task.py "" 10000 "invalidat" "zhangsan" "000000000e000000:2000000000000000"
說明:
1E8 = 100M
1E9 = 1G
1E10 = 10G
1E11 = 100G
'''
import sys
import commands
cmip = "192.168.1.120"
cmuser = "zhangsan"
cmpasswd = "11111111"
# 獲取參數
if len(sys.argv) == 1 or len(sys.argv) >= 7:
print "parameters is illegal."
sys.exit(1)
#使用內存設置
if len(sys.argv) >= 2:
maxMemory = sys.argv[1]
print "maxMemory:", maxMemory
#超時時間設置
if len(sys.argv) >= 3:
timeout = sys.argv[2]
print "timeout:", timeout
#查詢語句
if len(sys.argv) >= 4:
querytype = sys.argv[3]
querytypelist = querytype.split(",")
print "querytypelist:", querytypelist
#用戶設置
if len(sys.argv) >= 5:
userlist = sys.argv[4]
whitelistuser = userlist.split(",")
print "exe user white list:", whitelistuser
#會話ID設置
if len(sys.argv) == 6:
idlist = sys.argv[5]
whitelistid = idlist.split(",")
print "query id white list:", whitelistid
# 解析參數--內存限制
if maxMemory != "":
maxMemory = "%20and%20memory_aggregate_peak>" + maxMemory
# 解析參數--用戶限制
utillist = []
if whitelistuser != "":
for user in whitelistuser:
utillist.append("user="+user)
userstr = "%20and%20".join(utillist)
if userstr != "":
userstr = "%20and%20(" + userstr + ")"
else:
userstr=""
# 解析參數--時間限制
if timeout != "":
timeout = "%20and%20(query_duration>=" + timeout + ")"
# 解析參數--查詢類型限制
utillist1 = []
for type in querytypelist:
if type.upper() == "SELECT":
utillist1.append("query_type=QUERY")
elif type.upper() == "INSERT":
utillist1.append("query_type=QUERY")
elif type.upper() == "INVALIDATE":
utillist1.append("query_type=DDL")
else:
print "non-supported query type:", type
querytypestr = "%20or%20".join(utillist1)
print querytypestr
if querytypestr != "":
querytypestr = "%20and%20(" + querytypestr + ")"
# 查詢任務
cmd = "curl -u {cmuser}:{cmpasswd} 'http://{cmip}:7180/api/v9/clusters/Cluster1234/services/impala/impalaQueries?filter=(executing=true{maxMemory}{userstr}{timeout}{querytypestr})'".format(cmuser=cmuser, cmpasswd=cmpasswd, cmip=cmip, maxMemory=maxMemory, userstr=userstr, timeout=timeout, querytypestr=querytypestr)
print "query job cmd:", cmd
status, output = commands.getstatusoutput(cmd)
if status == 0:
print "query job successful."
else:
print "query job failed."
sys.exit(1)
print output
# 解析json
count = output.count(""queryId" : "")
print "job count will be killed:", count
if count == 0:
print "no result. 沒有任務需要刪除"
sys.exit(0)
#是否在白名單中
strList = output_result.split(""queryId" : "")[1:]
idList = []
for str in strList:
id = str.split(""")[0]
idList.append(id)
print "query id list will be killed:", idList
#執行取消任務
i = 1
for queryId in idList:
if queryId in whitelistid:
print "white list query id:", queryId
print "不進行中斷查詢,跳過..."
continue
print "
No.{num} queryId: {queryId}".format(queryId=queryId, num=i)
cmd = "curl -X POST -u {cmuser}:{cmpasswd} 'http://{cmip}:7180/api/v9/clusters/Cluster1234/services/impala/impalaQueries/{queryId}/cancel'".format(cmuser=cmuser, cmpasswd=cmpasswd, cmip=cmip, queryId=queryId)
print "cancel job cmd:", cmd
status, output = commands.getstatusoutput(cmd)
print output
if status == 0:
print "cancel job successful."
else:
print output
print "cancel job failed."
i+=1
print "
Program Execute Successful."
總結
以上是生活随笔為你收集整理的Impala任务程序cancle的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows7 最重要的70个技巧和窍
- 下一篇: Jbox帮助文档,默认的属性含义