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


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

  • 相关阅读:
    【洛谷P4887】【模板】莫队二次离线(第十四分块(前体))
    查询数据库表大小
    java程序使用ssl证书连接mysql
    win32- 函数运行速度测试
    回调函数是嘛东西
    win32-读取控制台中所有的字符串
    关于 websocket 的一些学习
    idea下载地址
    ida 重新定义
    P1650 田忌赛马(贪心)
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4740627.html
Copyright © 2011-2022 走看看