从hadoop 中删除匹配指定字符串的任务

来源:互联网 发布:windows打开81端口 编辑:程序博客网 时间:2024/05/28 19:24
我们都知道如果使用
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 HTMLParserclass 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

用shell 实现  

# 过滤待删除的任务keyword=$1if [ -z "$keyword" ] ; then    echo "参数不能为空"    echo "用法: bash kill_job.sh <keyword> "    exitficurl -O http://192.168.1.100:50030/jobtracker.jsppython parse.py | grep $keyword |sort| tee job.tmpecho "---------------- start kill -------------------"# 执行删除动作cat ./job.tmp |sort| while read LINEdo    #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


0 0
原创粉丝点击