hadoop job -list
获取当前正在运行的hadoop 任务,返回的结果如下:
返回的任务中不包括任务的名称, 但是通过hadoop 管理页面是可以查看到job 的名称的。
但是现实情况是我们可能需要根据任务的名称来删除任务。
我的实现方案是这样的
1. 通过获取 http://192.168.1.100:50030/jobtracker.jsp 网页
2. 解析网页获取任务名称 + job_id 的任务列表
3. 过滤出指定名称的job
4. 最后调用hadoop job -kill <job_id> 来杀死任务
代码如下:
parse.py 使用python 自带的html 解析模块
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)
用shell 实现
# 过滤待删除的任务 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
原文地址:http://blog.csdn.net/woshiaotian/article/details/44464939