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

我们都知道如果使用

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)

主程序  kill_job.sh

用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

时间: 2024-08-09 10:39:21

从hadoop 中删除匹配指定字符串的任务的相关文章

not(expr|ele|fn)从匹配元素的集合中删除与指定表达式匹配的元素

not(expr|ele|fn) 概述 从匹配元素的集合中删除与指定表达式匹配的元素 参数 exprStringV1.0 一个选择器字符串.深圳dd马达 elementDOMElementV1.0 一个DOM元素 function(index)FunctionV1.4 一个用来检查集合中每个元素的函数.this是当前的元素. 示例 描述: 从p元素中删除带有 select 的ID的元素 HTML 代码: <p>Hello</p><p id="selected&quo

Editplus 正则表达式 删除含有指定字符串的行 删除注释

1.删除含有指定字符串的行 替换:  ^.*(指定字符串).*$  为空 例如,删除含有"JOIN"的行, 替换:  ^.*JOIN.*$   为空 2.删除//行注释 替换: //.*$  为空 (需注意,此正则会误删在引号中的'//',  如 'http://www'  ) 3.删除/*...*/段注释 替换: //*.*/n*.*/*/  为空 (需要注意,此正则在Editplus中会有一定的误判,应该是bug,请在替换时单步观察)

PHP判断字符串中是否包含指定字符串,支持中文哦

RT,随手写的 1 /** 2 * 判断字符串中是否包含指定字符串 3 * @var source 源字符串 4 * @var target 要判断的是否包含的字符串 5 * @return bool 6 */ 7 function hasstring($source,$target){ 8 preg_match_all("/$target/sim", $source, $strResult, PREG_PATTERN_ORDER); 9 return !empty($strResul

从第一个字符串中删除第二个字符串中出现过的所有字符

// 从第一个字符串中删除第二个字符串中出现过的所有字符 #include <stdio.h> char* remove_second_from_first( char *first, char *second ) { if( first == NULL || second == NULL ) { printf("first or/and second should not be NULL\n"); return NULL; } char flag[256]={0}; ch

涛哥的Python工具箱之批量删除含指定字符串行

我们在软件研发中不可避免的要用到大量的反复性的繁琐的工作,比如批量改动代码中接口的字符串.批量下载文件并又一次按规则命名.这些工作人工做特别累,尤其是对我这样的懒人来说. 对于一个出色的程序猿来说,反复是最不能接受的事情之中的一个,因此我们要发明工具把反复的工作自己主动化.曾经我是用linux shell脚本来完毕这些事情的,但因为shell脚本语法能力的限制.有些复杂功能无法有效高速的实现,而且写出的代码难以维护,基本属于一次性代码,非常难复用.因此后面慢慢開始尝试用Python完毕一些自己主

从一个字符串中删除另一个字符串中出现过的字符

定义一个函数,输入两个字符串,从第一个字符串中删除在第二个中出现过的所偶字符串.例如从第一个字符串"We are students."中删除第二个字符中"auiou"中出现过的字符得到的结果是"W r stdnts" 解题思路:利用哈希查找. #include <stdio.h> void deleteStr2FromStr1(char* str1, char* str2) { if(str1 == NULL || str2 == N

输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。

在字符串中删除特定的字符 输入”They are students.” 和”aeiou”则删除之后第一个字符串变成 Thy r stdnts. 本题还用到了 “字符串hash” #include <iostream> #include <cstring> char * string_del_characters( char * const src, const char * const dest ) { int destLen = strlen( dest ); int hash_

php检测字符串中是否包含指定字符串

1.$str= 'abc'; $needle= 'a'; if( strpos($str, $needle) === false ){ } 2.strstr() 函数搜索一个字符串在另一个字符串中的第一次出现. 如果未找到所搜索的字符串,则返回 false $email = '[email protected]'; $domain = strstr($email, '@'); 3. stristr 如果没有找到该字符串,则返回 false.    它和strstr的使用方法完全一样.唯一的区别是

HTML网页内容转换成字符串(删除从指定字符串到指定字符串)

背景: 最近遇到个小需求就是将下面字符串去掉无用字符串 <br><br>"你爷爷也喜欢吃鱼嘛."<br><br>我笑了起来,"哪有猫不喜欢吃鱼的?"<br><br>猫嘀咕了一声.<br><br>"它说什么?"<br><br>"它说你怎么还钓不到,肚子都等饿了."<br><br>我瞥了猫