zoukankan      html  css  js  c++  java
  • 从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


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    ZOJ 2158 Truck History
    Knight Moves (zoj 1091 poj2243)BFS
    poj 1270 Following Orders
    poj 2935 Basic Wall Maze (BFS)
    Holedox Moving (zoj 1361 poj 1324)bfs
    ZOJ 1083 Frame Stacking
    zoj 2193 Window Pains
    hdu1412{A} + {B}
    hdu2031进制转换
    openjudge最长单词
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4740627.html
Copyright © 2011-2022 走看看