从hadoop 中删除匹配指定字符串的任务
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://vearne.cc
我们都知道如果使用
hadoop job -list
获取当前正在运行的hadoop 任务,返回的结果如下:
返回的任务中不包括任务的名称, 但是通过hadoop 管理页面是可以查看到job 的名称的。
但是现实情况是我们可能需要根据任务的名称来删除任务。
我的实现方案是这样的
- 通过获取 http://192.168.1.100:50030/jobtracker.jsp 网页
-
解析网页获取任务名称 + job_id 的任务列表
-
过滤出指定名称的job
-
最后调用hadoop job -kill
来杀死任务
from HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
# self.current_tag = None
self.flag = False
self.name_flag = False
def handle_starttag(self, tag, attrs):
if tag == 'td':
for name,value in attrs:
if name == 'id' and value.startswith("job_"):
self.flag = True
self.name_flag = False
break
elif name == 'id' and value.startswith("name_"):
self.flag = True
self.name_flag = True
break
def handle_endtag(self, tag):
self.flag = False
def handle_data(self, data):
if self.flag:
print data,
if self.name_flag:
print ' '
if __name__ == '__main__':
fp = open("./jobtracker.jsp")
data = fp.read()
my = MyHTMLParser()
my.feed(data)
主程序 kill_job.sh
# 过滤待删除的任务
keyword=$1
if [ -z "$keyword" ] ; then
echo "参数不能为空"
echo "用法: bash kill_job.sh <keyword> "
exit
fi
curl -O http://192.168.1.100:50030/jobtracker.jsp
python parse.py | grep $keyword |sort| tee job.tmp
echo "---------------- start kill -------------------"
# 执行删除动作
cat ./job.tmp |sort| while read LINE
do
#echo $LINE
job_id=`echo $LINE|awk -F " " '{print $1}'| tr -d ' '`
echo "kill job -- ${job_id}"
hadoop job -kill "$job_id"
done
执行方法:
bash kill_job.sh merge_sl
merge_sl 是job 的名称
完整代码地址:
https://github.com/vearne/del_hadoop_job