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

我们都知道如果使用hadoop job -list

获取当前正在运行的hadoop 任务,返回的结果如下:

返回的任务中不包括任务的名称, 但是通过hadoop 管理页面是可以查看到job 的名称的。

但是现实情况是我们可能需要根据任务的名称来删除任务。

我的实现方案是这样的

1. 通过获取 :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 = Noneself.flag = Falseself.name_flag = Falsedef handle_starttag(self, tag, attrs):if tag == 'td':for name,value in attrs:if name == 'id' and value.startswith("job_"):self.flag = Trueself.name_flag = Falsebreakelif name == 'id' and value.startswith("name_"):self.flag = Trueself.name_flag = Truebreakdef handle_endtag(self, tag):self.flag = Falsedef 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" ] ; thenecho "参数不能为空"echo "用法: bash kill_job.sh <keyword> "exitficurl -O :50030/jobtracker.jsppython parse.py | grep $keyword |sort| tee job.tmpecho "—————- start kill ——————-"# 执行删除动作cat ./job.tmp |sort| while read LINEdo#echo $LINEjob_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

,失败是成功的亲娘,没有失败哪来的成功呢?诺贝尔如果不经历千万次的失败,

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

相关文章:

你感兴趣的文章:

标签云: